diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 0be72a1ef5..2c7fd1a0a9 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -3,7 +3,7 @@ # In contrast with the "production" image (which is based on an Alpine image) # we use a Debian-based image for the devcontainer -FROM mcr.microsoft.com/devcontainers/python:3.11-bookworm@sha256:5140e54af7a0399a4932dd4c4653d085fcf451b093d7424867df1828ffbb9b81 +FROM mcr.microsoft.com/devcontainers/python:3.11-bookworm@sha256:e754c29c4e3ffcf6c794c1020e36a0812341d88ec9569a34704b975fa89e8848 # InvenTree paths ENV INVENTREE_HOME="/home/inventree" @@ -32,12 +32,17 @@ RUN apt update && apt install -y \ poppler-utils weasyprint # Install packages required for frontend development -RUN apt install -y \ - yarn nodejs npm +RUN apt install -y nodejs npm # Update to the latest stable node version RUN npm install -g n --ignore-scripts && n lts -RUN yarn config set network-timeout 600000 -g +# Install yarn +RUN npm install -g yarn + +# Ensure node and yarn are available at the command line +RUN node --version && yarn --version + +RUN yarn config set httpTimeout 600000 --home ENTRYPOINT ["/bin/bash", "./init.sh"] diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 13f45ee645..0000000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,3 +0,0 @@ -polar: inventree -github: inventree -custom: [paypal.me/inventree] diff --git a/.github/actions/setup/action.yaml b/.github/actions/setup/action.yaml index b12757b647..3c7526de71 100644 --- a/.github/actions/setup/action.yaml +++ b/.github/actions/setup/action.yaml @@ -15,6 +15,10 @@ inputs: required: false description: 'Install the InvenTree requirements?' default: 'false' + static: + required: false + description: 'Should the static files be built?' + default: 'false' dev-install: required: false description: 'Install the InvenTree development requirements?' @@ -41,7 +45,7 @@ runs: # Python installs - name: Set up Python ${{ env.python_version }} - if: ${{ inputs.python == 'true' }} + if: ${{ inputs.python == 'true' && env.python_version != '3.14' }} uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # pin@v5.0.0 with: python-version: ${{ env.python_version }} @@ -51,6 +55,11 @@ runs: src/backend/requirements-dev.txt contrib/container/requirements.txt contrib/dev_reqs/requirements.txt + - name: Setup Python 3.14 + if: ${{ inputs.python == 'true' && env.python_version == '3.14' }} + uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # pin@v5.0.0 + with: + python-version: ${{ env.python_version }} - name: Install Base Python Dependencies if: ${{ inputs.python == 'true' }} shell: bash @@ -89,12 +98,16 @@ runs: - name: Install dev requirements if: ${{ inputs.dev-install == 'true' || inputs.install == 'true' }} shell: bash - run: uv pip install --require-hashes -r src/backend/requirements-dev.txt + run: invoke install --dev - name: Run invoke install if: ${{ inputs.install == 'true' }} shell: bash - run: invoke install --uv + run: invoke install - name: Run invoke update if: ${{ inputs.update == 'true' }} shell: bash - run: invoke update --uv --skip-backup --skip-static + run: invoke update --skip-backup --skip-static + - name: Collect static files + if: ${{ inputs.static == 'true' }} + shell: bash + run: invoke static --skip-plugins diff --git a/.github/scripts/version_check.py b/.github/scripts/version_check.py index 74c57b967e..8f657edcd2 100644 --- a/.github/scripts/version_check.py +++ b/.github/scripts/version_check.py @@ -264,6 +264,7 @@ def main() -> bool: # Determine which docker tag we are going to use docker_tags: Optional[list[str]] = None + pkg_channel = None if GITHUB_REF_TYPE == 'tag': # GITHUB_REF should be of the form /refs/heads/ @@ -278,10 +279,14 @@ def main() -> bool: docker_tags = [version_tag, 'stable'] if highest_release else [version_tag] + # Add release-line tag + pkg_channel = '.'.join(version_tag.split('.')[:2]) + '.x' + elif GITHUB_REF_TYPE == 'branch': # Otherwise we know we are targeting the 'master' branch docker_tags = ['latest'] highest_release = False + pkg_channel = GITHUB_BASE_REF else: print('Unsupported branch / version combination:') @@ -310,6 +315,8 @@ def main() -> bool: if GITHUB_REF_TYPE == 'tag' and highest_release: env_file.write('stable_release=true\n') + + env_file.write(f'pkg_channel={pkg_channel}\n') return True diff --git a/.github/workflows/check_translations.yaml b/.github/workflows/check_translations.yaml index 7f3cf46758..5fabe38106 100644 --- a/.github/workflows/check_translations.yaml +++ b/.github/workflows/check_translations.yaml @@ -31,7 +31,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 6eab2a60ed..2344dce7a9 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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # pin@v3.0.2 @@ -67,7 +67,7 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Test Docker Image @@ -129,7 +129,7 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Run Migration Tests @@ -153,11 +153,11 @@ jobs: steps: - name: Check out repo - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Set Up Python ${{ env.python_version }} - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # pin@v6.1.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # pin@v6.2.0 with: python-version: ${{ env.python_version }} - name: Version Check @@ -168,13 +168,13 @@ jobs: echo "git_commit_date=$(git show -s --format=%ci)" >> $GITHUB_ENV - name: Set up QEMU if: github.event_name != 'pull_request' - uses: docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130 # pin@v3.7.0 + uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # pin@v4.0.0 - name: Set up Docker Buildx if: github.event_name != 'pull_request' - uses: docker/setup-buildx-action@e468171a9de216ec08956ac3ada2f0791b6bd435 # pin@v3.11.1 + uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # pin@v4.0.0 - name: Set up cosign if: github.event_name != 'pull_request' - uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # pin@v4.0.0 + uses: sigstore/cosign-installer@ba7bc0a3fef59531c69a25acd34668d6d3fe6f22 # pin@v4.1.0 - name: Check if Dockerhub login is required id: docker_login run: | @@ -185,14 +185,14 @@ jobs: fi - name: Login to Dockerhub if: github.event_name != 'pull_request' && steps.docker_login.outputs.skip_dockerhub_login != 'true' - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # pin@v3.6.0 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # pin@v4.0.0 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Log into registry ghcr.io if: github.event_name != 'pull_request' - uses: docker/login-action@5e57cd118135c172c3672efd75eb46360885c0ef # pin@v3.6.0 + uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # pin@v4.0.0 with: registry: ghcr.io username: ${{ github.actor }} @@ -201,16 +201,16 @@ jobs: - name: Extract Docker metadata if: github.event_name != 'pull_request' id: meta - uses: docker/metadata-action@c299e40c65443455700f0fdfc63efafe5b349051 # pin@v5.10.0 + uses: docker/metadata-action@030e881283bb7a6894de51c315a6bfe6a94e05cf # pin@v6.0.0 with: images: | inventree/inventree ghcr.io/${{ github.repository }} - - uses: depot/setup-action@b0b1ea4f69e92ebf5dea3f8713a1b0c37b2126a5 # pin@v1 + - uses: depot/setup-action@15c09a5f77a0840ad4bce955686522a257853461 # pin@v1 - name: Push Docker Images id: push-docker if: github.event_name != 'pull_request' - uses: depot/build-push-action@9785b135c3c76c33db102e45be96a25ab55cd507 # pin@v1 + uses: depot/build-push-action@5f3b3c2e5a00f0093de47f657aeaefcedff27d18 # pin@v1 with: project: jczzbjkk68 context: . diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 7e87cc1577..867b127383 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -39,9 +39,12 @@ jobs: force: ${{ steps.force.outputs.force }} cicd: ${{ steps.filter.outputs.cicd }} requirements: ${{ steps.filter.outputs.requirements }} + runner-perf: ${{ steps.runner-perf.outputs.runner }} + performance: ${{ steps.performance.outputs.force-performance }} + submit-performance: ${{ steps.runner-perf.outputs.submit-performance }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # pin@v3.0.2 @@ -74,6 +77,29 @@ jobs: if: | contains(github.event.pull_request.labels.*.name, 'dependency') || contains(github.event.pull_request.labels.*.name, 'full-run') + - name: Is performance testing being forced? + run: echo "force-performance=true" >> $GITHUB_OUTPUT + id: performance + if: | + contains(github.event.pull_request.labels.*.name, 'performance-run') + - name: Which runner to use? + env: + GITHUB_REF: ${{ github.ref }} + PERFORMANCE: ${{ steps.performance.outputs.force-performance }} + id: runner-perf + # decide if we are running in inventree/inventree -> use codspeed-macro runner else ubuntu-24.04 + run: | + is_main_push=false + if [[ '${{ github.event_name }}' == 'push' && "$GITHUB_REF" == 'refs/heads/master' ]]; then + is_main_push=true + fi + if [[ '${{ github.repository }}' == 'inventree/InvenTree' && ( "$is_main_push" == 'true' || "$PERFORMANCE" == 'true' ) ]]; then + echo "runner=codspeed-macro" >> "$GITHUB_OUTPUT" + echo "submit-performance=true" >> "$GITHUB_OUTPUT" + else + echo "runner=ubuntu-24.04" >> "$GITHUB_OUTPUT" + echo "submit-performance=false" >> "$GITHUB_OUTPUT" + fi pre-commit: name: Style [pre-commit] @@ -82,11 +108,11 @@ jobs: if: needs.paths-filter.outputs.cicd == 'true' || needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.frontend == 'true' || needs.paths-filter.outputs.requirements == 'true' || needs.paths-filter.outputs.force == 'true' steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Set up Python ${{ env.python_version }} - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # pin@v6.1.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # pin@v6.2.0 with: python-version: ${{ env.python_version }} cache: "pip" @@ -104,7 +130,7 @@ jobs: if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.requirements == 'true' || needs.paths-filter.outputs.force == 'true' steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -116,7 +142,7 @@ jobs: update: true - name: Check types run: | - ty check --python ${Python_ROOT_DIR}/bin/python3 + ty check --python ${Python_ROOT_DIR}/bin/python3 src/backend mkdocs: name: Style [Documentation] @@ -126,11 +152,11 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Set up Python ${{ env.python_version }} - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # pin@v6.1.0 + uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # pin@v6.2.0 with: python-version: ${{ env.python_version }} - name: Check Config @@ -164,7 +190,7 @@ jobs: version: ${{ steps.version.outputs.version }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -176,7 +202,7 @@ jobs: - name: Export API Documentation run: invoke dev.schema --ignore-warnings --filename src/backend/InvenTree/schema.yml - name: Upload schema - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # pin@v5.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 with: name: schema.yml path: src/backend/InvenTree/schema.yml @@ -225,17 +251,17 @@ jobs: - name: Extract settings / tags run: invoke int.export-definitions --basedir docs - name: Upload settings - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # pin@v5.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 with: name: inventree_settings.json path: docs/generated/inventree_settings.json - name: Upload tags - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # pin@v5.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 with: name: inventree_tags.yml path: docs/generated/inventree_tags.yml - name: Upload filters - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # pin@v5.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 with: name: inventree_filters.yml path: docs/generated/inventree_filters.yml @@ -249,7 +275,7 @@ jobs: version: ${{ needs.schema.outputs.version }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 name: Checkout Code with: repository: inventree/schema @@ -258,7 +284,7 @@ jobs: - name: Create artifact directory run: mkdir -p artifact - name: Download schema artifact - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # pin@v6.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # pin@v8.0.0 with: path: artifact merge-multiple: true @@ -275,17 +301,20 @@ jobs: echo "after move" ls -la artifact rm -rf artifact - - uses: stefanzweifel/git-auto-commit-action@28e16e81777b558cc906c8750092100bbb34c5e3 # pin@v7.0.0 + - uses: stefanzweifel/git-auto-commit-action@04702edda442b2e678b25b537cec683a1493fcb9 # pin@v7.1.0 name: Commit schema changes with: commit_message: "Update API schema for ${{ env.version }} / ${{ github.sha }}" python: name: Tests - inventree-python - runs-on: ubuntu-24.04 + runs-on: ${{ needs.paths-filter.outputs.runner-perf }} needs: ["pre-commit", "paths-filter"] - if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true' + if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true' || needs.paths-filter.outputs.performance == 'true' + permissions: + contents: read + id-token: write env: WRAPPER_NAME: inventree-python @@ -300,9 +329,10 @@ jobs: INVENTREE_SITE_URL: http://127.0.0.1:12345 INVENTREE_DEBUG: true INVENTREE_LOG_LEVEL: WARNING + node_version: '>=20.19.6' steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -311,6 +341,8 @@ jobs: apt-dependency: gettext poppler-utils dev-install: true update: true + static: true + npm: true - name: Download Python Code For `${WRAPPER_NAME}` run: git clone --depth 1 https://github.com/inventree/${WRAPPER_NAME} ./${WRAPPER_NAME} - name: Start InvenTree Server @@ -324,6 +356,19 @@ jobs: cd ${WRAPPER_NAME} invoke check-server coverage run -m unittest discover -s test/ + - name: Prepare environment for performance tests + run: | + pip uninstall pytest-django -y + cd ${WRAPPER_NAME} + pip install . + if: needs.paths-filter.outputs.submit-performance == 'true' + - name: Performance Reporting + uses: CodSpeedHQ/action@281164b0f014a4e7badd2c02cecad9b595b70537 # pin@v4 + # check if we are in inventree/inventree - reporting only works in that OIDC context + if: github.repository == 'inventree/InvenTree' && needs.paths-filter.outputs.submit-performance == 'true' + with: + mode: walltime + run: pytest ./src/performance --codspeed coverage: name: Tests - DB [SQLite] + Coverage ${{ matrix.python_version }} @@ -334,8 +379,7 @@ jobs: continue-on-error: true # continue if a step fails so that coverage gets pushed strategy: matrix: - python_version: [3.11] - # python_version: [3.11, 3.14] # Disabled due to requirement issues + python_version: [3.11, 3.14] env: INVENTREE_DB_NAME: ./inventree.sqlite @@ -346,7 +390,7 @@ jobs: python_version: ${{ matrix.python_version }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -355,6 +399,7 @@ jobs: apt-dependency: gettext poppler-utils dev-install: true update: true + static: true - name: Data Export Test uses: ./.github/actions/migration - name: Test Translations @@ -364,13 +409,13 @@ jobs: - name: Coverage Tests run: invoke dev.test --check --coverage --translations - name: Upload raw coverage to artifacts - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # pin@v5.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 with: name: coverage path: .coverage retention-days: 14 - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # pin@v5.5.1 + uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # pin@v5.5.2 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -379,10 +424,11 @@ jobs: performance: name: Tests - Performance - runs-on: ubuntu-24.04 + runs-on: ${{ needs.paths-filter.outputs.runner-perf }} needs: ["pre-commit", "paths-filter"] - if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true' + # check if we are in inventree/inventree - reporting only works in that OIDC context + if: (needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true') && github.repository == 'inventree/InvenTree' && needs.paths-filter.outputs.submit-performance == 'true' permissions: contents: read id-token: write @@ -395,7 +441,7 @@ jobs: INVENTREE_AUTO_UPDATE: true steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -404,10 +450,13 @@ jobs: apt-dependency: gettext poppler-utils dev-install: true update: true + npm: true + env: + node_version: '>=20.19.0' - name: Performance Reporting - uses: CodSpeedHQ/action@346a2d8a8d9d38909abd0bc3d23f773110f076ad # pin@v4 + uses: CodSpeedHQ/action@281164b0f014a4e7badd2c02cecad9b595b70537 # pin@v4 with: - mode: simulation + mode: walltime run: inv dev.test --pytest postgres: @@ -443,7 +492,7 @@ jobs: - 6379:6379 steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -453,6 +502,7 @@ jobs: pip-dependency: psycopg django-redis>=5.0.0 dev-install: true update: true + static: true - name: Run Tests run: invoke dev.test --check --translations - name: Data Export Test @@ -491,7 +541,7 @@ jobs: - 3306:3306 steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -501,6 +551,7 @@ jobs: pip-dependency: mysqlclient dev-install: true update: true + static: true - name: Run Tests run: invoke dev.test --check --translations - name: Data Export Test @@ -533,7 +584,7 @@ jobs: - 5432:5432 steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -546,7 +597,7 @@ jobs: - name: Run Tests run: invoke dev.test --check --migrations --report --coverage --translations - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # pin@v5.5.1 + uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # pin@v5.5.2 if: always() with: token: ${{ secrets.CODECOV_TOKEN }} @@ -567,7 +618,7 @@ jobs: INVENTREE_PLUGINS_ENABLED: false steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false name: Checkout Code @@ -646,7 +697,7 @@ jobs: VITE_COVERAGE_BUILD: true steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -667,8 +718,14 @@ jobs: cd src/frontend && npx playwright install --with-deps - name: Run Playwright tests id: tests - run: cd src/frontend && npx nyc playwright test - - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # pin@v5.0.0 + run: | + cd src/frontend + cp ./tests/fixtures/playwright_custom_logo.png ../backend/InvenTree/InvenTree/static/img/playwright_custom_logo.png + cp ./tests/fixtures/playwright_custom_splash.png ../backend/InvenTree/InvenTree/static/img/playwright_custom_splash.png + invoke static + env INVENTREE_CUSTOM_SPLASH="img/playwright_custom_splash.png" INVENTREE_CUSTOM_LOGO="img/playwright_custom_logo.png" npx nyc playwright test --project=customization + npx nyc playwright test --project=chromium --project=firefox + - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 if: ${{ !cancelled() && steps.tests.outcome == 'failure' }} with: name: playwright-report @@ -677,7 +734,7 @@ jobs: - name: Report coverage run: cd src/frontend && npx nyc report --report-dir ./coverage --temp-dir .nyc_output --reporter=lcov --exclude-after-remap false - name: Upload coverage reports to Codecov - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # pin@v5.5.1 + uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # pin@v5.5.2 with: token: ${{ secrets.CODECOV_TOKEN }} slug: inventree/InvenTree @@ -696,7 +753,7 @@ jobs: timeout-minutes: 60 steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -706,14 +763,14 @@ jobs: - name: Install dependencies run: cd src/frontend && yarn install - name: Build frontend - run: cd src/frontend && yarn run compile && yarn run build + run: cd src/frontend && yarn run compile && yarn run lib && yarn run build - name: Write version file - SHA run: cd src/backend/InvenTree/web/static/web/.vite && echo "$GITHUB_SHA" > sha.txt - name: Zip frontend run: | cd src/backend/InvenTree/web/static zip -r frontend-build.zip web/ web/.vite - - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # pin@v5.0.0 + - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 with: name: frontend-build path: src/backend/InvenTree/web/static/web @@ -729,7 +786,7 @@ jobs: security-events: write steps: - name: Checkout repository - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - uses: hynek/setup-cached-uv@757bedc3f972eb7227a1aa657651f15a8527c817 # pin@v2 @@ -738,7 +795,7 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload SARIF file - uses: github/codeql-action/upload-sarif@fdbfb4d2750291e159f0156def62b853c2798ca2 # pin@v3 + uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # pin@v3 with: sarif_file: results.sarif category: zizmor diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 35f2aeea44..9e5563ae36 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -20,7 +20,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - name: Checkout Code - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Version Check @@ -43,7 +43,7 @@ jobs: contents: write attestations: write steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -55,7 +55,7 @@ jobs: - name: Build frontend run: cd src/frontend && npm run compile && npm run build - name: Create SBOM for frontend - uses: anchore/sbom-action@fbfd9c6c189226748411491745178e0c2017392d # pin@v0 + uses: anchore/sbom-action@57aae528053a48a3f6235f2d9461b05fbcb7366d # pin@v0 with: artifact-name: frontend-build.spdx path: src/frontend @@ -65,26 +65,33 @@ jobs: run: cd src/backend/InvenTree/web/static/web/.vite && echo "${REF_NAME}" > tag.txt env: REF_NAME: ${{ github.ref_name }} + - name: Write version file - SOURCE + run: cd src/backend/InvenTree/web/static/web/.vite && echo "GitHub Actions build on $(date --utc +%Y-%m-%dT%H:%M:%SZ)" > source.txt - name: Zip frontend run: | cd src/backend/InvenTree/web/static/web zip -r ../frontend-build.zip * .vite - name: Attest Build Provenance id: attest - uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # pin@v1 + uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # pin@v1 with: subject-path: "${{ github.workspace }}/src/backend/InvenTree/web/static/frontend-build.zip" - name: Upload frontend - uses: svenstaro/upload-release-action@6b7fa9f267e90b50a19fef07b3596790bb941741 # pin@2.11.3 + uses: svenstaro/upload-release-action@b98a3b12e86552593f3e4e577ca8a62aa2f3f22b # pin@2.11.4 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 frontend to artifacts + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # pin@v7.0.0 + with: + name: frontend-build + path: src/backend/InvenTree/web/static/frontend-build.zip - name: Upload Attestation - uses: svenstaro/upload-release-action@6b7fa9f267e90b50a19fef07b3596790bb941741 # pin@2.11.3 + uses: svenstaro/upload-release-action@b98a3b12e86552593f3e4e577ca8a62aa2f3f22b # pin@2.11.4 with: repo_token: ${{ secrets.GITHUB_TOKEN }} asset_name: frontend-build.intoto.jsonl @@ -107,7 +114,7 @@ jobs: INVENTREE_DEBUG: true steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -127,10 +134,120 @@ jobs: cd docs/site zip -r docs-html.zip * - name: Publish documentation - uses: svenstaro/upload-release-action@6b7fa9f267e90b50a19fef07b3596790bb941741 # pin@2.11.3 + uses: svenstaro/upload-release-action@b98a3b12e86552593f3e4e577ca8a62aa2f3f22b # pin@2.11.4 with: repo_token: ${{ secrets.GITHUB_TOKEN }} file: docs/site/docs-html.zip asset_name: docs-html.zip tag: ${{ github.ref }} overwrite: true + + build-pkgr: + if: github.repository == 'inventree/InvenTree' + name: ${{ matrix.target }} + runs-on: ubuntu-latest + needs: [build] + permissions: + contents: write + strategy: + fail-fast: false + matrix: + target: + - ubuntu:22.04 + - ubuntu:24.04 + - debian:12 + steps: + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 + with: + fetch-depth: 0 + persist-credentials: false + + - name: Get frontend artifact + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # pin@v8.0.0 + with: + name: frontend-build + - name: Setup + id: setup + env: + NODE_ID: ${{ github.event.release.node_id }} + BRANCH: ${{ github.event.release.target_commitish }} + TARGET: ${{github.event.release.target_commitish}} + REPO: ${{ github.repository }} + VERSION_REF: ${{ github.ref_name }} + GH_TOKEN: ${{ github.token }} + + run: | + # Get info + gh api -H "Accept: application/vnd.github+json" -H "X-GitHub-Api-Version: 2022-11-28" /repos/$REPO/commits/$TARGET > commit.json + + # Extract info + echo "INFO extract | Extracting info from github" + DATE=$(jq -r '.commit.committer.date' commit.json) + SIGNATURE=$(jq -r '.commit.verification.signature' commit.json) + FULL_SHA=$(jq -r '.sha' commit.json) + SHA=$(echo "$FULL_SHA" | cut -c1-7) + + 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 + echo "INVENTREE_PKG_TARGET='$TARGET'" >> VERSION + echo "NODE_ID='$NODE_ID'" >> VERSION + echo "SIGNATURE='$SIGNATURE'" >> VERSION + + echo "INFO write | Written VERSION information" + echo "### VERSION ###" + cat VERSION + echo "### VERSION ###" + + # Move frontend build into place + mkdir -p src/backend/InvenTree/web/static + unzip -qq frontend-build.zip -d src/backend/InvenTree/web/static/web + + echo "INFO write release_version" + echo "VERSION=$VERSION_REF" >> $GITHUB_OUTPUT + echo "REF=$GITHUB_REF" >> $GITHUB_OUTPUT + + # Disable before.sh for now - will need to be removed once we switch to go.packager.io fully + echo "#!/bin/bash" > contrib/packager.io/before.sh + + echo "calculate release channel" + pip install --require-hashes -r contrib/dev_reqs/requirements.txt + python3 .github/scripts/version_check.py + - name: Package + uses: pkgr/action/package@c5666febcd31750da6428042193fc5b2fb765435 # pin@main + id: package + with: + target: ${{ matrix.target }} + version: ${{ steps.setup.outputs.version }} + debug: true + cache_prefix: ${{ github.ref_name }} + env: | + INVENTREE_DB_ENGINE=sqlite3 + INVENTREE_DB_NAME=database.sqlite3 + INVENTREE_PLUGINS_ENABLED=true + INVENTREE_MEDIA_ROOT=/opt/inventree/media + INVENTREE_STATIC_ROOT=/opt/inventree/static + INVENTREE_BACKUP_DIR=/opt/inventree/backup + INVENTREE_PLUGIN_FILE=/opt/inventree/plugins.txt + INVENTREE_CONFIG_FILE=/opt/inventree/config.yaml + APP_REPO=inventree/InvenTree + - name: Publish to go.packager.io + uses: pkgr/action/publish@3bce081ae512c5020856e237d37b3f5479d4aa71 # pin@main + with: + target: ${{ matrix.target }} + token: ${{ secrets.PACKAGER_RELEASE_TOKEN }} + repository: inventree/InvenTree + channel: ${{ env.pkg_channel }} + file: ${{ steps.package.outputs.package_path }} + - name: Publish to artifact + uses: svenstaro/upload-release-action@b98a3b12e86552593f3e4e577ca8a62aa2f3f22b # pin@2.11.4 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ steps.package.outputs.package_path }} + asset_name: ${{ matrix.target }}-{{ steps.setup.outputs.version }}.tar.gz + tag: ${{ github.ref }} + overwrite: true diff --git a/.github/workflows/scorecard.yaml b/.github/workflows/scorecard.yaml index 167b29bc60..11926cacbc 100644 --- a/.github/workflows/scorecard.yaml +++ b/.github/workflows/scorecard.yaml @@ -32,7 +32,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false @@ -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@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 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@fdbfb4d2750291e159f0156def62b853c2798ca2 # v4.31.5 + uses: github/codeql-action/upload-sarif@cdefb33c0f6224e58673d9004f47f7cb3e328b89 # v4.31.10 with: sarif_file: results.sarif diff --git a/.github/workflows/stale.yaml b/.github/workflows/stale.yaml index d8b024b852..fc770c386e 100644 --- a/.github/workflows/stale.yaml +++ b/.github/workflows/stale.yaml @@ -16,7 +16,7 @@ jobs: pull-requests: write steps: - - uses: actions/stale@997185467fa4f803885201cee163a9f38240193d # pin@v10.1.1 + - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # pin@v10.2.0 with: repo-token: ${{ secrets.GITHUB_TOKEN }} stale-issue-message: "This issue seems stale. Please react to show this is still important." diff --git a/.github/workflows/translations.yaml b/.github/workflows/translations.yaml index 0cce768eeb..20249055bc 100644 --- a/.github/workflows/translations.yaml +++ b/.github/workflows/translations.yaml @@ -32,7 +32,7 @@ jobs: steps: - name: Checkout Code - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # pin@v6.0.1 + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - name: Environment Setup @@ -56,7 +56,7 @@ jobs: echo "Resetting to HEAD~" git reset HEAD~ || true - name: crowdin action - uses: crowdin/github-action@60debf382ee245b21794321190ad0501db89d8c1 # pin@v2 + uses: crowdin/github-action@8818ff65bfc4322384f983ea37e3926948c11745 # pin@v2 with: upload_sources: true upload_translations: false diff --git a/.pkgr.yml b/.pkgr.yml index 228a7d55a3..ac9dc06408 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -6,7 +6,7 @@ buildpack: https://github.com/matmair/null-buildpack#master env: - INVENTREE_DB_ENGINE=sqlite3 - INVENTREE_DB_NAME=database.sqlite3 - - INVENTREE_PLUGINS_ENABLED + - INVENTREE_PLUGINS_ENABLED=true - INVENTREE_MEDIA_ROOT=/opt/inventree/media - INVENTREE_STATIC_ROOT=/opt/inventree/static - INVENTREE_BACKUP_DIR=/opt/inventree/backup @@ -20,6 +20,7 @@ before: - contrib/packager.io/before.sh dependencies: - curl + - poppler-utils - "python3.11 | python3.12 | python3.13 | python3.14" - "python3.11-venv | python3.12-venv | python3.13-venv | python3.14-venv" - "python3.11-dev | python3.12-dev | python3.13-dev | python3.14-dev" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8505425941..a4d6e46287 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,7 +18,7 @@ repos: exclude: mkdocs.yml - id: mixed-line-ending - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.14.8 + rev: v0.15.1 hooks: - id: ruff-format args: [--preview] @@ -29,27 +29,35 @@ repos: --preview ] - repo: https://github.com/astral-sh/uv-pre-commit - rev: 0.9.16 + rev: 0.10.2 hooks: - id: pip-compile name: pip-compile requirements-dev.in - args: [src/backend/requirements-dev.in, -o, src/backend/requirements-dev.txt, --no-strip-extras, --generate-hashes] + args: [src/backend/requirements-dev.in, -o, src/backend/requirements-dev.txt, -c, src/backend/requirements.txt] + files: src/backend/requirements-dev\.(in|txt)$ + - id: pip-compile + name: pip-compile requirements-dev.in 3.14 + args: [src/backend/requirements-dev.in, -o, src/backend/requirements-dev-3.14.txt, -c, src/backend/requirements-3.14.txt, --python-version=3.14, -c, src/backend/requirements.txt] 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, --no-strip-extras, --generate-hashes] + args: [src/backend/requirements.in, -o, src/backend/requirements.txt] + files: src/backend/requirements\.(in|txt)$ + - id: pip-compile + name: pip-compile requirements.txt 3.14 + args: [src/backend/requirements.in, -o, src/backend/requirements-3.14.txt, --python-version=3.14, -c, src/backend/requirements.txt] files: src/backend/requirements\.(in|txt)$ - id: pip-compile name: pip-compile requirements.txt - args: [contrib/dev_reqs/requirements.in, -o, contrib/dev_reqs/requirements.txt, --no-strip-extras, --generate-hashes, -b, src/backend/requirements.txt] + args: [contrib/dev_reqs/requirements.in, -o, contrib/dev_reqs/requirements.txt, -c, src/backend/requirements.txt] files: contrib/dev_reqs/requirements\.(in|txt)$ - id: pip-compile name: pip-compile requirements.txt - args: [docs/requirements.in, -o, docs/requirements.txt, --no-strip-extras, --generate-hashes, -b, src/backend/requirements.txt] + args: [docs/requirements.in, -o, docs/requirements.txt, -c, src/backend/requirements.txt] files: docs/requirements\.(in|txt)$ - id: pip-compile name: pip-compile requirements.txt - args: [contrib/container/requirements.in, -o, contrib/container/requirements.txt, --python-version=3.11, --no-strip-extras, --generate-hashes, -b, src/backend/requirements.txt] + args: [contrib/container/requirements.in, -o, contrib/container/requirements.txt, --python-version=3.14, -c, src/backend/requirements.txt] files: contrib/container/requirements\.(in|txt)$ - repo: https://github.com/Riverside-Healthcare/djLint rev: v1.36.4 @@ -71,7 +79,7 @@ repos: src/frontend/vite.config.ts | )$ - repo: https://github.com/biomejs/pre-commit - rev: v2.3.8 + rev: v2.3.15 hooks: - id: biome-check additional_dependencies: ["@biomejs/biome@1.9.4"] diff --git a/CHANGELOG.md b/CHANGELOG.md index af5b9c2437..0b71fd37a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -All notable changes to this project will be documented in this file (starting with 1.0.0). +All major notable changes to this project will be documented in this file (starting with 1.0.0). The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). @@ -9,7 +9,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Breaking Changes -- [#10699](https://github.com/inventree/InvenTree/pull/10699) removes the `PartParameter` and `PartParameterTempalate` models (and associated API endpoints). These have been replaced with generic `Parameter` and `ParameterTemplate` models (and API endpoints). Any external client applications which made use of the old endpoints will need to be updated. +- [#11303](https://github.com/inventree/InvenTree/pull/11303) removes the `default_supplier` field from the `Part` model. Instead, the `SupplierPart` model now has a `primary` field which is used to indicate which supplier is the default for a given part. Any external client applications which made use of the old `default_supplier` field will need to be updated. +- [#11500](https://github.com/inventree/InvenTree/pull/11500) fixes a spelling mistake in the database configuration values, which may affect some users running the PostgreSQL database backend. The `tcp_keepalives_internal` option has been renamed to `tcp_keepalives_interval` to reflect the correct PostgreSQL configuration option name. If you are using PostgreSQL, and have set a custom value for the `tcp_keepalives_internal` option, you will need to update this to `tcp_keepalives_interval` in your configuration (either via environment variable or config file). + +### Added + +- [#11527](https://github.com/inventree/InvenTree/pull/11527) adds a new API endpoint for monitoring the status of a particular background task. This endpoint allows clients to check the status of a background task and receive updates when the task is complete. This is useful for long-running tasks that may take some time to complete, allowing clients to provide feedback to users about the progress of the task. +- [#11405](https://github.com/inventree/InvenTree/pull/11405) adds default table filters, which hide inactive items by default. The default table filters are overridden by user filter selection, and only apply to the table view initially presented to the user. This means that users can still view inactive items if they choose to, but they will not be shown by default. +- [#11222](https://github.com/inventree/InvenTree/pull/11222) adds support for data import using natural keys, allowing for easier association of related objects without needing to know their internal database IDs. +- [#11383](https://github.com/inventree/InvenTree/pull/11383) adds "exists_for_model_id", "exists_for_related_model", and "exists_for_related_model_id" filters to the ParameterTemplate API endpoint. These filters allow users to check for the existence of parameters associated with specific models or related models, improving the flexibility and usability of the API. +- [#10887](https://github.com/inventree/InvenTree/pull/10887) adds the ability to auto-allocate tracked items against specific build outputs. Currently, this will only allocate items where the serial number of the tracked item matches the serial number of the build output, but in future this may be extended to allow for more flexible allocation rules. +- [#11372](https://github.com/inventree/InvenTree/pull/11372) adds backup metadata setter and restore metadata validator functions to ensure common footguns are harder to trigger when using the backup and restore functionality. +- [#11374](https://github.com/inventree/InvenTree/pull/11374) adds `updated_at` field on purchase, sales and return orders. + +### Changed + +### Removed + +- [#11581](https://github.com/inventree/InvenTree/pull/11581) removes the ability to specify arbitrary filters when performing bulk operations via the API. This functionality represented a significant security risk, and was not required for any existing use cases. Bulk operations now only work with a provided list of primary keys. + +## 1.2.0 - 2026-02-12 + +### Breaking Changes + +- [#10699](https://github.com/inventree/InvenTree/pull/10699) removes the `PartParameter` and `PartParameterTemplate` models (and associated API endpoints). These have been replaced with generic `Parameter` and `ParameterTemplate` models (and API endpoints). Any external client applications which made use of the old endpoints will need to be updated. +- [#11035](https://github.com/inventree/InvenTree/pull/11035) moves to a single endpoint for all metadata operations. The previous endpoints for PartMetadata, SupplierPartMetadata, etc have been removed. Any external client applications which made use of the old endpoints will need to be updated. ### Added @@ -18,15 +42,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Adds parameter support for multiple new model types in [#10699](https://github.com/inventree/InvenTree/pull/10699) - Allows report generator to produce PDF input controls in [#10969](https://github.com/inventree/InvenTree/pull/10969) - UI overhaul of parameter management in [#10699](https://github.com/inventree/InvenTree/pull/10699) +- Allow input controls within generated PDF reports in [#10969](https://github.com/inventree/InvenTree/pull/10969) ### Changed -- +- Improved stocktake functionality in [#11257](https://github.com/inventree/InvenTree/pull/11257) ### Removed - Removed python 3.9 / 3.10 support as part of Django 5.2 upgrade in [#10730](https://github.com/inventree/InvenTree/pull/10730) - Removed the "PartParameter" and "PartParameterTemplate" models (and associated API endpoints) in [#10699](https://github.com/inventree/InvenTree/pull/10699) - Removed the "ManufacturerPartParameter" model (and associated API endpoints) [#10699](https://github.com/inventree/InvenTree/pull/10699) +- Removed individual metadata endpoints for all models ([#11035](https://github.com/inventree/InvenTree/pull/11035)) ## 1.1.0 - 2025-11-02 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7c62407f07..c589902e9b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -42,7 +42,6 @@ InvenTree/ ├─ 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 ├─ SECURITY.md # Project security policy ├─ tasks.py # Action definitions for development, testing and deployment ``` diff --git a/README.md b/README.md index 9d1dc34200..792e6e267c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

Open Source Inventory Management System

-[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/license/MIT)![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/inventree/inventree) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/license/MIT)![GitHub tag (latest SemVer)](https://img.shields.io/github/v/tag/inventree/inventree)[![Artifact Hub](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/inventree)](https://artifacthub.io/packages/search?repo=inventree) ![CI](https://github.com/inventree/inventree/actions/workflows/qc_checks.yaml/badge.svg) [![Documentation Status](https://readthedocs.org/projects/inventree/badge/?version=latest)](https://inventree.readthedocs.io/en/latest/?badge=latest) ![Docker Build](https://github.com/inventree/inventree/actions/workflows/docker.yaml/badge.svg) @@ -56,7 +56,7 @@ InvenTree is designed to be **extensible**, and provides multiple options for ** * [InvenTree API](https://docs.inventree.org/en/latest/api/) * [Python module](https://docs.inventree.org/en/latest/api/python/) * [Plugin interface](https://docs.inventree.org/en/latest/plugins/) -* [Third party tools](https://docs.inventree.org/en/latest/plugins/integrate/) +* [Third party tools](https://inventree.org/extend/integrate/) ### :space_invader: Tech Stack @@ -200,6 +200,7 @@ Find a full list of used third-party libraries in the license information dialog Deploys by Netlify Translation by Crowdin
+ CodSpeed Badge

diff --git a/contrib/container/.env b/contrib/container/.env index b07299dc7d..33ffc7e5ee 100644 --- a/contrib/container/.env +++ b/contrib/container/.env @@ -12,6 +12,7 @@ INVENTREE_TAG=stable INVENTREE_SITE_URL="http://inventree.localhost" #INVENTREE_SITE_URL="http://192.168.1.2" # You can specify a local IP address here #INVENTREE_SITE_URL="https://inventree.my-domain.com" # Or a public domain name (which you control) +INVENTREE_WEB_PORT=8000 # InvenTree proxy forwarding settings INVENTREE_USE_X_FORWARDED_HOST=True diff --git a/contrib/container/Caddyfile b/contrib/container/Caddyfile index 6c8d0c973a..d854703722 100644 --- a/contrib/container/Caddyfile +++ b/contrib/container/Caddyfile @@ -2,6 +2,7 @@ # The following environment variables may be used: # - INVENTREE_SITE_URL: The upstream URL of the InvenTree site (default: inventree.localhost) # - INVENTREE_SERVER: The internal URL of the InvenTree container (default: http://inventree-server:8000) +# - INVENTREE_WEB_PORT: The port on which the InvenTree web server listens (default: 8000) # # Note that while this file is a good starting point, it may need to be modified to suit your specific requirements # @@ -20,7 +21,7 @@ header Allow GET,HEAD,OPTIONS header Access-Control-Allow-Origin * header Access-Control-Allow-Methods GET,HEAD,OPTIONS - header Access-Control-Allow-Headers Authorization,Content-Type,User-Agent + header Access-Control-Allow-Headers Authorization,Content-Type,User-Agent,traceparent @cors_preflight{args[0]} method OPTIONS diff --git a/contrib/container/Dockerfile b/contrib/container/Dockerfile index b943e52711..b7ee19c4f6 100644 --- a/contrib/container/Dockerfile +++ b/contrib/container/Dockerfile @@ -9,7 +9,8 @@ # - Runs InvenTree web server under django development server # - Monitors source files for any changes, and live-reloads server -FROM python:3.11-slim-trixie@sha256:1d6131b5d479888b43200645e03a78443c7157efbdb730e6b48129740727c312 AS inventree_base +# Base image last bumped 2026-02-23 +FROM python:3.14-slim-trixie@sha256:486b8092bfb12997e10d4920897213a06563449c951c5506c2a2cfaf591c599f AS inventree_base # Build arguments for this image ARG commit_tag="" diff --git a/contrib/container/docker-compose.yml b/contrib/container/docker-compose.yml index 5e2e061dd3..9b8abc5b05 100644 --- a/contrib/container/docker-compose.yml +++ b/contrib/container/docker-compose.yml @@ -3,7 +3,7 @@ # - gunicorn as the InvenTree web server # - django-q as the InvenTree background worker process # - Caddy as a reverse proxy -# - redis as the cache manager (optional, disabled by default) +# - redis as the cache manager (optional, enabled by default) # --------------------- # READ BEFORE STARTING! @@ -64,6 +64,8 @@ services: - .env expose: - ${INVENTREE_CACHE_PORT:-6379} + volumes: + - ${INVENTREE_EXT_VOLUME}/redis:/data restart: always # InvenTree web server service @@ -74,12 +76,14 @@ services: container_name: inventree-server # Only change this port if you understand the stack. expose: - - 8000 + - ${INVENTREE_WEB_PORT:-8000} depends_on: - inventree-db - inventree-cache env_file: - .env + environment: + INVENTREE_SERVER: http://inventree-server:${INVENTREE_WEB_PORT} volumes: # Data volume must map to /home/inventree/data - ${INVENTREE_EXT_VOLUME}:/home/inventree/data:z diff --git a/contrib/container/requirements.txt b/contrib/container/requirements.txt index 17750212bb..698f701c22 100644 --- a/contrib/container/requirements.txt +++ b/contrib/container/requirements.txt @@ -1,27 +1,34 @@ # This file was autogenerated by uv via the following command: -# uv pip compile contrib/container/requirements.in -o contrib/container/requirements.txt --python-version=3.11 --no-strip-extras --generate-hashes -b src/backend/requirements.txt -asgiref==3.10.0 \ - --hash=sha256:aef8a81283a34d0ab31630c9b7dfe70c812c95eba78171367ca8745e88124734 \ - --hash=sha256:d89f2d8cd8b56dada7d52fa7dc8075baa08fb836560710d38c292a7a3f78c04e - # via django -django==5.2.9 \ - --hash=sha256:16b5ccfc5e8c27e6c0561af551d2ea32852d7352c67d452ae3e76b4f6b2ca495 \ - --hash=sha256:3a4ea88a70370557ab1930b332fd2887a9f48654261cdffda663fef5976bb00a +# uv pip compile contrib/container/requirements.in -o contrib/container/requirements.txt --python-version=3.14 -c src/backend/requirements.txt +asgiref==3.11.1 \ + --hash=sha256:5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce \ + --hash=sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133 # via + # -c src/backend/requirements.txt + # django +django==5.2.12 \ + --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ + --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb + # via + # -c src/backend/requirements.txt # -r contrib/container/requirements.in # django-auth-ldap -django-auth-ldap==5.2.0 \ - --hash=sha256:08ba6efc0340d9874725a962311b14991e29a33593eb150a8fb640709dbfa80f \ - --hash=sha256:7dc6eb576ba36051850b580e4bdf4464e04bbe7367c3827a3121b4d7c51fb175 - # via -r contrib/container/requirements.in -gunicorn==23.0.0 \ - --hash=sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d \ - --hash=sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec +django-auth-ldap==5.3.0 \ + --hash=sha256:743d8107b146240b46f7e97207dc06cb11facc0cd70dce490b7ca09dd5643d19 \ + --hash=sha256:aa880415983149b072f876d976ef8ec755a438090e176817998263a6ed9e1038 # via -r contrib/container/requirements.in +gunicorn==25.1.0 \ + --hash=sha256:1426611d959fa77e7de89f8c0f32eed6aa03ee735f98c01efba3e281b1c47616 \ + --hash=sha256:d0b1236ccf27f72cfe14bce7caadf467186f19e865094ca84221424e839b8b8b + # via + # -c src/backend/requirements.txt + # -r contrib/container/requirements.in invoke==2.2.1 \ --hash=sha256:2413bc441b376e5cd3f55bb5d364f973ad8bdd7bf87e53c79de3c11bf3feecc8 \ --hash=sha256:515bf49b4a48932b79b024590348da22f39c4942dff991ad1fb8b8baea1be707 - # via -r contrib/container/requirements.in + # via + # -c src/backend/requirements.txt + # -r contrib/container/requirements.in mariadb==1.1.14 \ --hash=sha256:0f5fc74023f2e479be159542633f8b5865fee18a36e5a6d4e262387b39a692ee \ --hash=sha256:1a50b4612c0dd5b69690cebb34cef552a7f64dcadeb5aa91d70cd99bf01bc5b3 \ @@ -47,87 +54,82 @@ mysqlclient==2.2.7 \ --hash=sha256:977e35244fe6ef44124e9a1c2d1554728a7b76695598e4b92b37dc2130503069 \ --hash=sha256:a22d99d26baf4af68ebef430e3131bb5a9b722b79a9fcfac6d9bbf8a88800687 # via -r contrib/container/requirements.in -packaging==25.0 \ - --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \ - --hash=sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f +packaging==26.0 \ + --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ + --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 # via + # -c src/backend/requirements.txt # gunicorn # mariadb -psycopg[binary, pool]==3.2.12 \ - --hash=sha256:85c08d6f6e2a897b16280e0ff6406bef29b1327c045db06d21f364d7cd5da90b \ - --hash=sha256:8a1611a2d4c16ae37eada46438be9029a35bb959bb50b3d0e1e93c0f3d54c9ee + # wheel +psycopg[binary, pool]==3.3.2 \ + --hash=sha256:3e94bc5f4690247d734599af56e51bae8e0db8e4311ea413f801fef82b14a99b \ + --hash=sha256:707a67975ee214d200511177a6a80e56e654754c9afca06a7194ea6bbfde9ca7 # via -r contrib/container/requirements.in -psycopg-binary==3.2.12 \ - --hash=sha256:095ccda59042a1239ac2fefe693a336cb5cecf8944a8d9e98b07f07e94e2b78d \ - --hash=sha256:0afb71a99871a41dd677d207c6a988d978edde5d6a018bafaed4f9da45357055 \ - --hash=sha256:100fdfee763d701f6da694bde711e264aca4c2bc84fb81e1669fb491ce11d219 \ - --hash=sha256:13cd057f406d2c8063ae8b489395b089a7f23c39aff223b5ea39f0c4dd640550 \ - --hash=sha256:15e226f0d8af85cc8b2435b2e9bc6f0d40febc79eef76cf20fceac4d902a6a7b \ - --hash=sha256:16db2549a31ccd4887bef05570d95036813ce25fd9810b523ba1c16b0f6cfd90 \ - --hash=sha256:1c1dbeb8e97d00a33dfa9987776ce3d1c1e4cc251dfbd663b8f9e173f5c89d17 \ - --hash=sha256:1d7cedecbe0bb60a2e72b1613fba4072a184a6472d6cc9aa99e540217f544e3e \ - --hash=sha256:2598d0e4f2f258da13df0560187b3f1dfc9b8688c46b9d90176360ae5212c3fc \ - --hash=sha256:26b5927b5880b396231ab6190ee5c8fb47ed3f459b53504ed5419faaf16d3bfb \ - --hash=sha256:294f08b014f08dfd3c9b72408f5e1a0fd187bd86d7a85ead651e32dbd47aa038 \ - --hash=sha256:2aa80ca8d17266507bef853cecefa7d632ffd087883ee7ca92b8a7ea14a1e581 \ - --hash=sha256:2d55009eeddbef54c711093c986daaf361d2c4210aaa1ee905075a3b97a62441 \ - --hash=sha256:310c95a68a9b948b89d6d187622757d57b6c26cece3c3f7c2cbb645ee36531b2 \ - --hash=sha256:32b3e12d9441508f9c4e1424f4478b1a518a90a087cd54be3754e74954934194 \ - --hash=sha256:356b4266e5cde7b5bbcf232f549dedf7fbed4983daa556042bdec397780e044d \ - --hash=sha256:385c7b5cfffac115f413b8e32c941c85ea0960e0b94a6ef43bb260f774c54893 \ - --hash=sha256:3c1e38b1eda54910628f68448598139a9818973755abf77950057372c1fe89a6 \ - --hash=sha256:3e9c9e64fb7cda688e9488402611c0be2c81083664117edcc709d15f37faa30f \ - --hash=sha256:442f20153415f374ae5753ca618637611a41a3c58c56d16ce55f845d76a3cf7b \ - --hash=sha256:489b154891f1c995355adeb1077ee3479e9c9bada721b93270c20243bbad6542 \ - --hash=sha256:48a8e29f3e38fcf8d393b8fe460d83e39c107ad7e5e61cd3858a7569e0554a39 \ - --hash=sha256:49582c3b6d578bdaab2932b59f70b1bd93351ed4d594b2c97cea1611633c9de1 \ - --hash=sha256:58ed30d33c25d7dc8d2f06285e88493147c2a660cc94713e4b563a99efb80a1f \ - --hash=sha256:5b6e505618cb376a7a7d6af86833a8f289833fe4cc97541d7100745081dc31bd \ - --hash=sha256:66a031f22e4418016990446d3e38143826f03ad811b9f78f58e2afbc1d343f7a \ - --hash=sha256:6a898717ab560db393355c6ecf39b8c534f252afc3131480db1251e061090d3a \ - --hash=sha256:7130effd0517881f3a852eff98729d51034128f0737f64f0d1c7ea8343d77bd7 \ - --hash=sha256:72fd979e410ba7805462817ef8ed6f37dd75f9f4ae109bdb8503e013ccecb80b \ - --hash=sha256:77690f0bf08356ca00fc357f50a5980c7a25f076c2c1f37d9d775a278234fefd \ - --hash=sha256:79de3cc5adbf51677009a8fda35ac9e9e3686d5595ab4b0c43ec7099ece6aeb5 \ - --hash=sha256:7b9a99ded7d19b24d3b6fa632b58e52bbdecde7e1f866c3b23d0c27b092af4e3 \ - --hash=sha256:802bd01fb18a0acb0dea491f69a9a2da6034f33329a62876ab5b558a1fb66b45 \ - --hash=sha256:8335d989a4e94df2ccd8a1acbba9d03c4157ea8d73b65b79d447c6dc10b001d8 \ - --hash=sha256:89b3c5201ca616d69ca0c3c0003ca18f7170a679c445c7e386ebfb4f29aa738e \ - --hash=sha256:8ffe75fe6be902dadd439adf4228c98138a992088e073ede6dd34e7235f4e03e \ - --hash=sha256:909de94de7dd4d6086098a5755562207114c9638ec42c52d84c8a440c45fe084 \ - --hash=sha256:940ac69ef6e89c17b3d30f3297a2ad03efdd06a4b1857f81bc533a9108a90eb9 \ - --hash=sha256:95f2806097a49bfd57e0c6a178f77b99487c53c157d9d507aee9c40dd58efdb4 \ - --hash=sha256:9c674887d1e0d4384c06c822bc7fcfede4952742e232ec1e76b5a6ae39a3ddd4 \ - --hash=sha256:9fdf3a0c24822401c60c93640da69b3dfd4d9f29c3a8d797244fe22bfe592823 \ - --hash=sha256:ab02b7d138768fd6ac4230e45b073f7b9fd688d88c04f24c34df4a250a94d066 \ - --hash=sha256:acb1811219a4144539f0baee224a11a2aa323a739c349799cf52f191eb87bc52 \ - --hash=sha256:bfd632f7038c76b0921f6d5621f5ba9ecabfad3042fa40e5875db11771d2a5de \ - --hash=sha256:ce68839da386f137bc8d814fdbeede8f89916b8605e3593a85b504a859243af9 \ - --hash=sha256:d369e79ad9647fc8217cbb51bbbf11f9a1ffca450be31d005340157ffe8e91b3 \ - --hash=sha256:dc68094e00a5a7e8c20de1d3a0d5e404a27f522e18f8eb62bbbc9f865c3c81ef \ - --hash=sha256:deeb06b7141f3a577c3aa8562307e2747580ae43d705a0482603a2c1f110d046 \ - --hash=sha256:e0b5ccd03ca4749b8f66f38608ccbcb415cbd130d02de5eda80d042b83bee90e \ - --hash=sha256:ea049c8d33c4f4e6b030d5a68123c0ccd2ffb77d4035f073db97187b49b6422f \ - --hash=sha256:ea9751310b840186379c949ede5a5129b31439acdb929f3003a8685372117ed8 \ - --hash=sha256:ec82fa5134517af44e28a30c38f34384773a0422ffd545fd298433ea9f2cc5a9 \ - --hash=sha256:eedc410f82007038030650aa58f620f9fe0009b9d6b04c3dc71cbd3bae5b2675 \ - --hash=sha256:ef40601b959cc1440deaf4d53472ab54fa51036c37189cf3fe5500559ac25347 \ - --hash=sha256:ef92d5ba6213de060d1390b1f71f5c3b2fbb00b4d55edee39f3b07234538b64a \ - --hash=sha256:efab679a2c7d1bf7d0ec0e1ecb47fe764945eff75bb4321f2e699b30a12db9b3 \ - --hash=sha256:f33c9e12ed05e579b7fb3c8fdb10a165f41459394b8eb113e7c377b2bd027f61 \ - --hash=sha256:f3bae4be7f6781bf6c9576eedcd5e1bb74468126fa6de991e47cdb1a8ea3a42a \ - --hash=sha256:f6ba1fe35fd215813dac4544a5ffc90f13713b29dd26e9e5be97ba53482bf6d6 \ - --hash=sha256:f7c81bc60560be9eb3c23601237765069ebfa9881097ce19ca6b5ea17c5faa8f \ - --hash=sha256:f8107968a9eadb451cfa6cf86036006fdde32a83cd39c26c9ca46765e653b547 \ - --hash=sha256:f821e0c8a8fdfddfa71acb4f462d7a4c5aae1655f3f5e078970dbe9f19027386 +psycopg-binary==3.3.2 \ + --hash=sha256:03b7cd73fb8c45d272a34ae7249713e32492891492681e3cf11dff9531cf37e9 \ + --hash=sha256:04bb2de4ba69d6f8395b446ede795e8884c040ec71d01dd07ac2b2d18d4153d1 \ + --hash=sha256:0611f4822674f3269e507a307236efb62ae5a828fcfc923ac85fe22ca19fd7c8 \ + --hash=sha256:0768c5f32934bb52a5df098317eca9bdcf411de627c5dca2ee57662b64b54b41 \ + --hash=sha256:07a5f030e0902ec3e27d0506ceb01238c0aecbc73ecd7fa0ee55f86134600b5b \ + --hash=sha256:083c2e182be433f290dc2c516fd72b9b47054fcd305cce791e0a50d9e93e06f2 \ + --hash=sha256:09b3014013f05cd89828640d3a1db5f829cc24ad8fa81b6e42b2c04685a0c9d4 \ + --hash=sha256:0ae60e910531cfcc364a8f615a7941cac89efeb3f0fffe0c4824a6d11461eef7 \ + --hash=sha256:136c43f185244893a527540307167f5d3ef4e08786508afe45d6f146228f5aa9 \ + --hash=sha256:1586e220be05547c77afc326741dd41cc7fba38a81f9931f616ae98865439678 \ + --hash=sha256:1e09d0d93d35c134704a2cb2b15f81ffc8174fd602f3e08f7b1a3d8896156cf0 \ + --hash=sha256:1ea41c0229f3f5a3844ad0857a83a9f869aa7b840448fa0c200e6bcf85d33d19 \ + --hash=sha256:23d2594af848c1fd3d874a9364bef50730124e72df7bb145a20cb45e728c50ed \ + --hash=sha256:3789d452a9d17a841c7f4f97bbcba51a21f957ea35641a4c98507520e6b6a068 \ + --hash=sha256:3ff7489df5e06c12d1829544eaec64970fe27fe300f7cf04c8495fe682064688 \ + --hash=sha256:43b130e3b6edcb5ee856c7167ccb8561b473308c870ed83978ae478613764f1c \ + --hash=sha256:44e89938d36acc4495735af70a886d206a5bfdc80258f95b69b52f68b2968d9e \ + --hash=sha256:458696a5fa5dad5b6fb5d5862c22454434ce4fe1cf66ca6c0de5f904cbc1ae3e \ + --hash=sha256:50ff10ab8c0abdb5a5451b9315538865b50ba64c907742a1385fdf5f5772b73e \ + --hash=sha256:522b79c7db547767ca923e441c19b97a2157f2f494272a119c854bba4804e186 \ + --hash=sha256:59d0163c4617a2c577cb34afbed93d7a45b8c8364e54b2bd2020ff25d5f5f860 \ + --hash=sha256:5a327327f1188b3fbecac41bf1973a60b86b2eb237db10dc945bd3dc97ec39e4 \ + --hash=sha256:649c1d33bedda431e0c1df646985fbbeb9274afa964e1aef4be053c0f23a2924 \ + --hash=sha256:716a586f99bbe4f710dc58b40069fcb33c7627e95cc6fc936f73c9235e07f9cf \ + --hash=sha256:742ce48cde825b8e52fb1a658253d6d1ff66d152081cbc76aa45e2986534858d \ + --hash=sha256:74bc306c4b4df35b09bc8cecf806b271e1c5d708f7900145e4e54a2e5dedfed0 \ + --hash=sha256:7c1feba5a8c617922321aef945865334e468337b8fc5c73074f5e63143013b5a \ + --hash=sha256:7c43a773dd1a481dbb2fe64576aa303d80f328cce0eae5e3e4894947c41d1da7 \ + --hash=sha256:8309ee4569dced5e81df5aa2dcd48c7340c8dee603a66430f042dfbd2878edca \ + --hash=sha256:8db9034cde3bcdafc66980f0130813f5c5d19e74b3f2a19fb3cfbc25ad113121 \ + --hash=sha256:8ea05b499278790a8fa0ff9854ab0de2542aca02d661ddff94e830df971ff640 \ + --hash=sha256:90ed9da805e52985b0202aed4f352842c907c6b4fc6c7c109c6e646c32e2f43b \ + --hash=sha256:94503b79f7da0b65c80d0dbb2f81dd78b300319ec2435d5e6dcf9622160bc2fa \ + --hash=sha256:9742580ecc8e1ac45164e98d32ca6df90da509c2d3ff26be245d94c430f92db4 \ + --hash=sha256:9ca24062cd9b2270e4d77576042e9cc2b1d543f09da5aba1f1a3d016cea28390 \ + --hash=sha256:a9387ab615f929e71ef0f4a8a51e986fa06236ccfa9f3ec98a88f60fbf230634 \ + --hash=sha256:ac230e3643d1c436a2dfb59ca84357dfc6862c9f372fc5dbd96bafecae581f9f \ + --hash=sha256:c3a9ccdfee4ae59cf9bf1822777e763bc097ed208f4901e21537fca1070e1391 \ + --hash=sha256:c5774272f754605059521ff037a86e680342e3847498b0aa86b0f3560c70963c \ + --hash=sha256:c6464150e25b68ae3cb04c4e57496ea11ebfaae4d98126aea2f4702dd43e3c12 \ + --hash=sha256:c749770da0947bc972e512f35366dd4950c0e34afad89e60b9787a37e97cb443 \ + --hash=sha256:cabb2a554d9a0a6bf84037d86ca91782f087dfff2a61298d0b00c19c0bc43f6d \ + --hash=sha256:d391b70c9cc23f6e1142729772a011f364199d2c5ddc0d596f5f43316fbf982d \ + --hash=sha256:d45acedcaa58619355f18e0f42af542fcad3fd84ace4b8355d3a5dea23318578 \ + --hash=sha256:d79b0093f0fbf7a962d6a46ae292dc056c65d16a8ee9361f3cfbafd4c197ab14 \ + --hash=sha256:d88f32ff8c47cb7f4e7e7a9d1747dcee6f3baa19ed9afa9e5694fd2fb32b61ed \ + --hash=sha256:d8c899a540f6c7585cee53cddc929dd4d2db90fd828e37f5d4017b63acbc1a5d \ + --hash=sha256:de9173f8cc0efd88ac2a89b3b6c287a9a0011cdc2f53b2a12c28d6fd55f9f81c \ + --hash=sha256:df65174c7cf6b05ea273ce955927d3270b3a6e27b0b12762b009ce6082b8d3fc \ + --hash=sha256:e22bf6b54df994aff37ab52695d635f1ef73155e781eee1f5fa75bc08b58c8da \ + --hash=sha256:e750afe74e6c17b2c7046d2c3e3173b5a3f6080084671c8aa327215323df155b \ + --hash=sha256:ea4fe6b4ead3bbbe27244ea224fcd1f53cb119afc38b71a2f3ce570149a03e30 \ + --hash=sha256:f26f113013c4dcfbfe9ced57b5bad2035dda1a7349f64bf726021968f9bccad3 \ + --hash=sha256:f3f601f32244a677c7b029ec39412db2772ad04a28bc2cbb4b1f0931ed0ffad7 \ + --hash=sha256:fc5a189e89cbfff174588665bb18d28d2d0428366cc9dae5864afcaa2e57380b # via psycopg -psycopg-pool==3.2.7 \ - --hash=sha256:4b47bb59d887ef5da522eb63746b9f70e2faf967d34aac4f56ffc65e9606728f \ - --hash=sha256:a77d531bfca238e49e5fb5832d65b98e69f2c62bfda3d2d4d833696bdc9ca54b +psycopg-pool==3.3.0 \ + --hash=sha256:2e44329155c410b5e8666372db44276a8b1ebd8c90f1c3026ebba40d4bc81063 \ + --hash=sha256:fa115eb2860bd88fce1717d75611f41490dec6135efb619611142b24da3f6db5 # via psycopg -pyasn1==0.6.1 \ - --hash=sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629 \ - --hash=sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034 +pyasn1==0.6.2 \ + --hash=sha256:1eb26d860996a18e9b6ed05e7aae0e9fc21619fcee6af91cca9bad4fbea224bf \ + --hash=sha256:9b59a2b25ba7e4f8197db7686c09fb33e658b98339fadb826e9512629017833b # via # pyasn1-modules # python-ldap @@ -214,43 +216,49 @@ pyyaml==6.0.3 \ --hash=sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6 \ --hash=sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926 \ --hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0 - # via -r contrib/container/requirements.in -setuptools==80.9.0 \ - --hash=sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 \ - --hash=sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c - # via -r contrib/container/requirements.in -sqlparse==0.5.3 \ - --hash=sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272 \ - --hash=sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca - # via django + # via + # -c src/backend/requirements.txt + # -r contrib/container/requirements.in +setuptools==82.0.0 \ + --hash=sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb \ + --hash=sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0 + # via + # -c src/backend/requirements.txt + # -r contrib/container/requirements.in +sqlparse==0.5.5 \ + --hash=sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba \ + --hash=sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e + # via + # -c src/backend/requirements.txt + # django typing-extensions==4.15.0 \ --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 # via - # psycopg + # -c src/backend/requirements.txt # psycopg-pool -uv==0.9.8 \ - --hash=sha256:0f03bc413c933dbf850ad0dc2dba3df6b80c860a5c65cd767add49da19dadef0 \ - --hash=sha256:14670bf55ecb5cfd0f3654fbf51c58a21dec3ad8ab531079b3ed8599271dc77b \ - --hash=sha256:1b8b5bdcda3e10ea70b618d0609acddc5c725cb58d4caf933030ddedd7c2e98f \ - --hash=sha256:40253d00c1e900a0a61b132b1e0dd4aa83575cfd5302d3671899b6de29b1ef67 \ - --hash=sha256:50d130c46d97d7f10675ebea8608b7b4722c84b5745cd1bb0c8ae6d7984c05d5 \ - --hash=sha256:543693def38fa41b9706aba391111fe8d9dd6be86899d76f9581faf045ac1cb6 \ - --hash=sha256:5af28f1645eb3c50fd34a78508792db2d0799816f4eb5f55e1e6e2c724dfb125 \ - --hash=sha256:6a01d7cd41953ffac583139b10ad1df004a67c0246a6b694eb5bcdbc8c99deaf \ - --hash=sha256:6df2e16f6df32018047c60bab2c0284868ad5c309addba9183ea2eeb71746bf0 \ - --hash=sha256:7038a552159f2291dd0d1f4f66a36261b5f3ed5fcd92e2869186f8e910b2c935 \ - --hash=sha256:75671150d6eb9d5ee829e1fdb8cf86b8e44a66d27cbb996fe807e986c4107b5d \ - --hash=sha256:87c3b65b6d5fcbdeab199d54c74fbf75de19cb534a690c936c5616478a038576 \ - --hash=sha256:99b18bfe92c33c3862b65d74677697e799763e669e0064685f405e7e27517f25 \ - --hash=sha256:9f2f3576c4518ff4f15e48dbca70585a513523c4738bc8cc2e48b20fd1190ce3 \ - --hash=sha256:a4010b3fdabbb3c4f2cf2f7aa3bf6002d00049dcbc54ce0ee5ada32a933b2290 \ - --hash=sha256:bb0f8e83c2a2fc5a802e930cc8a7b71ab068180300a3f27ba38037f9fcb3d430 \ - --hash=sha256:cdbfadca9522422ab9820f5ada071c9c5c869bcd6fee719d20d91d5ec85b2a7d \ - --hash=sha256:d93a2227d23e81ab3a16c30363559afc483e8aca40ea9343b3f326a9a41718c9 \ - --hash=sha256:f52c6a99197028a314d4c1825f7ccb696eb9a88b822d2e2f17046266c75e543e +uv==0.9.22 \ + --hash=sha256:012bdc5285a9cdb091ac514b7eb8a707e3b649af5355fe4afb4920bfe1958c00 \ + --hash=sha256:0cdc653fb601aa7f273242823fa93024f5fd319c66cdf22f36d784858493564c \ + --hash=sha256:0d8f007616cac5962620252b56a1d8224e9b2de566e78558efe04cc18526d507 \ + --hash=sha256:1f45e1e0f26dd47fa01eb421c54cfd39de10fd52ac0a9d7ae45b92fce7d92b0b \ + --hash=sha256:1f979c9d313b4616d9865859ef520bea5df0d4f15c57214589f5676fafa440c1 \ + --hash=sha256:2a4155cf7d0231d0adae94257ee10d70c57c2f592207536ddd55d924590a8c15 \ + --hash=sha256:3422b093b8e6e8de31261133b420c34dbef81f3fd1d82f787ac771b00b54adf8 \ + --hash=sha256:369b55341c6236f42d8fc335876308e5c57c921850975b3019cc9f7ebbe31567 \ + --hash=sha256:3b2bcce464186f8fafa3bf2aa5d82db4e3229366345399cc3f5bcafd616b8fe0 \ + --hash=sha256:41c73a4938818ede30e601cd0be87953e5c6a83dc4762e04e626f2eb9b240ebe \ + --hash=sha256:59c4f6b3659a68c26c50865432a7134386f607432160aad51e2247f862902697 \ + --hash=sha256:77ec4c101d41d7738226466191a7d62f9fa4de06ea580e0801da2f5cd5fa08aa \ + --hash=sha256:8f73043ade8ff6335e19fe1f4e7425d5e28aec9cafd72d13d5b40bb1cbb85690 \ + --hash=sha256:9c238525272506845fe07c0b9088c5e33fcd738e1f49ef49dc3c8112096d2e3a \ + --hash=sha256:b1985559b38663642658069e8d09fa6c30ed1c67654b7e5765240d9e4e9cdd57 \ + --hash=sha256:b78f2605d65c4925631d891dec99b677b05f50c774dedc6ef8968039a5bcfdb0 \ + --hash=sha256:b807bafe6b65fc1fe9c65ffd0d4228db894872de96e7200c44943f24beb68931 \ + --hash=sha256:d9d4be990bb92a68781f7c98d2321b528667b61d565c02ba978488c0210aa768 \ + --hash=sha256:e4b61a9c8b8dcbf64e642d2052342d36a46886b8bc3ccc407282962b970101af # via -r contrib/container/requirements.in -wheel==0.45.1 \ - --hash=sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729 \ - --hash=sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248 +wheel==0.46.3 \ + --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ + --hash=sha256:e3e79874b07d776c40bd6033f8ddf76a7dad46a7b8aa1b2787a83083519a1803 # via -r contrib/container/requirements.in diff --git a/contrib/dev_reqs/requirements.txt b/contrib/dev_reqs/requirements.txt index 3e727175ac..945a8c118e 100644 --- a/contrib/dev_reqs/requirements.txt +++ b/contrib/dev_reqs/requirements.txt @@ -1,128 +1,134 @@ # This file was autogenerated by uv via the following command: -# uv pip compile contrib/dev_reqs/requirements.in -o contrib/dev_reqs/requirements.txt --no-strip-extras --generate-hashes -b src/backend/requirements.txt -certifi==2025.10.5 \ - --hash=sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de \ - --hash=sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43 - # via requests -charset-normalizer==3.4.4 \ - --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ - --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ - --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \ - --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \ - --hash=sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc \ - --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \ - --hash=sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63 \ - --hash=sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d \ - --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \ - --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \ - --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \ - --hash=sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505 \ - --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \ - --hash=sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af \ - --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \ - --hash=sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318 \ - --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \ - --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \ - --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \ - --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \ - --hash=sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576 \ - --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \ - --hash=sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1 \ - --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \ - --hash=sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1 \ - --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \ - --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \ - --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \ - --hash=sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88 \ - --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \ - --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \ - --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \ - --hash=sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a \ - --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \ - --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \ - --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \ - --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \ - --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \ - --hash=sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7 \ - --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \ - --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \ - --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \ - --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \ - --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \ - --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \ - --hash=sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2 \ - --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \ - --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \ - --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \ - --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \ - --hash=sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf \ - --hash=sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6 \ - --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \ - --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \ - --hash=sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa \ - --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \ - --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \ - --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \ - --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \ - --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \ - --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \ - --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \ - --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \ - --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \ - --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \ - --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \ - --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \ - --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \ - --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \ - --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \ - --hash=sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3 \ - --hash=sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9 \ - --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \ - --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \ - --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \ - --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \ - --hash=sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50 \ - --hash=sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf \ - --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \ - --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \ - --hash=sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac \ - --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \ - --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \ - --hash=sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c \ - --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \ - --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \ - --hash=sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e \ - --hash=sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4 \ - --hash=sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84 \ - --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \ - --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \ - --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \ - --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \ - --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \ - --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \ - --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \ - --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \ - --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \ - --hash=sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074 \ - --hash=sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3 \ - --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \ - --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \ - --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \ - --hash=sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d \ - --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \ - --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \ - --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \ - --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \ - --hash=sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966 \ - --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \ - --hash=sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3 \ - --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \ - --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608 - # via requests +# uv pip compile contrib/dev_reqs/requirements.in -o contrib/dev_reqs/requirements.txt -c src/backend/requirements.txt +certifi==2026.2.25 \ + --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ + --hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7 + # via + # -c src/backend/requirements.txt + # requests +charset-normalizer==3.4.5 \ + --hash=sha256:014837af6fabf57121b6254fa8ade10dceabc3528b27b721a64bbc7b8b1d4eb4 \ + --hash=sha256:01a1ed54b953303ca7e310fafe0fe347aab348bd81834a0bcd602eb538f89d66 \ + --hash=sha256:0294916d6ccf2d069727d65973c3a1ca477d68708db25fd758dd28b0827cff54 \ + --hash=sha256:02a9d1b01c1e12c27883b0c9349e0bcd9ae92e727ff1a277207e1a262b1cbf05 \ + --hash=sha256:036c079aa08a6a592b82487f97c60b439428320ed1b2ea0b3912e99d30c77765 \ + --hash=sha256:039215608ac7b358c4da0191d10fc76868567fbf276d54c14721bdedeb6de064 \ + --hash=sha256:0625665e4ebdddb553ab185de5db7054393af8879fb0c87bd5690d14379d6819 \ + --hash=sha256:0a45e504f5e1be0bd385935a8e1507c442349ca36f511a47057a71c9d1d6ea9e \ + --hash=sha256:0b362bcd27819f9c07cbf23db4e0e8cd4b44c5ecd900c2ff907b2b92274a7412 \ + --hash=sha256:0c300cefd9b0970381a46394902cd18eaf2aa00163f999590ace991989dcd0fc \ + --hash=sha256:1088345bcc93c58d8d8f3d783eca4a6e7a7752bbff26c3eee7e73c597c191c2e \ + --hash=sha256:10b473fc8dca1c3ad8559985794815f06ca3fc71942c969129070f2c3cdf7281 \ + --hash=sha256:131716d6786ad5e3dc542f5cc6f397ba3339dc0fb87f87ac30e550e8987756af \ + --hash=sha256:14498a429321de554b140013142abe7608f9d8ccc04d7baf2ad60498374aefa2 \ + --hash=sha256:149ec69866c3d6c2fb6f758dbc014ecb09f30b35a5ca90b6a8a2d4e54e18fdfe \ + --hash=sha256:165c7b21d19365464e8f70e5ce5e12524c58b48c78c1f5a57524603c1ab003f8 \ + --hash=sha256:1827734a5b308b65ac54e86a618de66f935a4f63a8a462ff1e19a6788d6c2262 \ + --hash=sha256:19092dde50335accf365cce21998a1c6dd8eafd42c7b226eb54b2747cdce2fac \ + --hash=sha256:1a374cc0b88aa710e8865dc1bd6edb3743c59f27830f0293ab101e4cf3ce9f85 \ + --hash=sha256:1d1401945cb77787dbd3af2446ff2d75912327c4c3a1526ab7955ecf8600687c \ + --hash=sha256:1f2da5cbb9becfcd607757a169e38fb82aa5fd86fae6653dea716e7b613fe2cf \ + --hash=sha256:259cd1ca995ad525f638e131dbcc2353a586564c038fc548a3fe450a91882139 \ + --hash=sha256:2820a98460c83663dd8ec015d9ddfd1e4879f12e06bb7d0500f044fb477d2770 \ + --hash=sha256:28269983f25a4da0425743d0d257a2d6921ea7d9b83599d4039486ec5b9f911d \ + --hash=sha256:2b970382e4a36bed897c19f310f31d7d13489c11b4f468ddfba42d41cddfb918 \ + --hash=sha256:2da4eedcb6338e2321e831a0165759c0c620e37f8cd044a263ff67493be8ffb3 \ + --hash=sha256:30987f4a8ed169983f93e1be8ffeea5214a779e27ed0b059835c7afe96550ad7 \ + --hash=sha256:30a2b1a48478c3428d047ed9690d57c23038dac838a87ad624c85c0a78ebeb39 \ + --hash=sha256:340810d34ef83af92148e96e3e44cb2d3f910d2bf95e5618a5c467d9f102231d \ + --hash=sha256:3f64c6bf8f32f9133b668c7f7a7cbdbc453412bc95ecdbd157f3b1e377a92990 \ + --hash=sha256:4167a621a9a1a986c73777dbc15d4b5eac8ac5c10393374109a343d4013ec765 \ + --hash=sha256:4354e401eb6dab9aed3c7b4030514328a6c748d05e1c3e19175008ca7de84fb1 \ + --hash=sha256:4481e6da1830c8a1cc0b746b47f603b653dadb690bcd851d039ffaefe70533aa \ + --hash=sha256:4b8551b6e6531e156db71193771c93bda78ffc4d1e6372517fe58ad3b91e4659 \ + --hash=sha256:4cd966c2559f501c6fd69294d082c2934c8dd4719deb32c22961a5ac6db0df1d \ + --hash=sha256:50bcbca6603c06a1dcc7b056ed45c37715fb5d2768feb3bcd37d2313c587a5b9 \ + --hash=sha256:530beedcec9b6e027e7a4b6ce26eed36678aa39e17da85e6e03d7bd9e8e9d7c9 \ + --hash=sha256:568e3c34b58422075a1b49575a6abc616d9751b4d61b23f712e12ebb78fe47b2 \ + --hash=sha256:573ef5814c4b7c0d59a7710aa920eaaaef383bd71626aa420fba27b5cab92e8d \ + --hash=sha256:58ad8270cfa5d4bef1bc85bd387217e14ff154d6630e976c6f56f9a040757475 \ + --hash=sha256:597d10dec876923e5c59e48dbd366e852eacb2b806029491d307daea6b917d7c \ + --hash=sha256:5bcb3227c3d9aaf73eaaab1db7ccd80a8995c509ee9941e2aae060ca6e4e5d81 \ + --hash=sha256:5cffde4032a197bd3b42fd0b9509ec60fb70918d6970e4cc773f20fc9180ca67 \ + --hash=sha256:5fea359734b140d0d6741189fea5478c6091b54ffc69d7ce119e0a05637d8c99 \ + --hash=sha256:60d68e820af339df4ae8358c7a2e7596badeb61e544438e489035f9fbf3246a5 \ + --hash=sha256:610f72c0ee565dfb8ae1241b666119582fdbfe7c0975c175be719f940e110694 \ + --hash=sha256:65a126fb4b070d05340a84fc709dd9e7c75d9b063b610ece8a60197a291d0adf \ + --hash=sha256:65b3c403a5b6b8034b655e7385de4f72b7b244869a22b32d4030b99a60593eca \ + --hash=sha256:66dee73039277eb35380d1b82cccc69cc82b13a66f9f4a18da32d573acf02b7c \ + --hash=sha256:708c7acde173eedd4bfa4028484426ba689d2103b28588c513b9db2cd5ecde9c \ + --hash=sha256:728c6a963dfab66ef865f49286e45239384249672cd598576765acc2a640a636 \ + --hash=sha256:754f96058e61a5e22e91483f823e07df16416ce76afa4ebf306f8e1d1296d43f \ + --hash=sha256:75dfd1afe0b1647449e852f4fb428195a7ed0588947218f7ba929f6538487f02 \ + --hash=sha256:75ee9c1cce2911581a70a3c0919d8bccf5b1cbc9b0e5171400ec736b4b569497 \ + --hash=sha256:76a9d0de4d0eab387822e7b35d8f89367dd237c72e82ab42b9f7bf5e15ada00f \ + --hash=sha256:77be992288f720306ab4108fe5c74797de327f3248368dfc7e1a916d6ed9e5a2 \ + --hash=sha256:7ad83b8f9379176c841f8865884f3514d905bcd2a9a3b210eaa446e7d2223e4d \ + --hash=sha256:8197abe5ca1ffb7d91e78360f915eef5addff270f8a71c1fc5be24a56f3e4873 \ + --hash=sha256:82cc7c2ad42faec8b574351f8bc2a0c049043893853317bd9bb309f5aba6cb5a \ + --hash=sha256:8a28afb04baa55abf26df544e3e5c6534245d3daa5178bc4a8eeb48202060d0e \ + --hash=sha256:8b78d8a609a4b82c273257ee9d631ded7fac0d875bdcdccc109f3ee8328cfcb1 \ + --hash=sha256:8ce11cd4d62d11166f2b441e30ace226c19a3899a7cf0796f668fba49a9fb123 \ + --hash=sha256:8fff79bf5978c693c9b1a4d71e4a94fddfb5fe744eb062a318e15f4a2f63a550 \ + --hash=sha256:92263f7eca2f4af326cd20de8d16728d2602f7cfea02e790dcde9d83c365d7cc \ + --hash=sha256:93b3b2cc5cf1b8743660ce77a4f45f3f6d1172068207c1defc779a36eea6bb36 \ + --hash=sha256:95adae7b6c42a6c5b5b559b1a99149f090a57128155daeea91732c8d970d8644 \ + --hash=sha256:97ab7787092eb9b50fb47fa04f24c75b768a606af1bcba1957f07f128a7219e4 \ + --hash=sha256:9db5e3fcdcee89a78c04dffb3fe33c79f77bd741a624946db2591c81b2fc85b0 \ + --hash=sha256:a118e2e0b5ae6b0120d5efa5f866e58f2bb826067a646431da4d6a2bdae7950e \ + --hash=sha256:a2aecdb364b8a1802afdc7f9327d55dad5366bc97d8502d0f5854e50712dbc5f \ + --hash=sha256:a66aa5022bf81ab4b1bebfb009db4fd68e0c6d4307a1ce5ef6a26e5878dfc9e4 \ + --hash=sha256:a68766a3c58fde7f9aaa22b3786276f62ab2f594efb02d0a1421b6282e852e98 \ + --hash=sha256:aa2f963b4da26daf46231d9b9e0e2c9408a751f8f0d0f44d2de56d3caf51d294 \ + --hash=sha256:aa92ec1102eaff840ccd1021478af176a831f1bccb08e526ce844b7ddda85c22 \ + --hash=sha256:ac59c15e3f1465f722607800c68713f9fbc2f672b9eb649fe831da4019ae9b23 \ + --hash=sha256:ae8b03427410731469c4033934cf473426faff3e04b69d2dfb64a4281a3719f8 \ + --hash=sha256:afca7f78067dd27c2b848f1b234623d26b87529296c6c5652168cc1954f2f3b2 \ + --hash=sha256:b2d37d78297b39a9eb9eb92c0f6df98c706467282055419df141389b23f93362 \ + --hash=sha256:b3e71afc578b98512bfe7bdb822dd6bc57d4b0093b4b6e5487c1e96ad4ace242 \ + --hash=sha256:ba20bdf69bd127f66d0174d6f2a93e69045e0b4036dc1ca78e091bcc765830c4 \ + --hash=sha256:c108f8619e504140569ee7de3f97d234f0fbae338a7f9f360455071ef9855a95 \ + --hash=sha256:c23eb3263356d94858655b3e63f85ac5d50970c6e8febcdde7830209139cc37d \ + --hash=sha256:c5af897b45fa606b12464ccbe0014bbf8c09191e0a66aab6aa9d5cf6e77e0c94 \ + --hash=sha256:c7a80a9242963416bd81f99349d5f3fce1843c303bd404f204918b6d75a75fd6 \ + --hash=sha256:c7e84e0c0005e3bdc1a9211cd4e62c78ba80bc37b2365ef4410cd2007a9047f2 \ + --hash=sha256:cace89841c0599d736d3d74a27bc5821288bb47c5441923277afc6059d7fbcb4 \ + --hash=sha256:cd2d0f0ec9aa977a27731a3209ebbcacebebaf41f902bd453a928bfd281cf7f8 \ + --hash=sha256:d01de5e768328646e6a3fa9e562706f8f6641708c115c62588aef2b941a4f88e \ + --hash=sha256:d1028de43596a315e2720a9849ee79007ab742c06ad8b45a50db8cdb7ed4a82a \ + --hash=sha256:d27ce22ec453564770d29d03a9506d449efbb9fa13c00842262b2f6801c48cce \ + --hash=sha256:d29dd9c016f2078b43d0c357511e87eee5b05108f3dd603423cb389b89813969 \ + --hash=sha256:d31f0d1671e1534e395f9eb84a68e0fb670e1edb1fe819a9d7f564ae3bc4e53f \ + --hash=sha256:d4eb8ac7469b2a5d64b5b8c04f84d8bf3ad340f4514b98523805cbf46e3b3923 \ + --hash=sha256:d5e52d127045d6ae01a1e821acfad2f3a1866c54d0e837828538fabe8d9d1bd6 \ + --hash=sha256:d77f97e515688bd615c1d1f795d540f32542d514242067adcb8ef532504cb9ee \ + --hash=sha256:d8ed79b8f6372ca4254955005830fd61c1ccdd8c0fac6603e2c145c61dd95db6 \ + --hash=sha256:dc57a0baa3eeedd99fafaef7511b5a6ef4581494e8168ee086031744e2679467 \ + --hash=sha256:e09f671a54ce70b79a1fc1dc6da3072b7ef7251fadb894ed92d9aa8218465a5f \ + --hash=sha256:e22d1059b951e7ae7c20ef6b06afd10fb95e3c41bf3c4fbc874dba113321c193 \ + --hash=sha256:e37bd100d2c5d3ba35db9c7c5ba5a9228cbcffe5c4778dc824b164e5257813d7 \ + --hash=sha256:e51ae7d81c825761d941962450f50d041db028b7278e7b08930b4541b3e45cb9 \ + --hash=sha256:e545b51da9f9af5c67815ca0eb40676c0f016d0b0381c86f20451e35696c5f95 \ + --hash=sha256:e6302ca4ae283deb0af68d2fbf467474b8b6aedcd3dab4db187e07f94c109763 \ + --hash=sha256:e71bbb595973622b817c042bd943c3f3667e9c9983ce3d205f973f486fec98a7 \ + --hash=sha256:ec56a2266f32bc06ed3c3e2a8f58417ce02f7e0356edc89786e52db13c593c98 \ + --hash=sha256:ed1a9a204f317ef879b32f9af507d47e49cd5e7f8e8d5d96358c98373314fc60 \ + --hash=sha256:ed97c282ee4f994ef814042423a529df9497e3c666dca19be1d4cd1129dc7ade \ + --hash=sha256:ed98364e1c262cf5f9363c3eca8c2df37024f52a8fa1180a3610014f26eac51c \ + --hash=sha256:ee57b926940ba00bca7ba7041e665cc956e55ef482f851b9b65acb20d867e7a2 \ + --hash=sha256:f1d725b754e967e648046f00c4facc42d414840f5ccc670c5670f59f83693e4f \ + --hash=sha256:f8102ae93c0bc863b1d41ea0f4499c20a83229f52ed870850892df555187154a \ + --hash=sha256:fc1c64934b8faf7584924143eb9db4770bbdb16659626e1a1a4d9efbcb68d947 \ + --hash=sha256:ff95a9283de8a457e6b12989de3f9f5193430f375d64297d323a615ea52cbdb3 + # via + # -c src/backend/requirements.txt + # requests idna==3.11 \ --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902 - # via requests + # via + # -c src/backend/requirements.txt + # requests jc==1.25.6 \ --hash=sha256:27f58befc7ae0a4c63322926c5f1ec892e3eac4a065eff3b07cfe420a6924a07 \ --hash=sha256:7367b59e6e0da8babeede1e5b0da083f3c5aa6b6e585b4aed28dd7c4b2d76162 @@ -205,82 +211,25 @@ pyyaml==6.0.3 \ --hash=sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6 \ --hash=sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926 \ --hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0 - # via -r contrib/dev_reqs/requirements.in + # via + # -c src/backend/requirements.txt + # -r contrib/dev_reqs/requirements.in requests==2.32.5 \ --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf - # via -r contrib/dev_reqs/requirements.in -ruamel-yaml==0.18.15 \ - --hash=sha256:148f6488d698b7a5eded5ea793a025308b25eca97208181b6a026037f391f701 \ - --hash=sha256:dbfca74b018c4c3fba0b9cc9ee33e53c371194a9000e694995e620490fd40700 + # via + # -c src/backend/requirements.txt + # -r contrib/dev_reqs/requirements.in +ruamel-yaml==0.19.1 \ + --hash=sha256:27592957fedf6e0b62f281e96effd28043345e0e66001f97683aa9a40c667c93 \ + --hash=sha256:53eb66cd27849eff968ebf8f0bf61f46cdac2da1d1f3576dd4ccee9b25c31993 # via jc -ruamel-yaml-clib==0.2.15 \ - --hash=sha256:014181cdec565c8745b7cbc4de3bf2cc8ced05183d986e6d1200168e5bb59490 \ - --hash=sha256:04d21dc9c57d9608225da28285900762befbb0165ae48482c15d8d4989d4af14 \ - --hash=sha256:05c70f7f86be6f7bee53794d80050a28ae7e13e4a0087c1839dcdefd68eb36b6 \ - --hash=sha256:0ba6604bbc3dfcef844631932d06a1a4dcac3fee904efccf582261948431628a \ - --hash=sha256:11e5499db1ccbc7f4b41f0565e4f799d863ea720e01d3e99fa0b7b5fcd7802c9 \ - --hash=sha256:1b45498cc81a4724a2d42273d6cfc243c0547ad7c6b87b4f774cb7bcc131c98d \ - --hash=sha256:1bb7b728fd9f405aa00b4a0b17ba3f3b810d0ccc5f77f7373162e9b5f0ff75d5 \ - --hash=sha256:1f66f600833af58bea694d5892453f2270695b92200280ee8c625ec5a477eed3 \ - --hash=sha256:27dc656e84396e6d687f97c6e65fb284d100483628f02d95464fd731743a4afe \ - --hash=sha256:2812ff359ec1f30129b62372e5f22a52936fac13d5d21e70373dbca5d64bb97c \ - --hash=sha256:2b216904750889133d9222b7b873c199d48ecbb12912aca78970f84a5aa1a4bc \ - --hash=sha256:331fb180858dd8534f0e61aa243b944f25e73a4dae9962bd44c46d1761126bbf \ - --hash=sha256:3cb75a3c14f1d6c3c2a94631e362802f70e83e20d1f2b2ef3026c05b415c4900 \ - --hash=sha256:3eb199178b08956e5be6288ee0b05b2fb0b5c1f309725ad25d9c6ea7e27f962a \ - --hash=sha256:424ead8cef3939d690c4b5c85ef5b52155a231ff8b252961b6516ed7cf05f6aa \ - --hash=sha256:45702dfbea1420ba3450bb3dd9a80b33f0badd57539c6aac09f42584303e0db6 \ - --hash=sha256:468858e5cbde0198337e6a2a78eda8c3fb148bdf4c6498eaf4bc9ba3f8e780bd \ - --hash=sha256:46895c17ead5e22bea5e576f1db7e41cb273e8d062c04a6a49013d9f60996c25 \ - --hash=sha256:46e4cc8c43ef6a94885f72512094e482114a8a706d3c555a34ed4b0d20200600 \ - --hash=sha256:480894aee0b29752560a9de46c0e5f84a82602f2bc5c6cde8db9a345319acfdf \ - --hash=sha256:4b293a37dc97e2b1e8a1aec62792d1e52027087c8eea4fc7b5abd2bdafdd6642 \ - --hash=sha256:4be366220090d7c3424ac2b71c90d1044ea34fca8c0b88f250064fd06087e614 \ - --hash=sha256:4d1032919280ebc04a80e4fb1e93f7a738129857eaec9448310e638c8bccefcf \ - --hash=sha256:4d3b58ab2454b4747442ac76fab66739c72b1e2bb9bd173d7694b9f9dbc9c000 \ - --hash=sha256:4dcec721fddbb62e60c2801ba08c87010bd6b700054a09998c4d09c08147b8fb \ - --hash=sha256:512571ad41bba04eac7268fe33f7f4742210ca26a81fe0c75357fa682636c690 \ - --hash=sha256:542d77b72786a35563f97069b9379ce762944e67055bea293480f7734b2c7e5e \ - --hash=sha256:56ea19c157ed8c74b6be51b5fa1c3aff6e289a041575f0556f66e5fb848bb137 \ - --hash=sha256:5d3c9210219cbc0f22706f19b154c9a798ff65a6beeafbf77fc9c057ec806f7d \ - --hash=sha256:5fea0932358e18293407feb921d4f4457db837b67ec1837f87074667449f9401 \ - --hash=sha256:617d35dc765715fa86f8c3ccdae1e4229055832c452d4ec20856136acc75053f \ - --hash=sha256:64da03cbe93c1e91af133f5bec37fd24d0d4ba2418eaf970d7166b0a26a148a2 \ - --hash=sha256:65f48245279f9bb301d1276f9679b82e4c080a1ae25e679f682ac62446fac471 \ - --hash=sha256:6f1d38cbe622039d111b69e9ca945e7e3efebb30ba998867908773183357f3ed \ - --hash=sha256:713cd68af9dfbe0bb588e144a61aad8dcc00ef92a82d2e87183ca662d242f524 \ - --hash=sha256:71845d377c7a47afc6592aacfea738cc8a7e876d586dfba814501d8c53c1ba60 \ - --hash=sha256:753faf20b3a5906faf1fc50e4ddb8c074cb9b251e00b14c18b28492f933ac8ef \ - --hash=sha256:7e74ea87307303ba91073b63e67f2c667e93f05a8c63079ee5b7a5c8d0d7b043 \ - --hash=sha256:88eea8baf72f0ccf232c22124d122a7f26e8a24110a0273d9bcddcb0f7e1fa03 \ - --hash=sha256:923816815974425fbb1f1bf57e85eca6e14d8adc313c66db21c094927ad01815 \ - --hash=sha256:9b6f7d74d094d1f3a4e157278da97752f16ee230080ae331fcc219056ca54f77 \ - --hash=sha256:a8220fd4c6f98485e97aea65e1df76d4fed1678ede1fe1d0eed2957230d287c4 \ - --hash=sha256:ab0df0648d86a7ecbd9c632e8f8d6b21bb21b5fc9d9e095c796cacf32a728d2d \ - --hash=sha256:ac9b8d5fa4bb7fd2917ab5027f60d4234345fd366fe39aa711d5dca090aa1467 \ - --hash=sha256:badd1d7283f3e5894779a6ea8944cc765138b96804496c91812b2829f70e18a7 \ - --hash=sha256:bdc06ad71173b915167702f55d0f3f027fc61abd975bd308a0968c02db4a4c3e \ - --hash=sha256:bf0846d629e160223805db9fe8cc7aec16aaa11a07310c50c8c7164efa440aec \ - --hash=sha256:bfd309b316228acecfa30670c3887dcedf9b7a44ea39e2101e75d2654522acd4 \ - --hash=sha256:c583229f336682b7212a43d2fa32c30e643d3076178fb9f7a6a14dde85a2d8bd \ - --hash=sha256:cb15a2e2a90c8475df45c0949793af1ff413acfb0a716b8b94e488ea95ce7cff \ - --hash=sha256:d290eda8f6ada19e1771b54e5706b8f9807e6bb08e873900d5ba114ced13e02c \ - --hash=sha256:da3d6adadcf55a93c214d23941aef4abfd45652110aed6580e814152f385b862 \ - --hash=sha256:dcc7f3162d3711fd5d52e2267e44636e3e566d1e5675a5f0b30e98f2c4af7974 \ - --hash=sha256:def5663361f6771b18646620fca12968aae730132e104688766cf8a3b1d65922 \ - --hash=sha256:e5e9f630c73a490b758bf14d859a39f375e6999aea5ddd2e2e9da89b9953486a \ - --hash=sha256:e9fde97ecb7bb9c41261c2ce0da10323e9227555c674989f8d9eb7572fc2098d \ - --hash=sha256:ef71831bd61fbdb7aa0399d5c4da06bea37107ab5c79ff884cc07f2450910262 \ - --hash=sha256:f4421ab780c37210a07d138e56dd4b51f8642187cdfb433eb687fe8c11de0144 \ - --hash=sha256:f6d3655e95a80325b84c4e14c080b2470fe4f33b6846f288379ce36154993fb1 \ - --hash=sha256:fd4c928ddf6bce586285daa6d90680b9c291cfd045fc40aad34e445d57b1bf51 \ - --hash=sha256:fe239bdfdae2302e93bd6e8264bd9b71290218fff7084a9db250b55caaccf43f - # via ruamel-yaml -urllib3==2.6.0 \ - --hash=sha256:c90f7a39f716c572c4e3e58509581ebd83f9b59cced005b7db7ad2d22b0db99f \ - --hash=sha256:cb9bcef5a4b345d5da5d145dc3e30834f58e8018828cbc724d30b4cb7d4d49f1 - # via requests +urllib3==2.6.3 \ + --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \ + --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 + # via + # -c src/backend/requirements.txt + # requests xmltodict==1.0.2 \ --hash=sha256:54306780b7c2175a3967cad1db92f218207e5bc1aba697d887807c0fb68b7649 \ --hash=sha256:62d0fddb0dcbc9f642745d8bbf4d81fd17d6dfaec5a15b5c1876300aad92af0d diff --git a/docs/docs/api/schema.md b/docs/docs/api/schema.md index f4ce2837f3..ba610a0773 100644 --- a/docs/docs/api/schema.md +++ b/docs/docs/api/schema.md @@ -7,7 +7,7 @@ The API schema as documented below is generated using the [drf-spectactular](htt ## API Version -This documentation is for API version: `352` +This documentation is for API version: `449` !!! tip "API Schema History" We track API schema changes, and provide a snapshot of each API schema version in the [API schema repository](https://github.com/inventree/schema/). diff --git a/docs/docs/app/index.md b/docs/docs/app/index.md index 5a9c748681..f8cdb49922 100644 --- a/docs/docs/app/index.md +++ b/docs/docs/app/index.md @@ -28,6 +28,9 @@ The InvenTree app can be downloaded from either the Android or Apple app stores, [Android Play Store](https://play.google.com/store/apps/details?id=inventree.inventree_app). +!!! info "APK Download" + As an alternative to using the Android Play Store, the InvenTree app APK file can be downloaded directly via our [polar.sh](https://polar.sh/inventree/products/299bf0d5-af88-4e0f-becf-c007ad37ecf2) page. + ### iOS [Apple App Store](https://apps.apple.com/au/app/inventree/id1581731101#?platform=iphone) diff --git a/docs/docs/assets/images/concepts/ui_breadcrumbs.png b/docs/docs/assets/images/concepts/ui_breadcrumbs.png new file mode 100644 index 0000000000..40ff611a9b Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_breadcrumbs.png differ diff --git a/docs/docs/assets/images/concepts/ui_calendar_select.png b/docs/docs/assets/images/concepts/ui_calendar_select.png new file mode 100644 index 0000000000..53ba27785f Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_calendar_select.png differ diff --git a/docs/docs/assets/images/concepts/ui_calendar_view.png b/docs/docs/assets/images/concepts/ui_calendar_view.png new file mode 100644 index 0000000000..53fa6da7e2 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_calendar_view.png differ diff --git a/docs/docs/assets/images/concepts/ui_dashboard.png b/docs/docs/assets/images/concepts/ui_dashboard.png new file mode 100644 index 0000000000..dc72b93cff Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_dashboard.png differ diff --git a/docs/docs/assets/images/concepts/ui_dashboard_edit.png b/docs/docs/assets/images/concepts/ui_dashboard_edit.png new file mode 100644 index 0000000000..b6fe3df8fa Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_dashboard_edit.png differ diff --git a/docs/docs/assets/images/concepts/ui_form_add_part.png b/docs/docs/assets/images/concepts/ui_form_add_part.png new file mode 100644 index 0000000000..af8daf9836 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_form_add_part.png differ diff --git a/docs/docs/assets/images/concepts/ui_form_edit_po.png b/docs/docs/assets/images/concepts/ui_form_edit_po.png new file mode 100644 index 0000000000..e5167a5d60 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_form_edit_po.png differ diff --git a/docs/docs/assets/images/concepts/ui_form_hold_po.png b/docs/docs/assets/images/concepts/ui_form_hold_po.png new file mode 100644 index 0000000000..bb5598ef55 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_form_hold_po.png differ diff --git a/docs/docs/assets/images/concepts/ui_global_search.png b/docs/docs/assets/images/concepts/ui_global_search.png new file mode 100644 index 0000000000..e67712f0f5 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_global_search.png differ diff --git a/docs/docs/assets/images/concepts/ui_global_search_view_all.png b/docs/docs/assets/images/concepts/ui_global_search_view_all.png new file mode 100644 index 0000000000..2ba1df8810 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_global_search_view_all.png differ diff --git a/docs/docs/assets/images/concepts/ui_main_menu.png b/docs/docs/assets/images/concepts/ui_main_menu.png new file mode 100644 index 0000000000..52c6b1e5d6 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_main_menu.png differ diff --git a/docs/docs/assets/images/concepts/ui_navigation_menu.png b/docs/docs/assets/images/concepts/ui_navigation_menu.png new file mode 100644 index 0000000000..d0d0fba863 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_navigation_menu.png differ diff --git a/docs/docs/assets/images/concepts/ui_navigation_tree.png b/docs/docs/assets/images/concepts/ui_navigation_tree.png new file mode 100644 index 0000000000..5d274452ab Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_navigation_tree.png differ diff --git a/docs/docs/assets/images/concepts/ui_notifications_menu.png b/docs/docs/assets/images/concepts/ui_notifications_menu.png new file mode 100644 index 0000000000..1c899c6822 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_notifications_menu.png differ diff --git a/docs/docs/assets/images/concepts/ui_panels.png b/docs/docs/assets/images/concepts/ui_panels.png new file mode 100644 index 0000000000..ea7352b3b7 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_panels.png differ diff --git a/docs/docs/assets/images/concepts/ui_parametric_select.png b/docs/docs/assets/images/concepts/ui_parametric_select.png new file mode 100644 index 0000000000..f2d338c46c Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_parametric_select.png differ diff --git a/docs/docs/assets/images/concepts/ui_parametric_view.png b/docs/docs/assets/images/concepts/ui_parametric_view.png new file mode 100644 index 0000000000..62d063e191 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_parametric_view.png differ diff --git a/docs/docs/assets/images/concepts/ui_spotlight.png b/docs/docs/assets/images/concepts/ui_spotlight.png new file mode 100644 index 0000000000..d45407201f Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_spotlight.png differ diff --git a/docs/docs/assets/images/concepts/ui_table.png b/docs/docs/assets/images/concepts/ui_table.png new file mode 100644 index 0000000000..9fe091b63f Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_table.png differ diff --git a/docs/docs/assets/images/concepts/ui_table_actions.png b/docs/docs/assets/images/concepts/ui_table_actions.png new file mode 100644 index 0000000000..07d59757b1 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_table_actions.png differ diff --git a/docs/docs/assets/images/concepts/ui_table_column_selection.png b/docs/docs/assets/images/concepts/ui_table_column_selection.png new file mode 100644 index 0000000000..19dc90279a Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_table_column_selection.png differ diff --git a/docs/docs/assets/images/concepts/ui_table_context_menu.png b/docs/docs/assets/images/concepts/ui_table_context_menu.png new file mode 100644 index 0000000000..937f748905 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_table_context_menu.png differ diff --git a/docs/docs/assets/images/concepts/ui_table_download.png b/docs/docs/assets/images/concepts/ui_table_download.png new file mode 100644 index 0000000000..7c02edaa22 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_table_download.png differ diff --git a/docs/docs/assets/images/concepts/ui_table_filter_button.png b/docs/docs/assets/images/concepts/ui_table_filter_button.png new file mode 100644 index 0000000000..1b8073ba12 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_table_filter_button.png differ diff --git a/docs/docs/assets/images/concepts/ui_table_filter_menu.png b/docs/docs/assets/images/concepts/ui_table_filter_menu.png new file mode 100644 index 0000000000..0f46c1f7ea Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_table_filter_menu.png differ diff --git a/docs/docs/assets/images/concepts/ui_table_row_actions.png b/docs/docs/assets/images/concepts/ui_table_row_actions.png new file mode 100644 index 0000000000..b12b9c92bb Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_table_row_actions.png differ diff --git a/docs/docs/assets/images/concepts/ui_table_row_selection.png b/docs/docs/assets/images/concepts/ui_table_row_selection.png new file mode 100644 index 0000000000..b62832c589 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_table_row_selection.png differ diff --git a/docs/docs/assets/images/concepts/ui_table_search.png b/docs/docs/assets/images/concepts/ui_table_search.png new file mode 100644 index 0000000000..233bcb3c7e Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_table_search.png differ diff --git a/docs/docs/assets/images/concepts/ui_table_sorting.png b/docs/docs/assets/images/concepts/ui_table_sorting.png new file mode 100644 index 0000000000..9ae097ddec Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_table_sorting.png differ diff --git a/docs/docs/assets/images/concepts/ui_user_menu.png b/docs/docs/assets/images/concepts/ui_user_menu.png new file mode 100644 index 0000000000..5966e85619 Binary files /dev/null and b/docs/docs/assets/images/concepts/ui_user_menu.png differ diff --git a/docs/docs/assets/images/concepts/unit_dimensionless.png b/docs/docs/assets/images/concepts/unit_dimensionless.png new file mode 100644 index 0000000000..68b8942178 Binary files /dev/null and b/docs/docs/assets/images/concepts/unit_dimensionless.png differ diff --git a/docs/docs/assets/images/part/part_stocktake_manual.png b/docs/docs/assets/images/part/part_stocktake_manual.png new file mode 100644 index 0000000000..5d6fa69683 Binary files /dev/null and b/docs/docs/assets/images/part/part_stocktake_manual.png differ diff --git a/docs/docs/assets/images/part/stocktake_report_dashboard.png b/docs/docs/assets/images/part/stocktake_report_dashboard.png new file mode 100644 index 0000000000..cc5ddb75ac Binary files /dev/null and b/docs/docs/assets/images/part/stocktake_report_dashboard.png differ diff --git a/docs/docs/assets/images/plugin/model_metadata_api.png b/docs/docs/assets/images/plugin/model_metadata_api.png deleted file mode 100644 index a62340bffa..0000000000 Binary files a/docs/docs/assets/images/plugin/model_metadata_api.png and /dev/null differ diff --git a/docs/docs/assets/images/stock/part_tracking_history.png b/docs/docs/assets/images/stock/part_tracking_history.png new file mode 100644 index 0000000000..cf31097ffe Binary files /dev/null and b/docs/docs/assets/images/stock/part_tracking_history.png differ diff --git a/docs/docs/assets/images/stock/stock_item_tracking_history.png b/docs/docs/assets/images/stock/stock_item_tracking_history.png new file mode 100644 index 0000000000..895fb61e04 Binary files /dev/null and b/docs/docs/assets/images/stock/stock_item_tracking_history.png differ diff --git a/docs/docs/concepts/units.md b/docs/docs/concepts/units.md index b46e61a745..ce71012455 100644 --- a/docs/docs/concepts/units.md +++ b/docs/docs/concepts/units.md @@ -72,6 +72,27 @@ Custom units can be defined to provide a new physical quantity, link existing un !!! tip "More Info" For further information, refer to the [pint documentation](https://pint.readthedocs.io/en/stable/advanced/defining.html) regarding custom unit definition +### Built-in Custom Units + +InvenTree provides the following built-in custom units: + +| Unit | Description | +| ---- | ----------- | +| `piece` | A single item, dimensionless | +| `each` | A single item, dimensionless | +| `dozen` | Twelve items, dimensionless | +| `hundred` | One hundred items, dimensionless | +| `thousand` | One thousand items, dimensionless | + ### Create Custom Units To view, edit and create custom units, locate the *Physical Units* tab in the [settings panel](../settings/global.md). + + +### Dimensionless Units + +It is possible to define custom dimensionless units. These units can be used to provide context to otherwise dimensionless quantities. + +To create a new dimensionless unit, you must enter the literal `1` as the definition of the unit: + +{{ image("concepts/unit_dimensionless.png", "Creating a dimensionless custom unit") }} diff --git a/docs/docs/concepts/user_interface.md b/docs/docs/concepts/user_interface.md new file mode 100644 index 0000000000..665b9fcf02 --- /dev/null +++ b/docs/docs/concepts/user_interface.md @@ -0,0 +1,301 @@ +--- +title: User Interface +--- + +## User Interface + +The InvenTree user interface is designed to be intuitive and user-friendly, providing easy access to the various features and functions of the system. The interface is organized into several key components, including navigation menus, settings, forms, tables, search functionality, and more. + +The interface is designed for large-format displays, and as such is explicitly *not* optimized for mobile devices. However, the interface is responsive and should work on a wide range of desktop screen sizes. + +## Navigation + +Navigation throughout the InvenTree interface is designed to be straightforward and efficient, allowing users to quickly access the various sections and features of the system. The navigation is organized into several key areas, including the main menu, navigation menu, and page panels. + +### Main Menu + +The main menu is located at the top of the interface and provides access to the primary sections of the system: + +{{ image("concepts/ui_main_menu.png", "Main Menu") }} + +From the main menu, users can access the following items: + +- [Navigation Menu](#navigation-menu) +- [Dashboard](#dashboard) +- [Global Search](#search) +- [Spotlight](#spotlight) +- [Barcode Scanning](#barcode-scanning) +- [Notifications](#notifications) +- [User Menu](#user-menu) + +As well as allowing navigation to the following main sections: + +- [Parts](../part/index.md) +- [Stock](../stock/index.md) +- [Manufacturing](../manufacturing/index.md) +- [Purchasing](../purchasing/index.md) +- [Sales](../sales/index.md) + +### Navigation Menu + +The global navigation menu is located on the left-hand side of the interface and provides access to the various sections of the system. + +{{ image("concepts/ui_navigation_menu.png", "Navigation Menu") }} + +The navigation menu is organized into several key areas, including: + +- **Navigation:** Provides access to the main sections of the system, including Parts, Stock, Manufacturing, Purchasing, and Sales. +- **Settings:** Quick access to user settings, system settings, and the admin interface. +- **Actions:** Provides quick access to commonly used actions +- **Documentation:** Links to the online documentation. +- **About:** InvenTree version and license information. + +### User Menu + +The user menu is located in the top-right corner of the interface and provides access to user-specific settings and actions. + +{{ image("concepts/ui_user_menu.png", "User Menu") }} + +The user menu provides access to the following items: + +- **User Settings:** Access to [user settings](../settings/user.md). +- **System Settings:** Access to [global settings](../settings/global.md) settings. *Note: Access to system settings may be restricted based on user permissions.* +- **Admin Interface:** Access to the [admin interface](../settings/admin.md) for data management. *Note: Access to the admin interface may be restricted based on user permissions.* +- **Change Color Mode:** Toggle between light and dark color modes. +- **About InvenTree:** View version and license information about InvenTree. +- **Logout:** Log out of the InvenTree system. + +### Page Panels + +Most detail pages views within InvenTree are organized into panels, which provide a structured layout for displaying information and actions related to the current page. + +Panels are arranged in a vertical stack on the left side of the page, with the main content area on the right. Each panel contains related information and actions, allowing users to easily navigate and interact with the content. + +{{ image("concepts/ui_panels.png", "Page Panels") }} + +#### Collapse Panels + +The panel sidebar can be collapsed to provide more space for the main content area. To collapse or expand the panel sidebar, click the collapse icon located at the bottom of the sidebar. To expand the sidebar again, click the expand icon that appears when the sidebar is collapsed. + +### Breadcrumbs + +On some pages, a breadcrumb navigation trail is provided at the top of the page, just below the main menu. Breadcrumbs provide a visual representation of the user's current location within the system and allow for easy navigation back to previous pages. + +{{ image("concepts/ui_breadcrumbs.png", "Breadcrumb Navigation") }} + +### Navigation Tree + +On some pages, a navigation tree is provided on the left-hand side of the page, next to the breadcrumbs. The navigation tree provides a hierarchical view of the current section of the system, allowing users to quickly navigate to related pages and sections. + +Click on the navigation tree icon to expand the tree and view the available navigation options: + +{{ image("concepts/ui_navigation_tree.png", "Navigation Tree") }} + +## Dashboard + +The dashboard provides a customizable landing page for users when they log in to the system. The dashboard can be configured to display a variety of widgets and information panels, providing users with quick access to important data and actions. + +{{ image("concepts/ui_dashboard.png", "Dashboard") }} + +### Editing Layout + +To edit the layout (add, remove, or rearrange widgets) of the dashboard, open the dashboard context menu (located at the top-right corner of the dashboard) and view the available options: + +{{ image("concepts/ui_dashboard_edit.png", "Dashboard Context Menu") }} + +### Custom Widgets + +In addition to the set of built-in widgets provided by InvenTree, custom dashboard widgets can be implemented using [plugins](../plugins/mixins/ui.md#dashboard-items). This allows users to create personalized dashboard experiences tailored to their specific needs and workflows. + +## Table Views + +Information throughout the InvenTree interface is often presented in tabular format, allowing users to easily view and interact with large datasets. Tables are designed to be flexible and customizable, providing a range of features to enhance the user experience. + +{{ image("concepts/ui_table.png", "Table View") }} + +### Pagination + +The pagination controls are located at the bottom of the table, allowing users to navigate through large datasets by moving between pages. Users can also adjust the number of rows displayed per page using the pagination settings. + +### Row Selection + +For tables where data selection is supported, a checkbox is provided at the left-hand side of each row, allowing users to select one or more rows for further actions. A master checkbox is also provided in the table header, allowing users to quickly select or deselect all rows in the table. + +!!! info "Pagination and Row Selection" + When using the "master select" checkbox to select all rows, only the rows on the current page will be selected. + +{{ image("concepts/ui_table_row_selection.png", "Row Selection") }} + +### Table Actions + +A particular table view may have a set of actions associated with it, which are typically located at the top-left corner of the table. These actions may include options for adding new entries, or performing bulk actions on [selected rows](#row-selection). + +{{ image("concepts/ui_table_actions.png", "Table Actions") }} + +### Searching + +Some tables support searching, allowing users to quickly find specific entries within the dataset. The search bar is located at the top-right corner of the table view: + +{{ image("concepts/ui_table_search.png", "Table Search") }} + +### Column Selection + +Some tables allow the user to toggle the visibility of certain columns to, enabling a more customized view of the data. + +Column selection is accessed via the "Select Columns" menu, located to the top-right of the table view: + +{{ image("concepts/ui_table_column_selection.png", "Column Selection") }} + +### Filtering + +The dataset (which is fetched dynamically from the server via an API request) can be filtered by providing query parameters to the API endpoint. + +Select the "table filters" button to open the filter selection menu + +{{ image("concepts/ui_table_filter_button.png", "Table Filter Button") }} + +{{ image("concepts/ui_table_filter_menu.png", "Table Filter Menu") }} + +Table filters are saved across browser sessions, allowing users to maintain their preferred filter settings when returning to the particular table view. + +### Data Sorting + +Some table columns support data sorting, allowing the dataset to be sorted in ascending or descending order based on the values in that column. To sort a column, click on the column header. Clicking the column header again will toggle the sort order between ascending and descending. The current sort order is indicated by an arrow icon in the column header. + +{{ image("concepts/ui_table_sorting.png", "Data Sorting") }} + +### Data Export + +Some tables support downloading of the dataset in various formats (e.g. CSV, Excel, PDF). If data download is available for a given table, the "export data" button will be located at the top-right corner of the table view. + +This opens the "Export Data" form, which allows the user to select the desired file format for download, as well as any additional options related to the data export. + +{{ image("concepts/ui_table_download.png", "Data Download") }} + +### Row Actions + +In some tables, there may be specific actions associated with individual rows, allowing users to perform actions directly on a particular entry in the dataset. Row actions are typically accessed via an "actions" menu located at the right-hand side of each row. + +{{ image("concepts/ui_table_row_actions.png", "Row Actions") }} + +### Right-Click Context Menu + +For rows that support row actions, a right-click context menu is also available, providing quick access to the same set of actions without needing to click on the "actions" menu. + +{{ image("concepts/ui_table_context_menu.png", "Right-Click Context Menu") }} + +### Row Navigation + +For tables which reference other objects within the system, clicking on a row will navigate to the detail page for that particular entry. For example, clicking on a row in the "Part" table will navigate to the detail page for that specific part. + +## Calendar Views + +Some [table views](#table-views) can be switched to a calendar view, which provides a visual representation of data based on date fields. The calendar view allows users to easily see and interact with data that is organized by date, such as scheduled tasks, events, or deadlines. + +To switch to the "calendar view" (for a table which supports it), click on the "calendar view" button located above and to the right of the table view: + +{{ image("concepts/ui_calendar_select.png", "Calendar View Button") }} + +This will display the data in a calendar format: + +{{ image("concepts/ui_calendar_view.png", "Calendar View") }} + +## Parametric Views + +Some [table views](#table-views) can be switched to a parametric view, which provides a visual representation of data based on specific parameters or attributes. The parametric view allows users to easily see and interact with data that is organized by certain characteristics, such as categories, types, or other relevant attributes. + +To switch to the "parametric view" (for a table which supports it), click on the "parametric view" button located above and to the right of the table view: + +{{ image("concepts/ui_parametric_select.png", "Parametric View Button") }} + +This will display the data in a parametric format: + +{{ image("concepts/ui_parametric_view.png", "Parametric View") }} + +## Forms + +Data entry and editing within InvenTree is typically performed through the use of forms, which provide a structured interface for inputting and modifying data. Forms are designed to be user-friendly and efficient, allowing users to quickly enter and update information within the system. + +Forms are typically displayed as a modal dialog, separated into multiple sections and fields. + +### Data Creation + +Example: Creating a new part via the "Add Part" form: + +{{ image("concepts/ui_form_add_part.png", "Add Part Button") }} + +### Data Editing + +Example: Editing an existing purchase order via the "Edit Purchase Order" form: + +{{ image("concepts/ui_form_edit_po.png", "Edit Purchase Order") }} + +### Confirm Actions + +Many actions within InvenTree require user confirmation before they can be executed. This is typically implemented through the use of confirmation dialogs, which prompt the user to confirm their intention before proceeding with the action. + +{{ image("concepts/ui_form_hold_po.png", "Confirmation Dialog") }} + +## Global Search + +Accessible from the [main menu](#main-menu), the global search functionality allows users to quickly find specific items or information within the InvenTree system. The search icon is located at the top of the interface and provides a convenient way to search across all sections of the system. + +Clicking on the "search" icon (in the menu bar) opens the search menu, which allows users to enter search queries and view results from across the system. + +{{ image("concepts/ui_global_search.png", "Global Search") }} + +Search results are organized by category (e.g. Parts, Stock, Manufacturing, etc.) and provide quick access to the relevant pages for each search result. + +### Detail View + +To navigate to the detail page for a particular search result, simply click on the desired result from the search results list. This will take you directly to the relevant page within the InvenTree system, allowing you to view and interact with the specific item or information you were searching for. + +### Full Results + +The "global search" menu provides a limited set of search results for each category, typically showing the most relevant or recent results. To view the full set of search results for a particular category, click on the "View all results" button located at the top-left of the search results list for that category: + +{{ image("concepts/ui_global_search_view_all.png", "View Full Search Results") }} + +### Collapse Result Groups + +To collapse a particular category of search results in the global search menu, click on the "collapse" icon located at the top-right corner of the search results list for that category. This will hide the search results for that category, allowing you to focus on other categories or search results. + +### Remove Result Groups + +To remove a particular category of search results from the global search menu, click on the "remove" icon located at the top-right corner of the search results list for that category. + +## Spotlight + +The user interface features a "spotlight" search functionality, which provides a quick and efficient way to access common actions or navigate to specific pages within the InvenTree system. The spotlight search is designed to enhance user productivity by allowing users to quickly find and execute actions without needing to navigate through menus or remember specific page locations. + +{{ image("concepts/ui_spotlight.png", "Spotlight Search") }} + +### Open Spotlight + +To open the "spotlight" search, click on the "spotlight" icon located in the main menu at the top of the interface. This will open the spotlight search menu, allowing you to enter search queries and view available actions. + +Alternatively, the spotlight search can be opened using the keyboard shortcut `Ctrl + K` (or `Cmd + K` on macOS), providing a quick and convenient way to access the spotlight functionality without needing to click on the menu icon. + +### Disable Spotlight + +Users may opt to disable the spotlight search functionality if they do not find it useful or prefer not to use it. To disable the spotlight search, navigate to your [user settings](../settings/user.md) and locate the option to disable the spotlight feature. Once disabled, the spotlight search will no longer be accessible from the main menu or via keyboard shortcuts. + +## Barcode Scanning + +## Notifications + +## Customization + +## User Permissions + +Many aspects of the user interface are controlled by user permissions, which determine what actions and features are available to each user based on their assigned roles and permissions within the system. This allows for a highly customizable user experience, where different users can have access to different features and functionality based on their specific needs and responsibilities within the organization. + +If a user does not have permission to access a particular feature or section of the system, that feature will be hidden from their view in the user interface. This helps to ensure that users only see the features and information that are relevant to their role, reducing clutter and improving usability. + +## Language Support + +The InvenTree user interface supports multiple languages, allowing users to interact with the system in their preferred language. + +The default system language can be configured by the system administrator in the [server configuration options](../start/config.md#basic-options). + +Additionally, users can select their preferred language in their [user settings](../settings/user.md), allowing them to override the system default language with their own choice. This provides a personalized experience for each user, ensuring that they can interact with the system in the language they are most comfortable with. diff --git a/docs/docs/develop/contributing.md b/docs/docs/develop/contributing.md index 479e6813c6..7918bd9572 100644 --- a/docs/docs/develop/contributing.md +++ b/docs/docs/develop/contributing.md @@ -62,6 +62,7 @@ InvenTree roughly follow the [GitLab flow](https://about.gitlab.com/topics/versi There are nominally 5 active branches: - `master` - The main development branch - `stable` - The latest stable release +- `next-breaking` - The next breaking release (e.g. 2.0, 3.0) with all deprecated features removed - `l10n` - Translation branch: Source to Crowdin - `l10_crowdin` - Translation branch: Source from Crowdin - `y.y.x` - Release branch for the currently supported version (e.g. `0.5.x`) @@ -115,10 +116,41 @@ The translation process is as follows: 4. Translations made in Crowdin are automatically pushed back to the `l10_crowdin` branch by Crowdin once they are approved 5. The `l10_crowdin` branch is merged back into `master` by a maintainer periodically +### `next-breaking` Branch + +Used for easier testing of plugins and integrations against the next major release. It is branched from master when a major release is cut and updated on minor release. The branch is not build into docker images or packages and not meant to be run in production. + + +All deprecated features (REST or python API endpoints mostly) are removed from this branch after each minor release. This allows plugin developers to test their plugins against the next major release early and identify any extensive changes before the major release is cut. + +Only breaking changes are added to this branch. No new features should be added at any point to this branch, only breaking removals / changes. + +Before a major release is cut (1.12.5 > 2.0.0), this branch is merged back into `master`. + + +During the life-time of a major release line (1.0.1, 1.1.x, 1.2.x, 1.3.x, ..., 1.12.5) all deprecation removals are collected in this branch. +On every minor release (1.11.8 > 1.12.0) the `master` is rebased onto the `next-breaking` branch. + +Every time a change with depreations is merged into `master`, a follow up PR that removes the newly-introduced deprecation is created targeting the `next-breaking` branch. After the next minor is released and `master` was rebased into `next-breaking` all the PRs from the previous minor release line can be merged into the `next-breaking` branch. Deprecation removals for the - possibly - long running major release line can be collected this way without having a large number of deprecation removals PRs open. + ## API versioning The [API version]({{ sourcefile("src/backend/InvenTree/InvenTree/api_version.py") }}) needs to be bumped every time when the API is changed. +### Understanding API shape + +While the default Open API schema generation provides a good overview of the API endpoints, it does not provide insights into the shape of the underlying API (serializer) code. + +The default schema generation cli command `invoke dev.schema` / endpoint `/api/schema/` can be enhanced by setting the schema generation level in the config file or via the [debugging environment variable or config value](../start/config.md#debugging-and-logging-options) `INVENTREE_SCHEMA_LEVEL`. + +At level 1 only simple attributes describing the underlying Django Rest Framework API view of a endpoint are added under the `x-inventree-meta` key. + +At level 2 details about the inheritance of the view (key `x-inventree-components`) and model (key `x-inventree-model`) are added. This allows to trace back the view to the underlying serializer and model and ensure naming of endpoints is consistent with the data model. + +!!! note "For experiments only" + There are no CI or system checks to use these additional attributes yet. This is an experimental feature to help developers understand the API shape and how it changes better. + + ## Environment ### Software Versions diff --git a/docs/docs/hooks.py b/docs/docs/hooks.py index 52e5998e51..2cd00cd586 100644 --- a/docs/docs/hooks.py +++ b/docs/docs/hooks.py @@ -304,6 +304,6 @@ def on_post_build(*args, **kwargs): if missing: raise NotImplementedError( 'Missing Settings:\n' - + f"There are {len(missing)} missing settings in the '{group}' group:\n" + + f"There are {len(missing)} missing settings in the '{group}' group:\n- " + '\n- '.join(missing) ) diff --git a/docs/docs/manufacturing/allocate.md b/docs/docs/manufacturing/allocate.md index 9df1ded15e..4594e85839 100644 --- a/docs/docs/manufacturing/allocate.md +++ b/docs/docs/manufacturing/allocate.md @@ -108,9 +108,9 @@ Set this option to *True* to allow substitute parts (as specified by the BOM) to Allocation of tracked stock items is slightly more complex. Instead of being allocated against the *Build Order*, tracked stock items must be allocated against an individual *Build Output*. -Allocating tracked stock items to particular build outputs is performed in the *Pending Items* tab: +Allocating tracked stock items to particular build outputs is performed in the *Incomplete Outputs* tab: -In the *Pending Items* tab, we can see that each build output has a stock allocation requirement which must be met before that build output can be completed: +In the *Incomplete Outputs* tab, we can see that each build output has a stock allocation requirement which must be met before that build output can be completed: {{ image("build/build_allocate_tracked_parts.png", "Allocate tracked parts") }} @@ -126,6 +126,12 @@ Here we can see that the incomplete build outputs (serial numbers 15 and 14) now !!! note "Example: Tracked Stock" Let's say we have 5 units of "Tracked Part" in stock - with 1 unit allocated to the build output. Once we complete the build output, there will be 4 units of "Tracked Part" in stock, with 1 unit being marked as "installed" within the assembled part +### Automatic Stock Allocation + +Tracked stock items can be automatically allocated to build outputs using the *Auto Allocate* button in the *Incomplete Outputs* tab. This will attempt to allocate tracked stock items to build outputs based on matching serial numbers. + +For each build output, the auto-allocation routine will attempt to find a matching component item with the same serial number. If such a stock item is found, and it is available for use, it will be allocated to that build output. + ## Consuming Stock Allocating stock items to a build order does not immediately remove them from stock. Instead, the stock items are marked as "allocated" against the build order, and are only removed from stock when they are "consumed" by the build order. diff --git a/docs/docs/part/stocktake.md b/docs/docs/part/stocktake.md index b986c6b01f..a226587b91 100644 --- a/docs/docs/part/stocktake.md +++ b/docs/docs/part/stocktake.md @@ -1,10 +1,10 @@ --- -title: Part Stock History +title: Part Stocktake --- -## Part Stock History +## Part Stocktake -InvenTree can track the historical stock levels of parts, allowing users to view past stocktake data and generate reports based on this information. +InvenTree can record the historical stock levels of parts, allowing users to view past stocktake data and generate reports based on this information. A *Stocktake* refers to a "snapshot" of stock levels for a particular part, at a specific point in time. Stocktake information is used for tracking a historical record of the quantity and value of part stock. @@ -14,18 +14,18 @@ In particular, an individual *Stocktake* record tracks the following information - A reference to the [part](./index.md) which is being counted - The total number of individual [stock items](../stock/index.md) available - The total stock quantity of available stock -- The total cost of stock on hand +- The total value range of stock on hand ### Stock Items vs Stock Quantity *Stock Items* refers to the number of stock entries (e.g. *"3 reels of capacitors"*). *Stock Quantity* refers to the total cumulative stock count (e.g. *"4,560 total capacitors"*). -### Cost of Stock on Hand +### Value Range of Stock on Hand -The total cost of stock on hand is calculated based on the provided pricing data. For stock items which have a recorded *cost* (e.g. *purchase price*), this value is used. If no direct pricing information is available for a particular stock item, the price range of the part itself is used. +The total value range of stock on hand is calculated based on the provided pricing data. For stock items which have a recorded *cost* (e.g. *purchase price*), this value is used. If no direct pricing information is available for a particular stock item, the price range of the part itself is used. -!!! info "Cost Range" - Cost data is provided as a *range* of values, accounting for any variability in available pricing data. +!!! info "Value Range" + Value data is provided as a *range* of values, accounting for any variability in available pricing data. ### Display Historical Stock Data @@ -39,9 +39,45 @@ If this tab is not visible, ensure that the *Enable Stock History* [user setting {{ image("part/part_stocktake_enable_tab.png", "Enable stock history tab") }} -## Stock History Settings +### Stocktake Entry Generation -There are a number of configuration options available in the [settings view](../settings/global.md): +By default, stocktake entries are generated automatically at regular intervals (see [settings](#stock-history-settings) below). However, users can generate a stocktake entry on demand, using the *Generate Stocktake Entry* button in the *Stock History* tab: + +{{ image("part/part_stocktake_manual.png", "Generate stocktake entry") }} + +This will schedule the generation of a new stocktake entry for the selected part, and the new entry will be visible in the stock history data once the generation process is complete. + +## Stocktake Reports + +In addition to the part stocktake entries, which are periodically generated for all parts in the database, users can also generate a stocktake *report*, against a particular set of input parameters. Instead of generating a stocktake entry for a single part, this process generates a report which contains stocktake data for all parts which match the specified parameters. + +The generated report (once completed) will be available for download as a CSV file, and will contain the stocktake entry data for all parts which match the specified parameters. + +### Report Options + +The following parameters can be specified when generating a stocktake report: + +| Parameter | Description | +| --------- | ----------- | +| Part | If provided, the report will only include stocktake data for the specified part, including and variant parts. If left blank, the report will include data for all parts in the database. | +| Category | If provided, the report will only include stocktake data for parts which belong to the specified category, including any sub-categories. If left blank, the report will include data for all parts in the database. | +| Location | If provided, the report will only include stocktake data for parts which have stock items located at the specified location, including any sub-locations. If left blank, the report will include data for all parts in the database. | + +### Generating a Stocktake Report + +The following methods for generating a stocktake report via the user interface are available: + +#### Dashboard Widget + +A dashboard widget is available for generating stocktake reports, which can be added to any dashboard view: + +{{ image("part/stocktake_report_dashboard.png", "Stocktake dashboard widget") }} + +Here, the user can specify the report parameters, and then click the *Generate Report* button to generate a new stocktake report based on the specified parameters. + +## Stocktake Settings + +There are a number of configuration options available for controlling the behavior of part stocktake functionality in the [system settings view](../settings/global.md): | Name | Description | Default | Units | | ---- | ----------- | ------- | ----- | @@ -51,9 +87,9 @@ There are a number of configuration options available in the [settings view](../ {{ globalsetting("STOCKTAKE_DELETE_OLD_ENTRIES")}} {{ globalsetting("STOCKTAKE_DELETE_DAYS") }} -{{ image("part/part_stocktake_settings.png", "Stock history settings") }} +{{ image("part/part_stocktake_settings.png", "Stocktake settings") }} -### Enable Stock History +### Enable Stocktake Enable or disable stocktake functionality. Note that by default, stocktake functionality is disabled. @@ -61,10 +97,10 @@ Enable or disable stocktake functionality. Note that by default, stocktake funct Configure the number of days between generation of [automatic stocktake reports](#automatic-stocktake). If this value is set to zero, automatic stocktake reports will not be generated. -### Delete Old Stock History Entries +### Delete Old Stocktake Entries -If enabled, stock history entries older than the specified number of days will be automatically deleted from the database. +If enabled, stocktake entries older than the specified number of days will be automatically deleted from the database. -### Stock History Deletion Interval +### Stocktake Deletion Interval -Configure how many days historical stock records are retained in the database. +Configure how many days historical stocktake records are retained in the database. diff --git a/docs/docs/plugins/builtin/inventree_barcode.md b/docs/docs/plugins/builtin/inventree_barcode.md index ee7ba38b3d..2c8e10c97a 100644 --- a/docs/docs/plugins/builtin/inventree_barcode.md +++ b/docs/docs/plugins/builtin/inventree_barcode.md @@ -14,8 +14,8 @@ This plugin is a *mandatory* plugin, and is always enabled. This plugin provides selection of the barcode format to use when generating labels. The format can be selected from: -- **JSON Barcodes**: This format is used for generating barcodes in JSON format, which is a 'human readable' format. - **Short Barcodes**: This format is used for generating barcodes in a short format, which is a more compact representation of the barcode data. +- **JSON Barcodes**: This format is used for generating barcodes in JSON format, which is a more verbose format. This format is not recommended for use in production environments, as it can be more difficult to parse and may not be supported by all barcode scanners. It is supported for legacy purposes, and is not recommended for use in new deployments. Additionally, if the "Short Barcodes" format is selected, the user can specify the prefix used for the barcode. This prefix is used to identify the barcode format, and can be set to any value. The default value is `INV-` - although can be changed. diff --git a/docs/docs/plugins/builtin/inventree_exporter.md b/docs/docs/plugins/builtin/inventree_exporter.md index 661e644cb8..a6d6aedc94 100644 --- a/docs/docs/plugins/builtin/inventree_exporter.md +++ b/docs/docs/plugins/builtin/inventree_exporter.md @@ -18,9 +18,9 @@ This plugin has no configurable settings. ## Usage -To export table data using this plugin, first click the *Download Data* button in the table toolbar: +To export table data using this plugin, first click the *Export Data* button in the table toolbar: -{{ image("download_data.png", base="plugin/builtin", title="Download Data") }} +{{ image("download_data.png", base="plugin/builtin", title="Export Data") }} Then, select the *InvenTree Exporter* plugin from the list of available plugins: diff --git a/docs/docs/plugins/install.md b/docs/docs/plugins/install.md index eedc97ca4a..3d18d58850 100644 --- a/docs/docs/plugins/install.md +++ b/docs/docs/plugins/install.md @@ -65,9 +65,7 @@ Admin users can install plugins directly from the web interface, via the "Plugin {{ image("plugin/plugin_install_web.png", "Install plugin via web interface") }} -Enter the package name into the form as shown below. You can add a path and a version. Leave -the version field empty for the latest version. In case the package is on pypi the path can -be omitted. Pip will find it automatically. +Enter the package name into the form as shown below. You can add a path and a version. Leave the version field empty for the latest version. In case the package is on pypi the path can be omitted. Pip will find it automatically. {{ image("plugin/plugin_install_git.png", "Install plugin from git") }} diff --git a/docs/docs/plugins/metadata.md b/docs/docs/plugins/metadata.md index 605436b4c9..762deb9c6e 100644 --- a/docs/docs/plugins/metadata.md +++ b/docs/docs/plugins/metadata.md @@ -42,12 +42,7 @@ print(part.metadata) ### API Access -For models which provide this metadata field, access is also provided via the API. Append `/metadata/` to the detail endpoint for a particular model instance to access. - -For example: - -{{ image("plugin/model_metadata_api.png", "Access model metadata via API", maxheight="400px") }} - +For models which provide this metadata field, access is also provided via the API. Use the generic `/metadata///` endpoint to retrieve or update metadata information. #### PUT vs PATCH diff --git a/docs/docs/settings/error_codes.md b/docs/docs/settings/error_codes.md index 1de6491a18..59874a9402 100644 --- a/docs/docs/settings/error_codes.md +++ b/docs/docs/settings/error_codes.md @@ -84,23 +84,27 @@ This is a security measure to prevent plugins from changing the core functionali An error occurred when discovering or initializing a machine type from a plugin. This likely indicates a faulty or incompatible plugin. #### INVE-E13 - **Error reading InvenTree configuration file** An error occurred while reading the InvenTree configuration file. This might be caused by a syntax error or invalid value in the configuration file. #### INVE-E14 - **Could not import Django** Django is not installed in the current Python environment. This means that the InvenTree backend is not running within the correct [python virtual environment](../start/index.md#virtual-environment) or that the required Python packages were not installed correctly. #### INVE-E15 - **Python version not supported** This error occurs attempting to run InvenTree on a version of Python which is older than the minimum required version. We [require Python {{ config.extra.min_python_version }} or newer](../start/index.md#python-requirements) +#### INVE-E16 +**Restore was stopped due to critical issues with backup environment - Backend** + +A potentially critical mismatch between the backup environment and the current restore environment was detected during the restore process. The restore was stopped to prevent potential data loss or corruption. Check the logs for more information about the detected issues. + +While using [invoke](../start/invoke.md), this can be overridden with the `--restore-allow-newer-version` flag. + ### INVE-W (InvenTree Warning) Warnings - These are non-critical errors which should be addressed when possible. @@ -192,6 +196,21 @@ Therefore the registration user interface elements will not be shown. To enable registration, the email settings must be configured correctly. See [email configuration](../start/config.md#email-settings). +#### INVE-W12 +**Signup attempt blocked because registration is disabled - Backend** + +A user attempted to sign up but registration is currently disabled via the system settings. This is to prevent unauthorized or unwanted user registrations. + +To enable registration, adjust the relevant settings (for regular or SSO registration) to allow user signups. + +#### INVE-W13 +**Current environment inconsistent with backup environment - Backend** + +The environment in which the backup was taken does not match the current environment. This might lead to issues with restoring the backup, as the backup might contain data that is not compatible with the current environment. Plugins for example might be missing or are present in a different version - this can lead to issues with restoring the backup. + +This warning will not prevent you from restoring the backup but it is recommended to ensure the mentioned issues are resolved before restoring the backup to prevent issues with the restored instance. + + ### INVE-I (InvenTree Information) Information — These are not errors but information messages. They might point out potential issues or just provide information. @@ -208,5 +227,9 @@ An issue was detected with the application of a filtering serializer or decorato This warning should only be raised during development and not in production, if you recently installed a plugin you might want to contact the plugin author. +#### INVE-I3 +**Backup and restore information - Backend** +Information about the metadata of a backup being restored or the environment in which a backup is being restored to. This information can be helpful to understand the backup and restore process and to identify potential issues with the backup or the restore process. + ### INVE-M (InvenTree Miscellaneous) Miscellaneous — These are information messages that might be used to mark debug information or other messages helpful for the InvenTree team to understand behaviour. diff --git a/docs/docs/settings/global.md b/docs/docs/settings/global.md index d443084077..66dddda681 100644 --- a/docs/docs/settings/global.md +++ b/docs/docs/settings/global.md @@ -170,6 +170,7 @@ Configuration of label printing: {{ globalsetting("PART_SALABLE") }} {{ globalsetting("PART_VIRTUAL") }} {{ globalsetting("PART_COPY_BOM") }} +{{ globalsetting("PART_BOM_ALLOW_ZERO_QUANTITY") }} {{ globalsetting("PART_COPY_PARAMETERS") }} {{ globalsetting("PART_COPY_TESTS") }} {{ globalsetting("PART_CATEGORY_PARAMETERS") }} diff --git a/docs/docs/settings/import.md b/docs/docs/settings/import.md index c712216217..2fbdb7e37d 100644 --- a/docs/docs/settings/import.md +++ b/docs/docs/settings/import.md @@ -19,6 +19,22 @@ External data can be imported via the admin interface, allowing for rapid integr To import data, the user must have the appropriate permissions. The user must be a *staff* user, and have the `change` permission for the model in question. +### Mapping to Existing Data + +Many data models in InvenTree have relationships to other models. When importing data, the user must ensure that the related data is correctly mapped to existing records in the database. For example, when importing a list of parts, the user must ensure that the *part category* data has already been imported, and that the part category field in the imported file is correctly mapped to the existing part category records in the database. + +!!! warning "Multi Level Import" + Multi-level imports are explicitly not supported. Only one model can be imported at a time, and the user must ensure that any related data is imported beforehand. + +### Primary Key Fields + +The default field used to map to existing data (i.e. related models which have already been imported into the database) is using the `ID` (primary key) field. Thus, it is important to ensure that the imported data file contains the correct `ID` values for any related data, otherwise the import process will fail to correctly link the imported data to existing records in the database. + +Some models allow for mapping based on other "natural key" fields (e.g. the `reference` field for orders, or the `name` field for part categories). In such cases, the user must ensure that the correct field is mapped to the relevant column in the imported data file. + +!!! warning "Unique Identifiers" + If a unique identifier cannot be determined for any related field, the user must manually map the relevant field to the correct existing record in the database, during the import process. + ## Import Session Importing data is a multi-step process, which is managed via an *import session*. An import session is created when the user initiates a data import, and is used to track the progress of the data import process. @@ -33,6 +49,20 @@ Import sessions can be managed from the [Admin Center](./admin.md#admin-center) Depending on the type of data being imported, an import session can be created from an appropriate page context in the user interface. In such cases, the import session will be automatically linked to the relevant data type being imported. +### Starting an Import Session + +An import session can be initiated from a number of different contexts within the user interface: + +### Admin Center + +Staff users can create an import session from within the [Admin Center](./admin.md#admin-center). This is a general-purpose import session, and the user will be required to select the type of data to import. + +Users can quickly navigate to the data import managemement page from the [spotlight search](../concepts/user_interface.md#spotlight), by searching for "import" and selecting the "Import data" option. + +### Data Tables + +Some data tables allow the user to create an import session directly from the table view. In such cases, the import session will be automatically linked to the relevant data type being imported, and additional [context information](#context-sensitive-importing) will be automatically provided. + ## Import Process The following steps outline the process of importing data into InvenTree: diff --git a/docs/docs/start/accounts.md b/docs/docs/start/accounts.md index 35c53f6453..262a75c221 100644 --- a/docs/docs/start/accounts.md +++ b/docs/docs/start/accounts.md @@ -26,7 +26,7 @@ invoke superuser Or, if you are running InvenTree in a Docker container: ```bash -docker exec -rm -it inventree-server invoke superuser +docker exec -it inventree-server invoke superuser ``` ### User Management diff --git a/docs/docs/start/backup.md b/docs/docs/start/backup.md index 4861b7e77f..e96cc0088a 100644 --- a/docs/docs/start/backup.md +++ b/docs/docs/start/backup.md @@ -29,6 +29,7 @@ The following configuration options are available for backup: | INVENTREE_BACKUP_DATE_FORMAT | backup_date_format | Date format string used to format timestamps in backup filenames. | `%Y-%m-%d-%H%M%S` | | INVENTREE_BACKUP_DATABASE_FILENAME_TEMPLATE | backup_database_filename_template | Template string used to generate database backup filenames. | `InvenTree-db-{datetime}.{extension}` | | INVENTREE_BACKUP_MEDIA_FILENAME_TEMPLATE | backup_media_filename_template | Template string used to generate media backup filenames. | `InvenTree-media-{datetime}.{extension}` | +| INVENTREE_BACKUP_RESTORE_ALLOW_NEWER_VERSION | backup_restore_allow_newer_version | If True, allows restoring a backup created with a newer version of InvenTree. This is dangerous as it can lead to hard-to-debug data loss. | False | ### Storage Backend diff --git a/docs/docs/start/config.md b/docs/docs/start/config.md index c739ad2a97..09f3c068bd 100644 --- a/docs/docs/start/config.md +++ b/docs/docs/start/config.md @@ -100,6 +100,7 @@ The following debugging / logging options are available: | INVENTREE_JSON_LOG | json_log | log as json | False | | INVENTREE_WRITE_LOG | write_log | Enable writing of log messages to file at config base | False | | INVENTREE_CONSOLE_LOG | console_log | Enable logging to console | True | +| INVENTREE_SCHEMA_LEVEL | schema.level | Set level of added schema extensions detail (0-3) 0 = including no additional detail | 0 | ### Debug Mode @@ -274,7 +275,7 @@ If running with a PostgreSQL database backend, the following additional options | INVENTREE_DB_TIMEOUT | database.timeout | Database connection timeout (s) | 2 | | INVENTREE_DB_TCP_KEEPALIVES | database.tcp_keepalives | TCP keepalive | 1 | | INVENTREE_DB_TCP_KEEPALIVES_IDLE | database.tcp_keepalives_idle | Idle TCP keepalive | 1 | -| INVENTREE_DB_TCP_KEEPALIVES_INTERNAL | database.tcp_keepalives_internal | Internal TCP keepalive | 1| +| INVENTREE_DB_TCP_KEEPALIVES_INTERVAL | database.tcp_keepalives_interval | TCP keepalive interval | 1| | INVENTREE_DB_TCP_KEEPALIVES_COUNT | database.tcp_keepalives_count | TCP keepalive count | 5 | | INVENTREE_DB_ISOLATION_SERIALIZABLE | database.serializable | Database isolation level configured to "serializable" | False | @@ -286,6 +287,18 @@ If running with a MySQL database backend, the following additional options are a | --- | --- | --- | --- | | INVENTREE_DB_ISOLATION_SERIALIZABLE | database.serializable | Database isolation level configured to "serializable" | False | +### SQLite Settings + +!!! warning "SQLite Performance" + SQLite is not recommended for production use, and should only be used for testing or development purposes. If you are using SQLite in production, you may want to adjust the following settings to improve performance. + +If running with a SQLite database backend, the following additional options are available: + +| Environment Variable | Configuration File | Description | Default | +| --- | --- | --- | --- | +| INVENTREE_DB_TIMEOUT | database.timeout | Database connection timeout (s) | 10 | +| INVENTREE_DB_WAL_MODE | database.wal_mode | Enable Write-Ahead Logging (WAL) mode for SQLite databases | True | + ## Caching InvenTree can be configured to use [redis](https://redis.io) as a global cache backend. @@ -333,8 +346,8 @@ The following email settings are available: | INVENTREE_EMAIL_PORT | email.port | Email server port | 25 | | INVENTREE_EMAIL_USERNAME | email.username | Email account username | *Not specified* | | INVENTREE_EMAIL_PASSWORD | email.password | Email account password | *Not specified* | -| INVENTREE_EMAIL_TLS | email.tls | Enable TLS support | False | -| INVENTREE_EMAIL_SSL | email.ssl | Enable SSL support | False | +| INVENTREE_EMAIL_TLS | email.tls | Enable STARTTLS support (commonly port 567) | False | +| INVENTREE_EMAIL_SSL | email.ssl | Enable legacy SSL/TLS support (commonly port 465) | False | | INVENTREE_EMAIL_SENDER | email.sender | Sending email address | *Not specified* | | INVENTREE_EMAIL_PREFIX | email.prefix | Prefix for subject text | [InvenTree] | @@ -400,14 +413,10 @@ It is also possible to use alternative storage backends for static and media fil | Environment Variable | Configuration File | Description | Default | | --- | --- | --- | --- | | INVENTREE_S3_ACCESS_KEY | storage.s3.access_key | Access key | *Not specified* | -| INVENTREE_S3_SECRET_KEY | storage.s3.secret_key | Secret key | -| *Not specified* | -| INVENTREE_S3_BUCKET_NAME | storage.s3.bucket_name | Bucket name, required by most providers | -| *Not specified* | -| INVENTREE_S3_REGION_NAME | storage.s3.region_name | S3 region name | -| *Not specified* | -| INVENTREE_S3_ENDPOINT_URL | storage.s3.endpoint_url | Custom S3 endpoint URL, defaults to AWS endpoints if not set | -| *Not specified* | +| INVENTREE_S3_SECRET_KEY | storage.s3.secret_key | Secret key | *Not specified* | +| INVENTREE_S3_BUCKET_NAME | storage.s3.bucket_name | Bucket name, required by most providers | *Not specified* | +| INVENTREE_S3_REGION_NAME | storage.s3.region_name | S3 region name | *Not specified* | +| INVENTREE_S3_ENDPOINT_URL | storage.s3.endpoint_url | Custom S3 endpoint URL, defaults to AWS endpoints if not set | *Not specified* | | INVENTREE_S3_LOCATION | storage.s3.location | Sub-Location that should be used | inventree-server | | INVENTREE_S3_DEFAULT_ACL | storage.s3.default_acl | Default ACL for uploaded files, defaults to provider default if not set | *Not specified* | | INVENTREE_S3_VERIFY_SSL | storage.s3.verify_ssl | Verify SSL certificate for S3 endpoint | True | diff --git a/docs/docs/start/installer.md b/docs/docs/start/installer.md index 562b2bd936..997a0fefc8 100644 --- a/docs/docs/start/installer.md +++ b/docs/docs/start/installer.md @@ -118,6 +118,9 @@ Extra python packages can be installed by setting the environment variable `SETU The used database backend can be configured with environment variables (before the first setup) or in the config file after the installation. Check the [configuration section](./config.md#database-options) for more information. +!!! warning "SQLite Performance" + SQLite is not recommended for production use, as it is not designed for high concurrency. + ## Moving Data To change the data storage location, link the new location to `/opt/inventree/data`. A rough outline of steps to achieve this could be: diff --git a/docs/docs/start/migrate.md b/docs/docs/start/migrate.md index f8189c08f7..7eff14a5a1 100644 --- a/docs/docs/start/migrate.md +++ b/docs/docs/start/migrate.md @@ -117,7 +117,7 @@ Once the migration process completes, the database records are now updated! Rest ## Migrating Between Incompatible Database Versions -There may be occasions when InvenTree data needs to be migrated between two database installations running *incompatible* versions of the database software. For example, InvenTree may be running on a Postgres database running on version 12, and the administrator wishes to migrate the data to a Postgres version 17 database. +There may be occasions when InvenTree data needs to be migrated between two database installations running *incompatible* versions of the database software. For example, InvenTree may be running on a Postgres database running on version 12, and the administrator wishes to migrate the data to a Postgres version {{ config.extra.docker_postgres_version }} database. !!! warning "Advanced Procedure" The following procedure is *advanced*, and should only be attempted by experienced database administrators. Always ensure that database backups are made before attempting any migration procedure. @@ -127,7 +127,7 @@ Due to inherit incompatibilities between different major versions of database so !!! warning "InvenTree Version" It is *crucial* that both InvenTree database installations are running the same version of InvenTree software! If this is not the case, data migration may fail, and there is a possibility that data corruption can occur. Ensure that the original database is up to date, by running `invoke update`. -The following instructions assume that the source (old) database is Postgres version 15, and the target (new) database is Postgres version 17. Additionally, it assumes that the InvenTree installation is running under [docker / docker compose](./docker.md), for simplicity. Adjust commands as required for other InvenTree configurations or database software. +The following instructions assume that the source (old) database is Postgres version 15, and the target (new) database is Postgres version {{ config.extra.docker_postgres_version }}. Additionally, it assumes that the InvenTree installation is running under [docker / docker compose](./docker.md), for simplicity. Adjust commands as required for other InvenTree configurations or database software. The overall procedure is as follows: @@ -154,13 +154,13 @@ docker compose down ### Remove Old Database Files -The raw database files are incompatible between different major versions of Postgres. Thus, the old database files must be removed before starting the new database. +The raw database files are incompatible between different major versions of Postgres. Thus, the old database files must be removed before starting the new database. Rather than removing the database directory, we will move the database files to a temporary location, just in case we need to revert back to the old database. !!! warning "Data Loss" Ensure that a complete backup of the old database has been made before proceeding! Removing the database files will result in data loss if a backup does not exist. ``` -rm -rf ./path/to/database/* +mv ./path/to/database ./path/to/database_backup ``` !!! info "Database Location" @@ -168,7 +168,7 @@ rm -rf ./path/to/database/* ### Start New Database -Update the InvenTree docker configuration to use the new version of Postgres (e.g. `postgres:17`), and then start the InvenTree installation: +Update the InvenTree docker configuration to use the new version of Postgres (e.g. `postgres:{{ config.extra.docker_postgres_version }}`), and then start the InvenTree installation: ``` docker compose up -d diff --git a/docs/docs/start/processes.md b/docs/docs/start/processes.md index 826644a596..643668aee3 100644 --- a/docs/docs/start/processes.md +++ b/docs/docs/start/processes.md @@ -16,7 +16,22 @@ InvenTree supports a [number of database backends]({% include "django.html" %}/r Refer to the [database configuration guide](./config.md#database-options) for more information on selecting and configuring the database backend. -In running InvenTree via [docker compose](./docker_install.md), the database process is managed by the `inventree-db` service which provides a [Postgres docker container](https://hub.docker.com/_/postgres). +If running InvenTree via [docker compose](./docker_install.md), the database process is managed by the `inventree-db` service which provides a [Postgres docker container](https://hub.docker.com/_/postgres). + +!!! tip "Postgres Recommended" + We recommend using Postgres as the database backend for InvenTree, as it is a robust and scalable database which is well-suited to production use. + +#### SQLite Limitations + +!!! warning "SQLite Performance" + SQLite is not recommended for production use, as it is not designed for high concurrency. + +While SQLite is supported, it is strongly *not* recommended for a production installation, especially where there may be multiple users accessing the system concurrently. SQLite is designed for low-concurrency applications, and can experience performance issues when multiple users are accessing the database at the same time. + +In addition to concurrency issues, there are other structural limitations which exist in SQLite that can prevent operations on large querysets. + +If you are using SQLite, you should be aware of these limitations. It is important to ensure that the database file is stored on a fast storage medium (such as an SSD), and that the database options are configured correctly to minimize locking issues. Refer to the [database configuration guide](./config.md#database-options) for more information on configuring SQLite options. + ### Web Server @@ -112,6 +127,8 @@ If the background worker process is not running, InvenTree will not be able to p If the [cache server](#cache-server) is not running, the background worker will be limited to running a single threaded worker. This is because the background worker uses the cache server to manage task locking, and without a global cache server to communicate between processes, concurrency issues can occur. +Additionally, if you are running SQLite as the database backend, the background worker will be limited to a single thread, due to database locking issues which can occur with SQLite when multiple threads are accessing the database concurrently. + ### Cache Server The InvenTree cache server is used to store temporary data which is shared between the InvenTree web server and the background worker processes. The cache server is also used to store task information, and to manage task locking between the background worker processes. @@ -122,7 +139,7 @@ InvenTree uses the [Redis](https://redis.io/) cache server to manage cache data. !!! info "Redis on Docker" Docker adds an additional network layer - that might lead to lower performance than bare metal. - To optimize and configure your redis deployment follow the [official docker guide](https://redis.io/docs/getting-started/install-stack/docker/#configuration). + To optimize and configure your redis deployment follow the [official docker guide](https://redis.io/docs/latest/operate/oss_and_stack/install/install-stack/docker/). !!! tip "Enable Cache" While a redis container is provided in the default configuration, by default it is not enabled in the InvenTree server. You can enable redis cache support by following the [caching configuration guide](./config.md#caching) diff --git a/docs/docs/stock/index.md b/docs/docs/stock/index.md index d020dd67d1..d3c544a3c8 100644 --- a/docs/docs/stock/index.md +++ b/docs/docs/stock/index.md @@ -2,13 +2,15 @@ title: Stock --- -## Stock Items +## Stock Item A *Stock Item* is an actual instance of a [*Part*](../part/index.md) item. It represents a physical quantity of the *Part* in a specific location. +Each Part instance may have multiple stock items associated with it, in various quantities and locations. Additionally, each stock item may have a serial number (if the part is tracked by serial number) and may be associated with a particular supplier part (if the item was purchased from a supplier). + ### Stock Item Details -The *Stock Item* detail view shows information regarding the particular stock item: +Each *Stock Item* is linked to the following information: **Part** - Which *Part* this stock item is an instance of @@ -26,17 +28,27 @@ The *Stock Item* detail view shows information regarding the particular stock it **Status** - Status of this stock item -### Stock Availability +**Serial Number** - If the part is tracked by serial number, the unique serial number of this stock item + +**Batch Code** - If the part is tracked by batch code, the batch code of this stock item + +## Stock Availability InvenTree has a number of different mechanisms to determine whether stock is available for use. See the [Stock Availability](./availability.md) page for more information. -### Stock Tracking +## Traceability + +Stock items can be associated with a unique serial number and / or a batch code, which allows for traceability of individual stock items. This is particularly useful for tracking the history of specific items, and for ensuring that items can be traced back to their source (e.g. supplier, purchase order, etc). + +Refer to the [traceability](./traceability.md) page for more information on how serial numbers and batch codes work in InvenTree. + +## Stock Tracking Every time a *Stock Item* is adjusted, a *Stock Tracking* entry is automatically created. This ensures a complete history of the *Stock Item* is maintained as long as the item is in the system. Each stock tracking historical item records the user who performed the action. [Read more about stock tracking here](./tracking.md). -## Stock Location +## Stock Locations 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. @@ -60,3 +72,7 @@ in the build order line items view where the material is allocated. {{ image("stock/stock_external_icon.png", title="External stock indication") }} The external flag does not get inherited to sublocations. + +### Structural Locations + +A stock location may be optionally marked as *structural*. Structural locations are used to represent physical locations which are not directly associated with stock items, but rather serve as a means of organizing the stock location hierarchy. For example, a structural location might represent a particular shelf or drawer within a warehouse, while the actual stock items are stored in sub-locations within that location. diff --git a/docs/docs/stock/status.md b/docs/docs/stock/status.md index 8a50d02a5e..d153047941 100644 --- a/docs/docs/stock/status.md +++ b/docs/docs/stock/status.md @@ -36,6 +36,8 @@ Refer to the source code for the Stock status codes: show_source: True members: [] +### Custom Status Codes + Stock Status supports [custom states](../concepts/custom_states.md). ### Default Status Code diff --git a/docs/docs/stock/traceability.md b/docs/docs/stock/traceability.md new file mode 100644 index 0000000000..5fb21aa608 --- /dev/null +++ b/docs/docs/stock/traceability.md @@ -0,0 +1,152 @@ +--- +title: Stock Traceability +--- + +## Stock Traceability + +It may be desirable to track individual stock items, or groups of stock items, with unique identifier values. Stock items may be *tracked* using either *Batch Codes* or *Serial Numbers*. + +Individual stock items can be assigned a batch code, or a serial number, or both, or neither, as requirements dictate. + +{{ image("stock/batch_and_serial.png", title="Batch and Serial Number Tracking") }} + +Out of the box, the default implementations for both batch codes and serial numbers are (intentionally) simplistic. + +As the particular requirements for serial number or batch code conventions may vary significantly from one application to another, InvenTree provides the ability for custom plugins to determine exactly how batch codes and serial numbers are implemented. + +### Batch Codes + +Batch codes can be used to specify a particular "group" of items, and can be assigned to any stock item without restriction. Batch codes are tracked even as stock items are split into separate items. + +Multiple stock items may share the same batch code without restriction, even across different parts. + +#### Generating Batch Codes + +Batch codes can be generated automatically based on a provided pattern. The default pattern simply uses the current date-code as the batch number, however this can be customized within a certain scope. + +{{ image("stock/batch_code_template.png", title="Batch code pattern") }} + +#### Context Variables + +The following context variables are available by default when generating a batch code using the builtin generation functionality: + +| Variable | Description | +| --- | --- | +| year | The current year e.g. `2024` | +| month | The current month number, e.g. `5` | +| day | The current day of month, e.g. `21` | +| hour | The current hour of day, in 24-hour format, e.g. `23` | +| minute | The current minute of hour, e.g. `17` | +| week | The current week of year, e.g. `51` | + +#### Plugin Support + +To implement custom batch code functionality, refer to the details on the [Validation Plugin Mixin](../plugins/mixins/validation.md#batch-codes). + +### Serial Numbers + +A serial "number" is used to uniquely identify a single, unique stock item. Note that while *number* is used throughout the documentation, these values are not required to be numeric. + +#### Uniqueness Requirements + +By default, serial numbers must be unique across any given [Part](../part/index.md) instance (including any variants of that part). + +However, it is also possible to specify that serial numbers must be globally unique across all types of parts. This is configurable in the settings display (see below): + +{{ image("stock/serial_numbers_unique.png", title="Serial number uniqueness") }} + +#### Generating Serial Numbers + +When creating a group of serialized stock items, it can be very useful for the user to be able to generate a group of unique serial numbers, with one serial number for each serialized stock item. + +{{ image("stock/serial_next.png", title="Serial number entry") }} + +For a given serial number *schema* (either the in-built schema or a custom schema defined by a plugin), a group (or *range*) of serial numbers can be generated using a number of possible patterns: + +##### Comma Separated Values + +Individual serial numbers can be specified by separating using a comma character (`,`). + +| Pattern | Serial Numbers | +| --- | --- | +| `1, 2, 45, 99, 101` | `1, 2, 45, 99, 101` | + +##### Hyphen Separated Range + +Use a hyphen character (`-`) to specify a *range* of sequential values, inclusive of the two values separated by the hyphen. + +| Pattern | Serial Numbers | +| --- | --- | +| `10-15` | `10, 11, 12, 13, 14, 15` | + +##### Starting Value Range + +A *starting value* can be supplied, followed by the plus (`+`) character to indicate a number of sequential values following the provided starting value. The `+` character should be followed by an integer value to indicate the number of serial numbers which will be generated. + +| Pattern | Serial Numbers | +| --- | --- | +| `10+3` | `10, 11, 12, 13` | +| `100 + 2` | `100, 101, 102` | + +##### Next Value + +When specifying serial numbers, the tilde (`~`) character is replaced with the next available serial number. It can be used in combination with the available patterns specified above. + +For example, if the *next* available serial number is `100`, the following patterns can be used: + +| Pattern | Serial Numbers | +| --- | --- | +| `~` | `100` | +| `~, ~, ~` | `100, 101, 102` | +| `800, ~, 900` | `800, 100, 900` | +| `~+5` | `100, 101, 102, 103, 104, 105` | + +##### Combination Groups + +Any of the above patterns can be combined using multiple groups separated by the comma (`,`) character: + +| Pattern | Serial Numbers | +| --- | --- | +| `1, 2, 4-7, 10` | `1, 2, 4, 5, 6, 7, 10` | +| `40+4, 50+4` | `40, 41, 42, 43, 44, 50, 51, 52, 53, 54` | +| `10, 14, 20+3, 30-35` | `10, 14, 20, 21, 22, 23, 30, 31, 32, 33, 34, 35` | + +In the default implementation, InvenTree assumes that serial "numbers" are integer values in a simple incrementing sequence e.g. `{1, 2, 3, 4, 5, 6}`. When generating the *next* value for a serial number, the algorithm looks for the *most recent* serial number, and attempts to coerce that value into an integer, and then increment that value. + +While this approach is reasonably robust, it is definitely simplistic and is not expected to meet the requirements of every installation. For this reason, more complex serial number management is intended to be implemented using a custom plugin (see below). + +#### Serial Number Errors + +If a provided serial number (or group of numbers) is not considered valid, an error message is provided to the user. + +##### Example: Invalid Quantity + +{{ image("stock/serial_error_quantity.png", title="Serial number - invalid quantity") }} + +##### Example: Duplicate Serial Numbers + +{{ image("stock/serial_error_unique.png", title="Serial number - duplicate values") }} + +##### Example: Invalid Serial Numbers + +!!! tip "Serial Number Validation" + Custom serial number validation can be implemented using an external plugin + +#### Adjusting Serial Numbers + +Once a stock item has been created with a serial number, it is possible to adjust that serial number value if required. This can be achieved by navigating to the stock item's detail page, and selecting the "Edit" option from the actions menu. Here, the serial number value can be modified as required: + +{{ image("stock/serial_edit.png", title="Editing a serial number") }} + +Note that any serial number adjustments are subject to the same validation rules as when the stock item was created. If the new serial number value is not valid, an error message will be displayed to the user: + +{{ image("stock/serial_edit_error.png", title="Error while editing a serial number") }} + + +#### Plugin Support + +Custom serial number functionality, with any arbitrary requirements or level of complexity, can be implemented using the [Validation Plugin Mixin class](../plugins/mixins/validation.md#serial-numbers). Refer to the documentation for this plugin for technical details. + +A custom plugin allows the user to determine how a "valid" serial number is defined, and (crucially) how any given serial number value is incremented to provide the next value in the sequence. + +Implementing custom methods for these two considerations allows for complex serial number schema to be supported with minimal effort. diff --git a/docs/docs/stock/tracking.md b/docs/docs/stock/tracking.md index 5ce0809602..309c682ba7 100644 --- a/docs/docs/stock/tracking.md +++ b/docs/docs/stock/tracking.md @@ -4,149 +4,47 @@ title: Stock Tracking ## Stock Tracking -It may be desirable to track individual stock items, or groups of stock items, with unique identifier values. Stock items may be *tracked* using either *Batch Codes* or *Serial Numbers*. +Stock tracking entries record the history of stock item adjustments, including the user who performed the action, the date of the action, and the quantity change. This allows users to maintain a complete history of stock item movements and adjustments over time. -Individual stock items can be assigned a batch code, or a serial number, or both, or neither, as requirements dictate. +### Tracking Events -{{ image("stock/batch_and_serial.png", title="Batch and Serial Number Tracking") }} +Stock tracking entries are created automatically whenever a stock item is adjusted, either through manual adjustments or through automated processes such as order fulfillment or build completion. -Out of the box, the default implementations for both batch codes and serial numbers are (intentionally) simplistic. +Some examples of events that may trigger stock tracking entries include: -As the particular requirements for serial number or batch code conventions may vary significantly from one application to another, InvenTree provides the ability for custom plugins to determine exactly how batch codes and serial numbers are implemented. +- Manual stock adjustments (e.g. correcting inventory counts) +- Creation of new stock items (e.g. receiving new inventory) +- Allocation of stock items to orders (e.g. shipping items against sales orders) +- Consumption of stock items during build processes (e.g. using items to complete a build order) -### Batch Codes +## Viewing Stock Tracking History -Batch codes can be used to specify a particular "group" of items, and can be assigned to any stock item without restriction. Batch codes are tracked even as stock items are split into separate items. +There are multiple ways to view the stock tracking history for a particular stock item or part via the user interface. -Multiple stock items may share the same batch code without restriction, even across different parts. +### Stock Item Tracking History -#### Generating Batch Codes +The stock tracking history for a particular stock item can be viewed on the *Stock Item Detail* page, under the *Stock Tracking* tab: -Batch codes can be generated automatically based on a provided pattern. The default pattern simply uses the current date-code as the batch number, however this can be customized within a certain scope. +{{ image("stock/stock_item_tracking_history.png", title="Stock tracking tab") }} -{{ image("stock/batch_code_template.png", title="Batch code pattern") }} +This view displays all tracking entries associated with the particular stock item. -#### Context Variables +### Part Tracking History -The following context variables are available by default when generating a batch code using the builtin generation functionality: +Additionally, the stock tracking history for a particular part can be viewed on the *Part Detail* page, under the *Stock History* tab: -| Variable | Description | -| --- | --- | -| year | The current year e.g. `2024` | -| month | The current month number, e.g. `5` | -| day | The current day of month, e.g. `21` | -| hour | The current hour of day, in 24-hour format, e.g. `23` | -| minute | The current minute of hour, e.g. `17` | -| week | The current week of year, e.g. `51` | +{{ image("stock/part_tracking_history.png", title="Part stock tracking history") }} -#### Plugin Support +This view displays all tracking entries associated with any stock item linked to the particular part. -To implement custom batch code functionality, refer to the details on the [Validation Plugin Mixin](../plugins/mixins/validation.md#batch-codes). +!!! info "Deleted Stock Items" + Even if a stock item is deleted from the system, the associated stock tracking entries are retained for historical reference. They will be visible in the part tracking history, but not in the stock item tracking history (as the stock item itself has been deleted). -### Serial Numbers +## Stock Tracking Settings -A serial "number" is used to uniquely identify a single, unique stock item. Note that while *number* is used throughout the documentation, these values are not required to be numeric. +There are a number of configuration options available for controlling the behavior of stock tracking functionality in the [system settings view](../settings/global.md): -#### Uniqueness Requirements - -By default, serial numbers must be unique across any given [Part](../part/index.md) instance (including any variants of that part). - -However, it is also possible to specify that serial numbers must be globally unique across all types of parts. This is configurable in the settings display (see below): - -{{ image("stock/serial_numbers_unique.png", title="Serial number uniqueness") }} - -#### Generating Serial Numbers - -When creating a group of serialized stock items, it can be very useful for the user to be able to generate a group of unique serial numbers, with one serial number for each serialized stock item. - -{{ image("stock/serial_next.png", title="Serial number entry") }} - -For a given serial number *schema* (either the in-built schema or a custom schema defined by a plugin), a group (or *range*) of serial numbers can be generated using a number of possible patterns: - -##### Comma Separated Values - -Individual serial numbers can be specified by separating using a comma character (`,`). - -| Pattern | Serial Numbers | -| --- | --- | -| `1, 2, 45, 99, 101` | `1, 2, 45, 99, 101` | - -##### Hyphen Separated Range - -Use a hyphen character (`-`) to specify a *range* of sequential values, inclusive of the two values separated by the hyphen. - -| Pattern | Serial Numbers | -| --- | --- | -| `10-15` | `10, 11, 12, 13, 14, 15` | - -##### Starting Value Range - -A *starting value* can be supplied, followed by the plus (`+`) character to indicate a number of sequential values following the provided starting value. The `+` character should be followed by an integer value to indicate the number of serial numbers which will be generated. - -| Pattern | Serial Numbers | -| --- | --- | -| `10+3` | `10, 11, 12, 13` | -| `100 + 2` | `100, 101, 102` | - -##### Next Value - -When specifying serial numbers, the tilde (`~`) character is replaced with the next available serial number. It can be used in combination with the available patterns specified above. - -For example, if the *next* available serial number is `100`, the following patterns can be used: - -| Pattern | Serial Numbers | -| --- | --- | -| `~` | `100` | -| `~, ~, ~` | `100, 101, 102` | -| `800, ~, 900` | `800, 100, 900` | -| `~+5` | `100, 101, 102, 103, 104, 105` | - -##### Combination Groups - -Any of the above patterns can be combined using multiple groups separated by the comma (`,`) character: - -| Pattern | Serial Numbers | -| --- | --- | -| `1, 2, 4-7, 10` | `1, 2, 4, 5, 6, 7, 10` | -| `40+4, 50+4` | `40, 41, 42, 43, 44, 50, 51, 52, 53, 54` | -| `10, 14, 20+3, 30-35` | `10, 14, 20, 21, 22, 23, 30, 31, 32, 33, 34, 35` | - -In the default implementation, InvenTree assumes that serial "numbers" are integer values in a simple incrementing sequence e.g. `{1, 2, 3, 4, 5, 6}`. When generating the *next* value for a serial number, the algorithm looks for the *most recent* serial number, and attempts to coerce that value into an integer, and then increment that value. - -While this approach is reasonably robust, it is definitely simplistic and is not expected to meet the requirements of every installation. For this reason, more complex serial number management is intended to be implemented using a custom plugin (see below). - -#### Serial Number Errors - -If a provided serial number (or group of numbers) is not considered valid, an error message is provided to the user. - -##### Example: Invalid Quantity - -{{ image("stock/serial_error_quantity.png", title="Serial number - invalid quantity") }} - -##### Example: Duplicate Serial Numbers - -{{ image("stock/serial_error_unique.png", title="Serial number - duplicate values") }} - -##### Example: Invalid Serial Numbers - -!!! tip "Serial Number Validation" - Custom serial number validation can be implemented using an external plugin - -#### Adjusting Serial Numbers - -Once a stock item has been created with a serial number, it is possible to adjust that serial number value if required. This can be achieved by navigating to the stock item's detail page, and selecting the "Edit" option from the actions menu. Here, the serial number value can be modified as required: - -{{ image("stock/serial_edit.png", title="Editing a serial number") }} - -Note that any serial number adjustments are subject to the same validation rules as when the stock item was created. If the new serial number value is not valid, an error message will be displayed to the user: - -{{ image("stock/serial_edit_error.png", title="Error while editing a serial number") }} - - -#### Plugin Support - -Custom serial number functionality, with any arbitrary requirements or level of complexity, can be implemented using the [Validation Plugin Mixin class](../plugins/mixins/validation.md#serial-numbers). Refer to the documentation for this plugin for technical details. - -A custom plugin allows the user to determine how a "valid" serial number is defined, and (crucially) how any given serial number value is incremented to provide the next value in the sequence. - -Implementing custom methods for these two considerations allows for complex serial number schema to be supported with minimal effort. +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("STOCK_TRACKING_DELETE_OLD_ENTRIES") }} +{{ globalsetting("STOCK_TRACKING_DELETE_DAYS") }} diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index d9585f3996..a79df4ce30 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -91,6 +91,7 @@ nav: - Privacy: privacy.md - Concepts: - Terminology: concepts/terminology.md + - User Interface: concepts/user_interface.md - Threat Model: concepts/threat_model.md - Physical Units: concepts/units.md - Companies: concepts/company.md @@ -137,6 +138,7 @@ nav: - Stock: - Stock Items: stock/index.md - Availability: stock/availability.md + - Traceability: stock/traceability.md - Stock Tracking: stock/tracking.md - Stock Status: stock/status.md - Adjusting Stock: stock/adjust.md diff --git a/docs/requirements.in b/docs/requirements.in index 09178c1b77..708b250cba 100644 --- a/docs/requirements.in +++ b/docs/requirements.in @@ -6,5 +6,5 @@ mkdocs-redirects mkdocs-simple-hooks>=0.1,<1.0 mkdocs-include-markdown-plugin neoteroi-mkdocs -mkdocstrings[python]>=0.25.0,<=1.0.0 +mkdocstrings[python]>=0.25.0,<=1.0.3 mkdocs-mermaid2-plugin diff --git a/docs/requirements.txt b/docs/requirements.txt index 99f0b5e762..52b6dbac80 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,136 +1,161 @@ # This file was autogenerated by uv via the following command: -# uv pip compile docs/requirements.in -o docs/requirements.txt --no-strip-extras --generate-hashes -b src/backend/requirements.txt -anyio==4.10.0 \ - --hash=sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6 \ - --hash=sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1 +# uv pip compile docs/requirements.in -o docs/requirements.txt -c src/backend/requirements.txt +anyio==4.12.1 \ + --hash=sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703 \ + --hash=sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c # via httpx -babel==2.17.0 \ - --hash=sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d \ - --hash=sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2 +babel==2.18.0 \ + --hash=sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d \ + --hash=sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35 # via + # -c src/backend/requirements.txt # mkdocs-git-revision-date-localized-plugin # mkdocs-material -backrefs==5.9 \ - --hash=sha256:6907635edebbe9b2dc3de3a2befff44d74f30a4562adbb8b36f21252ea19c5cf \ - --hash=sha256:7fdf9771f63e6028d7fee7e0c497c81abda597ea45d6b8f89e8ad76994f5befa \ - --hash=sha256:808548cb708d66b82ee231f962cb36faaf4f2baab032f2fbb783e9c2fdddaa59 \ - --hash=sha256:cc37b19fa219e93ff825ed1fed8879e47b4d89aa7a1884860e2db64ccd7c676b \ - --hash=sha256:db8e8ba0e9de81fcd635f440deab5ae5f2591b54ac1ebe0550a2ca063488cd9f \ - --hash=sha256:df5e169836cc8acb5e440ebae9aad4bf9d15e226d3bad049cf3f6a5c20cc8dc9 \ - --hash=sha256:f48ee18f6252b8f5777a22a00a09a85de0ca931658f1dd96d4406a34f3748c60 +backrefs==6.1 \ + --hash=sha256:13eafbc9ccd5222e9c1f0bec563e6d2a6d21514962f11e7fc79872fd56cbc853 \ + --hash=sha256:2a2ccb96302337ce61ee4717ceacfbf26ba4efb1d55af86564b8bbaeda39cac1 \ + --hash=sha256:3bba1749aafe1db9b915f00e0dd166cba613b6f788ffd63060ac3485dc9be231 \ + --hash=sha256:4c9d3dc1e2e558965202c012304f33d4e0e477e1c103663fd2c3cc9bb18b0d05 \ + --hash=sha256:a9e99b8a4867852cad177a6430e31b0f6e495d65f8c6c134b68c14c3c95bf4b0 \ + --hash=sha256:c64698c8d2269343d88947c0735cb4b78745bd3ba590e10313fbf3f78c34da5a \ + --hash=sha256:e82bba3875ee4430f4de4b6db19429a27275d95a5f3773c57e9e18abc23fd2b7 # via mkdocs-material -beautifulsoup4==4.13.4 \ - --hash=sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b \ - --hash=sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195 +beautifulsoup4==4.14.3 \ + --hash=sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb \ + --hash=sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86 # via mkdocs-mermaid2-plugin bracex==2.6 \ --hash=sha256:0b0049264e7340b3ec782b5cb99beb325f36c3782a32e36e876452fd49a09952 \ --hash=sha256:98f1347cd77e22ee8d967a30ad4e310b233f7754dbf31ff3fceb76145ba47dc7 # via wcmatch -certifi==2025.8.3 \ - --hash=sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407 \ - --hash=sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 +certifi==2026.2.25 \ + --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ + --hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7 # via + # -c src/backend/requirements.txt # httpcore # httpx # requests -charset-normalizer==3.4.2 \ - --hash=sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4 \ - --hash=sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45 \ - --hash=sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7 \ - --hash=sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0 \ - --hash=sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7 \ - --hash=sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d \ - --hash=sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d \ - --hash=sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0 \ - --hash=sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184 \ - --hash=sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db \ - --hash=sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b \ - --hash=sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64 \ - --hash=sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b \ - --hash=sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8 \ - --hash=sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff \ - --hash=sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344 \ - --hash=sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58 \ - --hash=sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e \ - --hash=sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471 \ - --hash=sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148 \ - --hash=sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a \ - --hash=sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836 \ - --hash=sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e \ - --hash=sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63 \ - --hash=sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c \ - --hash=sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1 \ - --hash=sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01 \ - --hash=sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366 \ - --hash=sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58 \ - --hash=sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5 \ - --hash=sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c \ - --hash=sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2 \ - --hash=sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a \ - --hash=sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597 \ - --hash=sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b \ - --hash=sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5 \ - --hash=sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb \ - --hash=sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f \ - --hash=sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0 \ - --hash=sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941 \ - --hash=sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0 \ - --hash=sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86 \ - --hash=sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7 \ - --hash=sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7 \ - --hash=sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455 \ - --hash=sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6 \ - --hash=sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4 \ - --hash=sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0 \ - --hash=sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3 \ - --hash=sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1 \ - --hash=sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6 \ - --hash=sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981 \ - --hash=sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c \ - --hash=sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980 \ - --hash=sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645 \ - --hash=sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7 \ - --hash=sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12 \ - --hash=sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa \ - --hash=sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd \ - --hash=sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef \ - --hash=sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f \ - --hash=sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2 \ - --hash=sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d \ - --hash=sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5 \ - --hash=sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02 \ - --hash=sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3 \ - --hash=sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd \ - --hash=sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e \ - --hash=sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214 \ - --hash=sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd \ - --hash=sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a \ - --hash=sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c \ - --hash=sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681 \ - --hash=sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba \ - --hash=sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f \ - --hash=sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a \ - --hash=sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28 \ - --hash=sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691 \ - --hash=sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82 \ - --hash=sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a \ - --hash=sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027 \ - --hash=sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7 \ - --hash=sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518 \ - --hash=sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf \ - --hash=sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b \ - --hash=sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9 \ - --hash=sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544 \ - --hash=sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da \ - --hash=sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509 \ - --hash=sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f \ - --hash=sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a \ - --hash=sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f - # via requests -click==8.1.8 \ - --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \ - --hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a +charset-normalizer==3.4.5 \ + --hash=sha256:014837af6fabf57121b6254fa8ade10dceabc3528b27b721a64bbc7b8b1d4eb4 \ + --hash=sha256:01a1ed54b953303ca7e310fafe0fe347aab348bd81834a0bcd602eb538f89d66 \ + --hash=sha256:0294916d6ccf2d069727d65973c3a1ca477d68708db25fd758dd28b0827cff54 \ + --hash=sha256:02a9d1b01c1e12c27883b0c9349e0bcd9ae92e727ff1a277207e1a262b1cbf05 \ + --hash=sha256:036c079aa08a6a592b82487f97c60b439428320ed1b2ea0b3912e99d30c77765 \ + --hash=sha256:039215608ac7b358c4da0191d10fc76868567fbf276d54c14721bdedeb6de064 \ + --hash=sha256:0625665e4ebdddb553ab185de5db7054393af8879fb0c87bd5690d14379d6819 \ + --hash=sha256:0a45e504f5e1be0bd385935a8e1507c442349ca36f511a47057a71c9d1d6ea9e \ + --hash=sha256:0b362bcd27819f9c07cbf23db4e0e8cd4b44c5ecd900c2ff907b2b92274a7412 \ + --hash=sha256:0c300cefd9b0970381a46394902cd18eaf2aa00163f999590ace991989dcd0fc \ + --hash=sha256:1088345bcc93c58d8d8f3d783eca4a6e7a7752bbff26c3eee7e73c597c191c2e \ + --hash=sha256:10b473fc8dca1c3ad8559985794815f06ca3fc71942c969129070f2c3cdf7281 \ + --hash=sha256:131716d6786ad5e3dc542f5cc6f397ba3339dc0fb87f87ac30e550e8987756af \ + --hash=sha256:14498a429321de554b140013142abe7608f9d8ccc04d7baf2ad60498374aefa2 \ + --hash=sha256:149ec69866c3d6c2fb6f758dbc014ecb09f30b35a5ca90b6a8a2d4e54e18fdfe \ + --hash=sha256:165c7b21d19365464e8f70e5ce5e12524c58b48c78c1f5a57524603c1ab003f8 \ + --hash=sha256:1827734a5b308b65ac54e86a618de66f935a4f63a8a462ff1e19a6788d6c2262 \ + --hash=sha256:19092dde50335accf365cce21998a1c6dd8eafd42c7b226eb54b2747cdce2fac \ + --hash=sha256:1a374cc0b88aa710e8865dc1bd6edb3743c59f27830f0293ab101e4cf3ce9f85 \ + --hash=sha256:1d1401945cb77787dbd3af2446ff2d75912327c4c3a1526ab7955ecf8600687c \ + --hash=sha256:1f2da5cbb9becfcd607757a169e38fb82aa5fd86fae6653dea716e7b613fe2cf \ + --hash=sha256:259cd1ca995ad525f638e131dbcc2353a586564c038fc548a3fe450a91882139 \ + --hash=sha256:2820a98460c83663dd8ec015d9ddfd1e4879f12e06bb7d0500f044fb477d2770 \ + --hash=sha256:28269983f25a4da0425743d0d257a2d6921ea7d9b83599d4039486ec5b9f911d \ + --hash=sha256:2b970382e4a36bed897c19f310f31d7d13489c11b4f468ddfba42d41cddfb918 \ + --hash=sha256:2da4eedcb6338e2321e831a0165759c0c620e37f8cd044a263ff67493be8ffb3 \ + --hash=sha256:30987f4a8ed169983f93e1be8ffeea5214a779e27ed0b059835c7afe96550ad7 \ + --hash=sha256:30a2b1a48478c3428d047ed9690d57c23038dac838a87ad624c85c0a78ebeb39 \ + --hash=sha256:340810d34ef83af92148e96e3e44cb2d3f910d2bf95e5618a5c467d9f102231d \ + --hash=sha256:3f64c6bf8f32f9133b668c7f7a7cbdbc453412bc95ecdbd157f3b1e377a92990 \ + --hash=sha256:4167a621a9a1a986c73777dbc15d4b5eac8ac5c10393374109a343d4013ec765 \ + --hash=sha256:4354e401eb6dab9aed3c7b4030514328a6c748d05e1c3e19175008ca7de84fb1 \ + --hash=sha256:4481e6da1830c8a1cc0b746b47f603b653dadb690bcd851d039ffaefe70533aa \ + --hash=sha256:4b8551b6e6531e156db71193771c93bda78ffc4d1e6372517fe58ad3b91e4659 \ + --hash=sha256:4cd966c2559f501c6fd69294d082c2934c8dd4719deb32c22961a5ac6db0df1d \ + --hash=sha256:50bcbca6603c06a1dcc7b056ed45c37715fb5d2768feb3bcd37d2313c587a5b9 \ + --hash=sha256:530beedcec9b6e027e7a4b6ce26eed36678aa39e17da85e6e03d7bd9e8e9d7c9 \ + --hash=sha256:568e3c34b58422075a1b49575a6abc616d9751b4d61b23f712e12ebb78fe47b2 \ + --hash=sha256:573ef5814c4b7c0d59a7710aa920eaaaef383bd71626aa420fba27b5cab92e8d \ + --hash=sha256:58ad8270cfa5d4bef1bc85bd387217e14ff154d6630e976c6f56f9a040757475 \ + --hash=sha256:597d10dec876923e5c59e48dbd366e852eacb2b806029491d307daea6b917d7c \ + --hash=sha256:5bcb3227c3d9aaf73eaaab1db7ccd80a8995c509ee9941e2aae060ca6e4e5d81 \ + --hash=sha256:5cffde4032a197bd3b42fd0b9509ec60fb70918d6970e4cc773f20fc9180ca67 \ + --hash=sha256:5fea359734b140d0d6741189fea5478c6091b54ffc69d7ce119e0a05637d8c99 \ + --hash=sha256:60d68e820af339df4ae8358c7a2e7596badeb61e544438e489035f9fbf3246a5 \ + --hash=sha256:610f72c0ee565dfb8ae1241b666119582fdbfe7c0975c175be719f940e110694 \ + --hash=sha256:65a126fb4b070d05340a84fc709dd9e7c75d9b063b610ece8a60197a291d0adf \ + --hash=sha256:65b3c403a5b6b8034b655e7385de4f72b7b244869a22b32d4030b99a60593eca \ + --hash=sha256:66dee73039277eb35380d1b82cccc69cc82b13a66f9f4a18da32d573acf02b7c \ + --hash=sha256:708c7acde173eedd4bfa4028484426ba689d2103b28588c513b9db2cd5ecde9c \ + --hash=sha256:728c6a963dfab66ef865f49286e45239384249672cd598576765acc2a640a636 \ + --hash=sha256:754f96058e61a5e22e91483f823e07df16416ce76afa4ebf306f8e1d1296d43f \ + --hash=sha256:75dfd1afe0b1647449e852f4fb428195a7ed0588947218f7ba929f6538487f02 \ + --hash=sha256:75ee9c1cce2911581a70a3c0919d8bccf5b1cbc9b0e5171400ec736b4b569497 \ + --hash=sha256:76a9d0de4d0eab387822e7b35d8f89367dd237c72e82ab42b9f7bf5e15ada00f \ + --hash=sha256:77be992288f720306ab4108fe5c74797de327f3248368dfc7e1a916d6ed9e5a2 \ + --hash=sha256:7ad83b8f9379176c841f8865884f3514d905bcd2a9a3b210eaa446e7d2223e4d \ + --hash=sha256:8197abe5ca1ffb7d91e78360f915eef5addff270f8a71c1fc5be24a56f3e4873 \ + --hash=sha256:82cc7c2ad42faec8b574351f8bc2a0c049043893853317bd9bb309f5aba6cb5a \ + --hash=sha256:8a28afb04baa55abf26df544e3e5c6534245d3daa5178bc4a8eeb48202060d0e \ + --hash=sha256:8b78d8a609a4b82c273257ee9d631ded7fac0d875bdcdccc109f3ee8328cfcb1 \ + --hash=sha256:8ce11cd4d62d11166f2b441e30ace226c19a3899a7cf0796f668fba49a9fb123 \ + --hash=sha256:8fff79bf5978c693c9b1a4d71e4a94fddfb5fe744eb062a318e15f4a2f63a550 \ + --hash=sha256:92263f7eca2f4af326cd20de8d16728d2602f7cfea02e790dcde9d83c365d7cc \ + --hash=sha256:93b3b2cc5cf1b8743660ce77a4f45f3f6d1172068207c1defc779a36eea6bb36 \ + --hash=sha256:95adae7b6c42a6c5b5b559b1a99149f090a57128155daeea91732c8d970d8644 \ + --hash=sha256:97ab7787092eb9b50fb47fa04f24c75b768a606af1bcba1957f07f128a7219e4 \ + --hash=sha256:9db5e3fcdcee89a78c04dffb3fe33c79f77bd741a624946db2591c81b2fc85b0 \ + --hash=sha256:a118e2e0b5ae6b0120d5efa5f866e58f2bb826067a646431da4d6a2bdae7950e \ + --hash=sha256:a2aecdb364b8a1802afdc7f9327d55dad5366bc97d8502d0f5854e50712dbc5f \ + --hash=sha256:a66aa5022bf81ab4b1bebfb009db4fd68e0c6d4307a1ce5ef6a26e5878dfc9e4 \ + --hash=sha256:a68766a3c58fde7f9aaa22b3786276f62ab2f594efb02d0a1421b6282e852e98 \ + --hash=sha256:aa2f963b4da26daf46231d9b9e0e2c9408a751f8f0d0f44d2de56d3caf51d294 \ + --hash=sha256:aa92ec1102eaff840ccd1021478af176a831f1bccb08e526ce844b7ddda85c22 \ + --hash=sha256:ac59c15e3f1465f722607800c68713f9fbc2f672b9eb649fe831da4019ae9b23 \ + --hash=sha256:ae8b03427410731469c4033934cf473426faff3e04b69d2dfb64a4281a3719f8 \ + --hash=sha256:afca7f78067dd27c2b848f1b234623d26b87529296c6c5652168cc1954f2f3b2 \ + --hash=sha256:b2d37d78297b39a9eb9eb92c0f6df98c706467282055419df141389b23f93362 \ + --hash=sha256:b3e71afc578b98512bfe7bdb822dd6bc57d4b0093b4b6e5487c1e96ad4ace242 \ + --hash=sha256:ba20bdf69bd127f66d0174d6f2a93e69045e0b4036dc1ca78e091bcc765830c4 \ + --hash=sha256:c108f8619e504140569ee7de3f97d234f0fbae338a7f9f360455071ef9855a95 \ + --hash=sha256:c23eb3263356d94858655b3e63f85ac5d50970c6e8febcdde7830209139cc37d \ + --hash=sha256:c5af897b45fa606b12464ccbe0014bbf8c09191e0a66aab6aa9d5cf6e77e0c94 \ + --hash=sha256:c7a80a9242963416bd81f99349d5f3fce1843c303bd404f204918b6d75a75fd6 \ + --hash=sha256:c7e84e0c0005e3bdc1a9211cd4e62c78ba80bc37b2365ef4410cd2007a9047f2 \ + --hash=sha256:cace89841c0599d736d3d74a27bc5821288bb47c5441923277afc6059d7fbcb4 \ + --hash=sha256:cd2d0f0ec9aa977a27731a3209ebbcacebebaf41f902bd453a928bfd281cf7f8 \ + --hash=sha256:d01de5e768328646e6a3fa9e562706f8f6641708c115c62588aef2b941a4f88e \ + --hash=sha256:d1028de43596a315e2720a9849ee79007ab742c06ad8b45a50db8cdb7ed4a82a \ + --hash=sha256:d27ce22ec453564770d29d03a9506d449efbb9fa13c00842262b2f6801c48cce \ + --hash=sha256:d29dd9c016f2078b43d0c357511e87eee5b05108f3dd603423cb389b89813969 \ + --hash=sha256:d31f0d1671e1534e395f9eb84a68e0fb670e1edb1fe819a9d7f564ae3bc4e53f \ + --hash=sha256:d4eb8ac7469b2a5d64b5b8c04f84d8bf3ad340f4514b98523805cbf46e3b3923 \ + --hash=sha256:d5e52d127045d6ae01a1e821acfad2f3a1866c54d0e837828538fabe8d9d1bd6 \ + --hash=sha256:d77f97e515688bd615c1d1f795d540f32542d514242067adcb8ef532504cb9ee \ + --hash=sha256:d8ed79b8f6372ca4254955005830fd61c1ccdd8c0fac6603e2c145c61dd95db6 \ + --hash=sha256:dc57a0baa3eeedd99fafaef7511b5a6ef4581494e8168ee086031744e2679467 \ + --hash=sha256:e09f671a54ce70b79a1fc1dc6da3072b7ef7251fadb894ed92d9aa8218465a5f \ + --hash=sha256:e22d1059b951e7ae7c20ef6b06afd10fb95e3c41bf3c4fbc874dba113321c193 \ + --hash=sha256:e37bd100d2c5d3ba35db9c7c5ba5a9228cbcffe5c4778dc824b164e5257813d7 \ + --hash=sha256:e51ae7d81c825761d941962450f50d041db028b7278e7b08930b4541b3e45cb9 \ + --hash=sha256:e545b51da9f9af5c67815ca0eb40676c0f016d0b0381c86f20451e35696c5f95 \ + --hash=sha256:e6302ca4ae283deb0af68d2fbf467474b8b6aedcd3dab4db187e07f94c109763 \ + --hash=sha256:e71bbb595973622b817c042bd943c3f3667e9c9983ce3d205f973f486fec98a7 \ + --hash=sha256:ec56a2266f32bc06ed3c3e2a8f58417ce02f7e0356edc89786e52db13c593c98 \ + --hash=sha256:ed1a9a204f317ef879b32f9af507d47e49cd5e7f8e8d5d96358c98373314fc60 \ + --hash=sha256:ed97c282ee4f994ef814042423a529df9497e3c666dca19be1d4cd1129dc7ade \ + --hash=sha256:ed98364e1c262cf5f9363c3eca8c2df37024f52a8fa1180a3610014f26eac51c \ + --hash=sha256:ee57b926940ba00bca7ba7041e665cc956e55ef482f851b9b65acb20d867e7a2 \ + --hash=sha256:f1d725b754e967e648046f00c4facc42d414840f5ccc670c5670f59f83693e4f \ + --hash=sha256:f8102ae93c0bc863b1d41ea0f4499c20a83229f52ed870850892df555187154a \ + --hash=sha256:fc1c64934b8faf7584924143eb9db4770bbdb16659626e1a1a4d9efbcb68d947 \ + --hash=sha256:ff95a9283de8a457e6b12989de3f9f5193430f375d64297d323a615ea52cbdb3 + # via + # -c src/backend/requirements.txt + # requests +click==8.3.1 \ + --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ + --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 # via # mkdocs # neoteroi-mkdocs @@ -144,9 +169,9 @@ editorconfig==0.17.1 \ --hash=sha256:1eda9c2c0db8c16dbd50111b710572a5e6de934e39772de1959d41f64fc17c82 \ --hash=sha256:23c08b00e8e08cc3adcddb825251c497478df1dada6aefeb01e626ad37303745 # via jsbeautifier -essentials==1.1.6 \ - --hash=sha256:3fd26923f5f2ece51a219dbb17b1fb22c9190d70fa2104919be92a6419521877 \ - --hash=sha256:a470e693d83c13369ebf1f488d60236b4ea99400f38db6b7224e2808c1369256 +essentials==1.1.9 \ + --hash=sha256:71ef161e0e27ef77cd6f5fc05e0b8688a575fcab870c01c95940f832e321dfbb \ + --hash=sha256:7fbea3a518cbeafe5374fb7e2ea2c15a109e8a7fd1eaab62ae87cbd1b3b1e8d0 # via essentials-openapi essentials-openapi==1.3.0 \ --hash=sha256:453327a0a847a431133f4472ced7e4a9180bf667437049b57381ddf88079e886 \ @@ -160,13 +185,13 @@ gitdb==4.0.12 \ --hash=sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571 \ --hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf # via gitpython -gitpython==3.1.45 \ - --hash=sha256:85b0ee964ceddf211c41b9f27a49086010a190fd8132a24e21f362a4b36a791c \ - --hash=sha256:8908cb2e02fb3b93b7eb0f2827125cb699869470432cc885f019b8fd0fccff77 +gitpython==3.1.46 \ + --hash=sha256:400124c7d0ef4ea03f7310ac2fbf7151e09ff97f2a3288d64a440c584a29c37f \ + --hash=sha256:79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058 # via mkdocs-git-revision-date-localized-plugin -griffe==1.11.0 \ - --hash=sha256:c153b5bc63ca521f059e9451533a67e44a9d06cf9bf1756e4298bda5bd3262e8 \ - --hash=sha256:dc56cc6af8d322807ecdb484b39838c7a51ca750cf21ccccf890500c4d6389d8 +griffe==1.15.0 \ + --hash=sha256:6f6762661949411031f5fcda9593f586e6ce8340f0ba88921a0f2ef7a81eb9a3 \ + --hash=sha256:7726e3afd6f298fbc3696e67958803e7ac843c1cfe59734b6251a40cdbfb5eea # via mkdocstrings-python h11==0.16.0 \ --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \ @@ -186,10 +211,11 @@ httpx==0.28.1 \ --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad # via neoteroi-mkdocs -idna==3.10 \ - --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ - --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 +idna==3.11 \ + --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ + --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902 # via + # -c src/backend/requirements.txt # anyio # httpx # requests @@ -197,6 +223,7 @@ jinja2==3.1.6 \ --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 # via + # -c src/backend/requirements.txt # mkdocs # mkdocs-macros-plugin # mkdocs-material @@ -206,82 +233,112 @@ jsbeautifier==1.15.4 \ --hash=sha256:5bb18d9efb9331d825735fbc5360ee8f1aac5e52780042803943aa7f854f7592 \ --hash=sha256:72f65de312a3f10900d7685557f84cb61a9733c50dcc27271a39f5b0051bf528 # via mkdocs-mermaid2-plugin -markdown==3.8.2 \ - --hash=sha256:247b9a70dd12e27f67431ce62523e675b866d254f900c4fe75ce3dda62237c45 \ - --hash=sha256:5c83764dbd4e00bdd94d85a19b8d55ccca20fe35b2e678a1422b380324dd5f24 +markdown==3.10.2 \ + --hash=sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950 \ + --hash=sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36 # via + # -c src/backend/requirements.txt # mkdocs # mkdocs-autorefs # mkdocs-material # mkdocstrings # pymdown-extensions -markdown-it-py==3.0.0 \ - --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ - --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb +markdown-it-py==4.0.0 \ + --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ + --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 # via rich -markupsafe==3.0.2 \ - --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ - --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ - --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ - --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ - --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ - --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ - --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ - --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ - --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ - --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ - --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ - --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ - --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ - --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ - --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ - --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ - --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ - --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ - --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ - --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ - --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ - --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ - --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ - --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ - --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ - --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ - --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ - --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ - --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ - --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ - --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ - --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ - --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ - --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ - --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ - --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ - --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ - --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ - --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ - --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ - --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ - --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ - --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ - --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ - --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ - --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ - --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ - --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ - --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ - --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ - --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ - --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ - --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ - --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ - --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ - --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ - --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ - --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ - --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ - --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ - --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +markupsafe==3.0.3 \ + --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ + --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \ + --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \ + --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \ + --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \ + --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \ + --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \ + --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \ + --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \ + --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \ + --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \ + --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \ + --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \ + --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \ + --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \ + --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \ + --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \ + --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \ + --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \ + --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \ + --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \ + --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \ + --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \ + --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \ + --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \ + --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \ + --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \ + --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \ + --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \ + --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \ + --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \ + --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \ + --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \ + --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \ + --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \ + --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \ + --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \ + --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \ + --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \ + --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \ + --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \ + --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \ + --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \ + --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \ + --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \ + --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \ + --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \ + --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \ + --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \ + --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \ + --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \ + --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \ + --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \ + --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \ + --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \ + --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \ + --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \ + --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \ + --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \ + --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \ + --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \ + --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \ + --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \ + --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \ + --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \ + --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \ + --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \ + --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \ + --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \ + --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \ + --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \ + --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \ + --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \ + --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \ + --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \ + --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \ + --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \ + --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \ + --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \ + --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \ + --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \ + --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \ + --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \ + --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \ + --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \ + --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \ + --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \ + --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ + --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 # via + # -c src/backend/requirements.txt # essentials-openapi # jinja2 # mkdocs @@ -312,9 +369,9 @@ mkdocs==1.6.1 \ # mkdocs-simple-hooks # mkdocstrings # neoteroi-mkdocs -mkdocs-autorefs==1.4.2 \ - --hash=sha256:83d6d777b66ec3c372a1aad4ae0cf77c243ba5bcda5bf0c6b8a2c5e7a3d89f13 \ - --hash=sha256:e2ebe1abd2b67d597ed19378c0fff84d73d1dbce411fce7a7cc6f161888b6749 +mkdocs-autorefs==1.4.3 \ + --hash=sha256:469d85eb3114801d08e9cc55d102b3ba65917a869b893403b8987b601cf55dc9 \ + --hash=sha256:beee715b254455c4aa93b6ef3c67579c399ca092259cc41b7d9342573ff1fc75 # via # mkdocstrings # mkdocstrings-python @@ -322,21 +379,21 @@ mkdocs-get-deps==0.2.0 \ --hash=sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c \ --hash=sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134 # via mkdocs -mkdocs-git-revision-date-localized-plugin==1.5.0 \ - --hash=sha256:17345ccfdf69a1905dc96fb1070dce82d03a1eb6b0d48f958081a7589ce3c248 \ - --hash=sha256:933f9e35a8c135b113f21bb57610d82e9b7bcc71dd34fb06a029053c97e99656 +mkdocs-git-revision-date-localized-plugin==1.5.1 \ + --hash=sha256:2b0239455cd84784dd87ac8dfc9253fe4b2dd35e102696f21b5d34e2175981c6 \ + --hash=sha256:b00fd36ed0f9b2326b1488fd8fa31bf2ce64e68c4aa60a9ce857f10719571903 # via -r docs/requirements.in -mkdocs-include-markdown-plugin==7.2.0 \ - --hash=sha256:4a67a91ade680dc0e15f608e5b6343bec03372ffa112c40a4254c1bfb10f42f3 \ - --hash=sha256:d56cdaeb2d113fb66ed0fe4fb7af1da889926b0b9872032be24e19bbb09c9f5b +mkdocs-include-markdown-plugin==7.2.1 \ + --hash=sha256:30da634c568ea5d5f9e5881d51f80ac30d8c5f891cec160344ad7a0fdaea6286 \ + --hash=sha256:5d94db87b06cd303619dbaebba5f7f43a3ded7fd7709451d26f08c176376ffec # via -r docs/requirements.in mkdocs-macros-plugin==1.5.0 \ --hash=sha256:12aa45ce7ecb7a445c66b9f649f3dd05e9b92e8af6bc65e4acd91d26f878c01f \ --hash=sha256:c10fabd812bf50f9170609d0ed518e54f1f0e12c334ac29141723a83c881dd6f # via -r docs/requirements.in -mkdocs-material==9.7.0 \ - --hash=sha256:602b359844e906ee402b7ed9640340cf8a474420d02d8891451733b6b02314ec \ - --hash=sha256:da2866ea53601125ff5baa8aa06404c6e07af3c5ce3d5de95e3b52b80b442887 +mkdocs-material==9.7.4 \ + --hash=sha256:6549ad95e4d130ed5099759dfa76ea34c593eefdb9c18c97273605518e99cfbf \ + --hash=sha256:711b0ee63aca9a8c7124d4c73e83a25aa996e27e814767c3a3967df1b9e56f32 # via -r docs/requirements.in mkdocs-material-extensions==1.3.1 \ --hash=sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443 \ @@ -354,49 +411,52 @@ mkdocs-simple-hooks==0.1.5 \ --hash=sha256:dddbdf151a18723c9302a133e5cf79538be8eb9d274e8e07d2ac3ac34890837c \ --hash=sha256:efeabdbb98b0850a909adee285f3404535117159d5cb3a34f541d6eaa644d50a # via -r docs/requirements.in -mkdocstrings[python]==1.0.0 \ - --hash=sha256:351a006dbb27aefce241ade110d3cd040c1145b7a3eb5fd5ac23f03ed67f401a \ - --hash=sha256:4c50eb960bff6e05dfc631f6bc00dfabffbcb29c5ff25f676d64daae05ed82fa +mkdocstrings[python]==1.0.3 \ + --hash=sha256:0d66d18430c2201dc7fe85134277382baaa15e6b30979f3f3bdbabd6dbdb6046 \ + --hash=sha256:ab670f55040722b49bb45865b2e93b824450fb4aef638b00d7acb493a9020434 # via # -r docs/requirements.in # mkdocstrings-python -mkdocstrings-python==1.16.12 \ - --hash=sha256:22ded3a63b3d823d57457a70ff9860d5a4de9e8b1e482876fc9baabaf6f5f374 \ - --hash=sha256:9b9eaa066e0024342d433e332a41095c4e429937024945fea511afe58f63175d +mkdocstrings-python==2.0.1 \ + --hash=sha256:66ecff45c5f8b71bf174e11d49afc845c2dfc7fc0ab17a86b6b337e0f24d8d90 \ + --hash=sha256:843a562221e6a471fefdd4b45cc6c22d2607ccbad632879234fa9692e9cf7732 # via mkdocstrings neoteroi-mkdocs==1.2.0 \ --hash=sha256:58e25cb1b9db093ffa8d12bdb33264bf567cac30fb964b56e0a493efa749ad6e \ --hash=sha256:91b6aa95a4e46c9bb93e00e021d2044cb0c7d80c0b4600434ff8f440d613a0a8 # via -r docs/requirements.in -packaging==25.0 \ - --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \ - --hash=sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f +packaging==26.0 \ + --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ + --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 # via + # -c src/backend/requirements.txt # mkdocs # mkdocs-macros-plugin paginate==0.5.7 \ --hash=sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945 \ --hash=sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591 # via mkdocs-material -pathspec==0.12.1 \ - --hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 \ - --hash=sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712 +pathspec==1.0.1 \ + --hash=sha256:8870061f22c58e6d83463cfce9a7dd6eca0512c772c1001fb09ac64091816721 \ + --hash=sha256:e2769b508d0dd47b09af6ee2c75b2744a2cb1f474ae4b1494fd6a1b7a841613c # via # mkdocs # mkdocs-macros-plugin -platformdirs==4.3.8 \ - --hash=sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc \ - --hash=sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4 - # via mkdocs-get-deps +platformdirs==4.9.4 \ + --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ + --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 + # via + # -c src/backend/requirements.txt + # mkdocs-get-deps pygments==2.19.2 \ --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \ --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b # via # mkdocs-material # rich -pymdown-extensions==10.16.1 \ - --hash=sha256:aace82bcccba3efc03e25d584e6a22d27a8e17caa3f4dd9f207e49b787aa9a91 \ - --hash=sha256:d6ba157a6c03146a7fb122b2b9a121300056384eafeec9c9f9e584adfdb2a32d +pymdown-extensions==10.20 \ + --hash=sha256:5c73566ab0cf38c6ba084cb7c5ea64a119ae0500cce754ccb682761dfea13a52 \ + --hash=sha256:ea9e62add865da80a271d00bfa1c0fa085b20d133fb3fc97afdc88e682f60b2f # via # mkdocs-material # mkdocs-mermaid2-plugin @@ -405,6 +465,7 @@ python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 # via + # -c src/backend/requirements.txt # ghp-import # mkdocs-macros-plugin pyyaml==6.0.3 \ @@ -482,6 +543,7 @@ pyyaml==6.0.3 \ --hash=sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926 \ --hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0 # via + # -c src/backend/requirements.txt # essentials-openapi # mkdocs # mkdocs-get-deps @@ -496,53 +558,56 @@ requests==2.32.5 \ --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf # via + # -c src/backend/requirements.txt # mkdocs-macros-plugin # mkdocs-material # mkdocs-mermaid2-plugin -rich==14.1.0 \ - --hash=sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f \ - --hash=sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8 +rich==14.3.3 \ + --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ + --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b # via neoteroi-mkdocs -setuptools==80.9.0 \ - --hash=sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 \ - --hash=sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c - # via mkdocs-mermaid2-plugin +setuptools==82.0.0 \ + --hash=sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb \ + --hash=sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0 + # via + # -c src/backend/requirements.txt + # mkdocs-mermaid2-plugin six==1.17.0 \ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 # via + # -c src/backend/requirements.txt # jsbeautifier # python-dateutil smmap==5.0.2 \ --hash=sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5 \ --hash=sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e # via gitdb -sniffio==1.3.1 \ - --hash=sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 \ - --hash=sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc - # via anyio -soupsieve==2.7 \ - --hash=sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4 \ - --hash=sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a +soupsieve==2.8.1 \ + --hash=sha256:4cf733bc50fa805f5df4b8ef4740fc0e0fa6218cf3006269afd3f9d6d80fd350 \ + --hash=sha256:a11fe2a6f3d76ab3cf2de04eb339c1be5b506a8a47f2ceb6d139803177f85434 # via beautifulsoup4 super-collections==0.6.2 \ --hash=sha256:0c8d8abacd9fad2c7c1c715f036c29f5db213f8cac65f24d45ecba12b4da187a \ --hash=sha256:291b74d26299e9051d69ad9d89e61b07b6646f86a57a2f5ab3063d206eee9c56 # via mkdocs-macros-plugin -termcolor==3.1.0 \ - --hash=sha256:591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa \ - --hash=sha256:6a6dd7fbee581909eeec6a756cff1d7f7c376063b14e4a298dc4980309e55970 +termcolor==3.3.0 \ + --hash=sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5 \ + --hash=sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5 # via mkdocs-macros-plugin -typing-extensions==4.14.1 \ - --hash=sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36 \ - --hash=sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76 +typing-extensions==4.15.0 \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 # via + # -c src/backend/requirements.txt # anyio # beautifulsoup4 -urllib3==2.6.0 \ - --hash=sha256:c90f7a39f716c572c4e3e58509581ebd83f9b59cced005b7db7ad2d22b0db99f \ - --hash=sha256:cb9bcef5a4b345d5da5d145dc3e30834f58e8018828cbc724d30b4cb7d4d49f1 - # via requests +urllib3==2.6.3 \ + --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \ + --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 + # via + # -c src/backend/requirements.txt + # requests watchdog==6.0.0 \ --hash=sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a \ --hash=sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2 \ diff --git a/pyproject.toml b/pyproject.toml index fa2658abfa..9ce50f3710 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -97,7 +97,7 @@ skip-magic-trailing-comma = true line-ending = "auto" [tool.uv.pip] -python-version = "3.11.0" +python-version = "3.11" no-strip-extras=true generate-hashes=true @@ -108,11 +108,12 @@ root = ["src/backend/InvenTree"] unresolved-reference="ignore" # 21 # see https://github.com/astral-sh/ty/issues/220 unresolved-attribute="ignore" # 505 # need Plugin Mixin typing call-non-callable="ignore" # 8 ## +invalid-assignment="ignore" # 17 # need to wait for better django field stubs +invalid-method-override="ignore" # 99 invalid-return-type="ignore" # 22 ## +possibly-missing-attribute="ignore" # 25 # https://github.com/astral-sh/ty/issues/164 +unknown-argument="ignore" # 3 # need to wait for better django field stubs invalid-argument-type="ignore" # 49 -possibly-unbound-attribute="ignore" # 25 # https://github.com/astral-sh/ty/issues/164 -unknown-argument="ignore" # 3 # need to wait for betterdjango field stubs -invalid-assignment="ignore" # 17 # need to wait for betterdjango field stubs no-matching-overload="ignore" # 3 # need to wait for betterdjango field stubs [tool.coverage.run] @@ -139,3 +140,4 @@ django_find_project = false pythonpath = ["src/backend/InvenTree"] DJANGO_SETTINGS_MODULE = "InvenTree.settings" python_files = ["test*.py",] +timeout = "120" diff --git a/src/backend/InvenTree/.gitignore b/src/backend/InvenTree/.gitignore index 4af4473ebe..a91adca39b 100644 --- a/src/backend/InvenTree/.gitignore +++ b/src/backend/InvenTree/.gitignore @@ -1,2 +1,6 @@ # Files generated during unit testing _testfolder/ +_tests_report*.txt + +# Playwright files for CI +InvenTree/static/img/playwright*.png diff --git a/src/backend/InvenTree/InvenTree/api.py b/src/backend/InvenTree/InvenTree/api.py index cd57fb1cc2..369d6ccdea 100644 --- a/src/backend/InvenTree/InvenTree/api.py +++ b/src/backend/InvenTree/InvenTree/api.py @@ -5,15 +5,19 @@ import json from pathlib import Path from django.conf import settings +from django.contrib.contenttypes.models import ContentType from django.db import transaction from django.http import JsonResponse +from django.urls import path, reverse from django.utils.translation import gettext_lazy as _ +from django.views.generic.base import RedirectView import structlog from django_q.models import OrmQ from drf_spectacular.utils import OpenApiParameter, OpenApiResponse, extend_schema from rest_framework import serializers from rest_framework.generics import GenericAPIView +from rest_framework.request import clone_request from rest_framework.response import Response from rest_framework.serializers import ValidationError from rest_framework.views import APIView @@ -22,15 +26,14 @@ import InvenTree.config import InvenTree.permissions import InvenTree.version from common.settings import get_global_setting -from InvenTree import helpers +from InvenTree import helpers, ready from InvenTree.auth_overrides import registration_enabled from InvenTree.mixins import ListCreateAPI -from InvenTree.sso import sso_registration_enabled from plugin.serializers import MetadataSerializer from users.models import ApiToken -from users.permissions import check_user_permission +from users.permissions import check_user_permission, prefetch_rule_sets -from .helpers import plugins_info +from .helpers import plugins_info, str2bool from .helpers_email import is_email_configured from .mixins import ListAPI, RetrieveUpdateAPI from .status import check_system_health, is_worker_running @@ -234,6 +237,7 @@ class InfoApiSerializer(serializers.Serializer): splash = serializers.CharField() login_message = serializers.CharField(allow_null=True) navbar_message = serializers.CharField(allow_null=True) + disable_theme_storage = serializers.BooleanField(default=False) server = serializers.CharField(read_only=True) id = serializers.CharField(read_only=True, allow_null=True) @@ -306,6 +310,9 @@ class InfoView(APIView): 'splash': helpers.getSplashScreen(), 'login_message': helpers.getCustomOption('login_message'), 'navbar_message': helpers.getCustomOption('navbar_message'), + 'disable_theme_storage': str2bool( + helpers.getCustomOption('disable_theme_storage') + ), }, 'active_plugins': plugins_info(), # Following fields are only available to staff users @@ -318,8 +325,8 @@ class InfoView(APIView): if (is_staff and settings.INVENTREE_ADMIN_ENABLED) else None, 'settings': { - 'sso_registration': sso_registration_enabled(), - 'registration_enabled': registration_enabled(), + 'sso_registration': registration_enabled('LOGIN_ENABLE_SSO_REG'), + 'registration_enabled': registration_enabled('LOGIN_ENABLE_REG'), 'password_forgotten_enabled': get_global_setting( 'LOGIN_ENABLE_PWD_FORGOT' ), @@ -416,23 +423,19 @@ class BulkOperationMixin: def get_bulk_queryset(self, request): """Return a queryset based on the selection made in the request. - Selection can be made by providing either: - - - items: A list of primary key values - - filters: A dictionary of filter values + Selection can be made by providing a list of primary key values, + which will be used to filter the queryset. """ - model = self.serializer_class.Meta.model - items = request.data.pop('items', None) - filters = request.data.pop('filters', None) all_filter = request.GET.get('all', None) - queryset = model.objects.all() + # Return the base queryset for this model + queryset = self.get_queryset() - if not items and not filters and all_filter is None: + if not items and all_filter is None: raise ValidationError({ 'non_field_errors': _( - 'List of items or filters must be provided for bulk operation' + 'List of items must be provided for bulk operation' ) }) @@ -450,19 +453,6 @@ class BulkOperationMixin: 'non_field_errors': _('Invalid items list provided') }) - if filters: - if type(filters) is not dict: - raise ValidationError({ - 'non_field_errors': _('Filters must be provided as a dict') - }) - - try: - queryset = queryset.filter(**filters) - except Exception: - raise ValidationError({ - 'non_field_errors': _('Invalid filters provided') - }) - if all_filter and not helpers.str2bool(all_filter): raise ValidationError({ 'non_field_errors': _('All filter must only be used with true') @@ -500,7 +490,7 @@ class BulkCreateMixin: if unique_create_fields := getattr(self, 'unique_create_fields', None): existing = collections.defaultdict(list) for idx, item in enumerate(data): - key = tuple(item[v] for v in unique_create_fields) + key = tuple(item[v] for v in list(unique_create_fields)) existing[key].append(idx) unique_errors = [[] for _ in range(len(data))] @@ -587,17 +577,24 @@ class BulkUpdateMixin(BulkOperationMixin): n = queryset.count() + instance_data = [] + with transaction.atomic(): # Perform object update # Note that we do not perform a bulk-update operation here, # as we want to trigger any custom post_save methods on the model + + # Run validation first for instance in queryset: serializer = self.get_serializer(instance, data=data, partial=True) - serializer.is_valid(raise_exception=True) serializer.save() - return Response({'success': f'Updated {n} items'}, status=200) + instance_data.append(serializer.data) + + return Response( + {'success': f'Updated {n} items', 'items': instance_data}, status=200 + ) class ParameterListMixin: @@ -764,6 +761,13 @@ class APISearchView(GenericAPIView): search_filters = self.get_result_filters() + # Create a clone of the request object to modify + # Use GET method for the individual list views + cloned_request = clone_request(request, 'GET') + + # Fetch and cache all groups associated with the current user + groups = prefetch_rule_sets(request.user) + for key, cls in self.get_result_types().items(): # Only return results which are specifically requested if key in data: @@ -787,57 +791,145 @@ class APISearchView(GenericAPIView): view = cls() # Override regular query params with specific ones for this search request - request._request.GET = params - view.request = request + cloned_request._request.GET = params + view.request = cloned_request view.format_kwarg = 'format' # Check permissions and update results dict with particular query model = view.serializer_class.Meta.model + if not check_user_permission( + request.user, model, 'view', groups=groups + ): + results[key] = { + 'error': _('User does not have permission to view this model') + } + continue + try: - if check_user_permission(request.user, model, 'view'): - results[key] = view.list(request, *args, **kwargs).data - else: - results[key] = { - 'error': _( - 'User does not have permission to view this model' - ) - } + results[key] = view.list(request, *args, **kwargs).data except Exception as exc: results[key] = {'error': str(exc)} return Response(results) -class MetadataView(RetrieveUpdateAPI): - """Generic API endpoint for reading and editing metadata for a model.""" +class GenericMetadataView(RetrieveUpdateAPI): + """Metadata for specific instance; see https://docs.inventree.org/en/stable/plugins/metadata/ for more detail on how metadata works. Most core models support metadata.""" model = None # Placeholder for the model class - - @classmethod - def as_view(cls, model, lookup_field=None, **initkwargs): - """Override to ensure model specific rendering.""" - if model is None: - raise ValidationError( - "MetadataView defined without 'model' arg" - ) # pragma: no cover - initkwargs['model'] = model - - # Set custom lookup field (instead of default 'pk' value) if supplied - if lookup_field: - initkwargs['lookup_field'] = lookup_field - - return super().as_view(**initkwargs) + serializer_class = MetadataSerializer + permission_classes = [InvenTree.permissions.ContentTypePermission] def get_permission_model(self): """Return the 'permission' model associated with this view.""" - return self.model + model_name = self.kwargs.get('model', None) + + if model_name is None: + raise ValidationError( + "GenericMetadataView called without 'model' URL parameter" + ) # pragma: no cover + + model = ContentType.objects.filter(model=model_name).first() + + if model is None: + raise ValidationError( + f"GenericMetadataView called with invalid model '{model_name}'" + ) # pragma: no cover + + return model.model_class() def get_queryset(self): """Return the queryset for this endpoint.""" - return self.model.objects.all() + model = self.get_permission_model() + return model.objects.all() def get_serializer(self, *args, **kwargs): """Return MetadataSerializer instance.""" + is_gen = ready.isGeneratingSchema() # Detect if we are currently generating the OpenAPI schema + if self.model is None and not is_gen: + self.model = self.get_permission_model() + if self.model is None and is_gen: + # Provide a default model for schema generation + import users.models + + self.model = users.models.User return MetadataSerializer(self.model, *args, **kwargs) + + def dispatch(self, request, *args, **kwargs): + """Override dispatch to set lookup field dynamically.""" + self.lookup_field = self.kwargs.get('lookup_field', 'pk') + self.lookup_url_kwarg = ( + 'lookup_value' if 'lookup_field' in self.kwargs else 'pk' + ) + return super().dispatch(request, *args, **kwargs) + + +class SimpleGenericMetadataView(GenericMetadataView): + """Simplified version of GenericMetadataView which always uses 'pk' as the lookup field.""" + + def dispatch(self, request, *args, **kwargs): + """Override dispatch to set lookup field to 'pk'.""" + self.lookup_field = 'pk' + self.lookup_url_kwarg = None + return super().dispatch(request, *args, **kwargs) + + @extend_schema(operation_id='metadata_pk_retrieve') + def get(self, request, *args, **kwargs): + """Perform a GET request to retrieve metadata for the given object.""" + return super().get(request, *args, **kwargs) + + @extend_schema(operation_id='metadata_pk_update') + def put(self, request, *args, **kwargs): + """Perform a PUT request to update metadata for the given object.""" + return super().put(request, *args, **kwargs) + + @extend_schema(operation_id='metadata_pk_partial_update') + def patch(self, request, *args, **kwargs): + """Perform a PATCH request to partially update metadata for the given object.""" + return super().patch(request, *args, **kwargs) + + +class MetadataRedirectView(RedirectView): + """Redirect to the generic metadata view for a given model.""" + + model_name = None # Placeholder for the model class + lookup_field = 'pk' + lookup_field_ref = 'pk' + permanent = True + + def get_redirect_url(self, *args, **kwargs) -> str | None: + """Return the redirect URL for this view.""" + _kwargs = { + 'model': self.model_name, + 'lookup_value': self.kwargs.get(self.lookup_field_ref, None), + 'lookup_field': self.lookup_field, + } + return reverse('api-generic-metadata', args=args, kwargs=_kwargs) + + +def meta_path(model, lookup_field: str = 'pk', lookup_field_ref: str = 'pk'): + """Helper function for constructing metadata path for a given model. + + Arguments: + model: The model class to use + lookup_field: The lookup field to use (if not 'pk') + lookup_field_ref: The reference name for the lookup field in the request(if not 'pk') + + Returns: + A path to the generic metadata view for the given model + """ + if model is None: + raise ValidationError( + "redirect_metadata_view called without 'model' arg" + ) # pragma: no cover + + return path( + 'metadata/', + MetadataRedirectView.as_view( + model_name=model._meta.model_name, + lookup_field=lookup_field, + lookup_field_ref=lookup_field_ref, + ), + ) diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index 35d64fcb0d..38cd67318d 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,11 +1,117 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 435 +INVENTREE_API_VERSION = 467 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v467 -> 2026-03-20 : https://github.com/inventree/InvenTree/pull/11573 + - Fix definition for the "parent" field on the StockItemSerializer + +v466 -> 2026-03-17 : https://github.com/inventree/InvenTree/pull/11525 + - SalesOrderShipmentComplete endpoint now returns a task ID which can be used to track the progress of the shipment completion process + +v465 -> 2026-03-16 : https://github.com/inventree/InvenTree/pull/11529/ + - BuildOrderAutoAllocate endpoint now returns a task ID which can be used to track the progress of the auto-allocation process + - BuildOrderConsume endpoint now returns a task ID which can be used to track the progress of the stock consumption process + +v464 -> 2026-03-15 : https://github.com/inventree/InvenTree/pull/11527 + - Add API endpoint for monitoring the progress of a particular background task + +v463 -> 2026-03-12 : https://github.com/inventree/InvenTree/pull/11499 + - Allow "bulk update" actions against StockItem endpoint + +v462 -> 2026-03-12 : https://github.com/inventree/InvenTree/pull/11497 + - Allow "ScheduledTask" API endpoint to be filtered by "name" field + +v461 -> 2026-03-10 : https://github.com/inventree/InvenTree/pull/11479 + - Adds option to copy parameters when duplicating an order via the API + +v460 -> 2026-02-25 : https://github.com/inventree/InvenTree/pull/11374 + - Adds "updated_at" field to PurchaseOrder, SalesOrder and ReturnOrder API endpoints + - Adds "updated_before" and "updated_after" date filters to all three order list endpoints + - Adds "updated_at" ordering option to all three order list endpoints + +v459 -> 2026-02-23 : https://github.com/inventree/InvenTree/pull/11411 + - Changed PurchaseOrderLine "auto_pricing" default value from true to false + +v458 -> 2026-02-22 : https://github.com/inventree/InvenTree/pull/11401 + - Switches token refresh endpoint to use POST instead of GET (upstream allauth change) + +v457 -> 2026-02-11 : https://github.com/inventree/InvenTree/pull/10887 + - Extend the "auto allocate" wizard API to include tracked items + +v456 -> 2026-02-20 : https://github.com/inventree/InvenTree/pull/11303 + - Adds "primary" field to the SupplierPart API + - Removes "default_supplier" field from the Part API + +v455 -> 2026-02-19 : https://github.com/inventree/InvenTree/pull/11383 + - Adds "exists_for_model_id" filter to ParameterTemplate API endpoint + - Adds "exists_for_related_model" filter to ParameterTemplate API endpoint + - Adds "exists_for_related_model_id" filter to ParameterTemplate API endpoint + +v454 -> 2026-02-19 : https://github.com/inventree/InvenTree/pull/11379 + - Adds "purchase_price" ordering option to StockItem API endpoint + +v453 -> 2026-02-11 : https://github.com/inventree/InvenTree/pull/11244 + - Adds (internal) endpoint to end a observability tooling session + +v452 -> 2026-02-10 : https://github.com/inventree/InvenTree/pull/11276 + - Adds "install_into_detail" field to the BuildItem API endpoint + +v451 -> 2026-02-10 : https://github.com/inventree/InvenTree/pull/11277 + - Adds sorting to multiple part related endpoints (part, IPN, ...) + +v450 -> 2026-02-10 : https://github.com/inventree/InvenTree/pull/11260 + - Adds "part" field to the StockItemTracking model and API endpoints + - Additional filtering options for the StockItemTracking API endpoint + +v449 -> 2026-02-07 : https://github.com/inventree/InvenTree/pull/11266 + - Add missing nullable annotations to PartStocktakeSerializer + +v448 -> 2026-02-05 : https://github.com/inventree/InvenTree/pull/11257 + - Adds API endpoint for manually generating a stocktake entry + +v447 -> 2026-02-02 : https://github.com/inventree/InvenTree/pull/11242 + - Adds "sub_part_active" filter to BomItem API endpoint + +v446 -> 2026-02-01 : https://github.com/inventree/InvenTree/pull/11232 + - Allow ordering of test results by started_datetime and finished_datetime fields + - Allow ordering of test results by test_station field + +v445 -> 2026-01-29 : https://github.com/inventree/InvenTree/pull/11102 + - Added "allocated_lines" field to SalesOrderSerializer to track fully allocated line items + +v444 -> 2026-01-27 : https://github.com/inventree/InvenTree/pull/11208 + - Add customize option to disable theme loading from user profile (mainly for demo site use) + +v443 -> 2026-01-21 : https://github.com/inventree/InvenTree/pull/11177 + - Adds IPN ordering option for BomItem API endpoint + - Adds IPN ordering option for BuildLine API endpoint + +v442 -> 2026-01-17 : https://github.com/inventree/InvenTree/pull/11157 + - Typo fixes, no functional changes + +v441 -> 2026-01-17 : https://github.com/inventree/InvenTree/pull/11153 + - Allow export of supplier part pricing data + +v440 -> 2026-01-15 : https://github.com/inventree/InvenTree/pull/10796 + - Adds confirm and confirm_text to all settings + +v439 -> 2026-01-09 : https://github.com/inventree/InvenTree/pull/11092 + - Add missing nullable annotations + +v438 -> 2026-01-09 : https://github.com/inventree/InvenTree/pull/11104 + - Adds a simpler / faster health check endpoint at /api/system/health/ + +v437 -> 2026-01-07 : https://github.com/inventree/InvenTree/pull/11084 + - Adds generic parameter support for the StockLocation model + +v436 -> 2026-01-06 : https://github.com/inventree/InvenTree/pull/11035 + - Removes model-specific metadata endpoints and replaces them with redirects + - Adds new generic /api/metadata// endpoint to retrieve metadata for any model + v435 -> 2025-12-16 : https://github.com/inventree/InvenTree/pull/11030 - Adds token refresh endpoint to auth API diff --git a/src/backend/InvenTree/InvenTree/apps.py b/src/backend/InvenTree/InvenTree/apps.py index 16e634e023..50d5b6ae5d 100644 --- a/src/backend/InvenTree/InvenTree/apps.py +++ b/src/backend/InvenTree/InvenTree/apps.py @@ -65,10 +65,12 @@ class InvenTreeConfig(AppConfig): self.start_background_tasks() if not InvenTree.ready.isInTestMode(): # pragma: no cover - # Update exchange rates - InvenTree.tasks.offload_task(InvenTree.tasks.update_exchange_rates) # Let the background worker check for migrations InvenTree.tasks.offload_task(InvenTree.tasks.check_for_migrations) + # Update exchange rates + InvenTree.tasks.offload_task( + InvenTree.tasks.update_exchange_rates, force_async=True + ) self.update_site_url() self.load_unit_registry() @@ -331,6 +333,11 @@ class InvenTreeConfig(AppConfig): if MIGRATIONS_CHECK_DONE: return + # Exit early if we are not in a state where we can access the database, + # otherwise we might end up in a deadlock situation + if not InvenTree.ready.canAppAccessDatabase(): + return + if not InvenTree.tasks.check_for_migrations(): # Detect if this an empty database - if so, start with a fresh migration if ( diff --git a/src/backend/InvenTree/InvenTree/auth_overrides.py b/src/backend/InvenTree/InvenTree/auth_overrides.py index 9b23879838..9a223dd2f9 100644 --- a/src/backend/InvenTree/InvenTree/auth_overrides.py +++ b/src/backend/InvenTree/InvenTree/auth_overrides.py @@ -1,5 +1,7 @@ """Overrides for allauth and adjacent packages to enforce InvenTree specific auth settings and restirctions.""" +from typing import Literal + from django import forms from django.conf import settings from django.contrib.auth.models import Group @@ -14,10 +16,10 @@ from allauth.account.forms import LoginForm, SignupForm, set_form_field_order from allauth.headless.adapter import DefaultHeadlessAdapter from allauth.socialaccount.adapter import DefaultSocialAccountAdapter -import InvenTree.sso from common.settings import get_global_setting from InvenTree.exceptions import log_error +from .helpers import str2bool from .helpers_email import is_email_configured logger = structlog.get_logger('inventree') @@ -85,12 +87,12 @@ class CustomSignupForm(SignupForm): return cleaned_data -def registration_enabled(): +RegistrationKeys = Literal['LOGIN_ENABLE_REG', 'LOGIN_ENABLE_SSO_REG'] + + +def registration_enabled(setting_name: RegistrationKeys = 'LOGIN_ENABLE_REG'): """Determine whether user registration is enabled.""" - if ( - get_global_setting('LOGIN_ENABLE_REG') - or InvenTree.sso.sso_registration_enabled() - ): + if str2bool(get_global_setting(setting_name)): if is_email_configured(): return True else: @@ -103,13 +105,18 @@ def registration_enabled(): class RegistrationMixin: """Mixin to check if registration should be enabled.""" + REGISTRATION_SETTING: RegistrationKeys = 'LOGIN_ENABLE_REG' + def is_open_for_signup(self, request, *args, **kwargs): """Check if signup is enabled in settings. Configure the class variable `REGISTRATION_SETTING` to set which setting should be used, default: `LOGIN_ENABLE_REG`. """ - if registration_enabled(): - return super().is_open_for_signup(request, *args, **kwargs) + if registration_enabled(self.REGISTRATION_SETTING): + return True + logger.warning( + f'INVE-W12: Signup attempt blocked, because registration is disabled via setting {self.REGISTRATION_SETTING}.' + ) return False def clean_email(self, email): @@ -187,6 +194,8 @@ class CustomAccountAdapter(RegistrationMixin, DefaultAccountAdapter): class CustomSocialAccountAdapter(RegistrationMixin, DefaultSocialAccountAdapter): """Override of adapter to use dynamic settings.""" + REGISTRATION_SETTING = 'LOGIN_ENABLE_SSO_REG' + def is_auto_signup_allowed(self, request, sociallogin): """Check if auto signup is enabled in settings.""" if get_global_setting('LOGIN_SIGNUP_SSO_AUTO', True): diff --git a/src/backend/InvenTree/InvenTree/backends.py b/src/backend/InvenTree/InvenTree/backends.py index 29cb505696..a80fc3d6fb 100644 --- a/src/backend/InvenTree/InvenTree/backends.py +++ b/src/backend/InvenTree/InvenTree/backends.py @@ -84,10 +84,11 @@ class InvenTreeMaintenanceModeBackend(AbstractStateBackend): r -= 1 - if r == 0: - logger.warning( - 'Failed to set maintenance mode state after %s retries', retries - ) + # Disable this warning message (for now) as it is confusing users with no upside + # if r == 0: + # logger.warning( + # 'Failed to set maintenance mode state after %s retries', retries + # ) class InvenTreeMailLoggingBackend(BaseEmailBackend): diff --git a/src/backend/InvenTree/InvenTree/backup.py b/src/backend/InvenTree/InvenTree/backup.py index 9a14da11b3..bb08308124 100644 --- a/src/backend/InvenTree/InvenTree/backup.py +++ b/src/backend/InvenTree/InvenTree/backup.py @@ -5,7 +5,16 @@ We use the django-dbbackup library to handle backup and restore operations. Ref: https://archmonger.github.io/django-dbbackup/latest/configuration/ """ +from datetime import datetime, timedelta + +from django.conf import settings + +import structlog + import InvenTree.config +import InvenTree.version + +logger = structlog.get_logger('inventree') def get_backup_connector_options() -> dict: @@ -131,3 +140,131 @@ def backup_media_filename_template() -> str: default_value='InvenTree-media-{datetime}.{extension}', typecast=str, ) + + +# schema for backup metadata +InvenTreeBackupMetadata = dict[str, str | int | bool | None] + + +def _gather_environment_metadata() -> InvenTreeBackupMetadata: + """Gather metadata about the current environment to be stored with the backup.""" + import plugin.installer + + new_data: InvenTreeBackupMetadata = {} + + new_data['ivt_1_debug'] = settings.DEBUG + new_data['ivt_1_version'] = InvenTree.version.inventreeVersion() + new_data['ivt_1_version_api'] = InvenTree.version.inventreeApiVersion() + new_data['ivt_1_plugins_enabled'] = settings.PLUGINS_ENABLED + new_data['ivt_1_plugins_file_hash'] = plugin.installer.plugins_file_hash() + new_data['ivt_1_installer'] = InvenTree.config.inventreeInstaller() + new_data['ivt_1_backup_time'] = datetime.now().isoformat() + + return new_data + + +def _parse_environment_metadata(metadata: InvenTreeBackupMetadata) -> dict[str, str]: + """Parse backup metadata to extract environment information.""" + data = {} + + data['debug'] = metadata.get('ivt_1_debug', False) + data['version'] = metadata.get('ivt_1_version', 'unknown') + data['version_api'] = metadata.get('ivt_1_version_api', 'unknown') + data['plugins_enabled'] = metadata.get('ivt_1_plugins_enabled', False) + data['plugins_file_hash'] = metadata.get('ivt_1_plugins_file_hash', 'unknown') + data['installer'] = metadata.get('ivt_1_installer', 'unknown') + data['backup_time'] = metadata.get('ivt_1_backup_time', 'unknown') + + return data + + +def metadata_set(metadata) -> InvenTreeBackupMetadata: + """Set backup metadata for the current backup operation.""" + return _gather_environment_metadata() + + +def validate_restore(metadata: InvenTreeBackupMetadata) -> bool | None: + """Validate whether a backup restore operation should proceed, based on the provided metadata.""" + if metadata.get('ivt_1_version') is None: + logger.warning( + 'INVE-W13: Backup metadata does not contain version information', + error_code='INVE-W13', + ) + return True + + current_environment = _parse_environment_metadata(_gather_environment_metadata()) + backup_environment = _parse_environment_metadata(metadata) + + # Version mismatch + if backup_environment['version'] != current_environment['version']: + logger.warning( + f'INVE-W13: Backup being restored was created with InvenTree version {backup_environment["version"]}, but current version is {current_environment["version"]}', + error_code='INVE-W13', + ) + + # Backup is from newer version - fail + try: + if int(backup_environment['version_api']) > int( + str(current_environment['version_api']) + ): + logger.error( + 'INVE-E16: Backup being restored was created with a newer version of InvenTree - restore cannot proceed. If you are using the invoke task for your restore this warning might be overridden once with `--restore-allow-newer-version`', + error_code='INVE-E16', + ) + # Check for pass flag to allow restore + if not settings.BACKUP_RESTORE_ALLOW_NEWER_VERSION: # defaults to False + return False + else: + logger.warning( + 'INVE-W13: Backup restore is allowing a restore from a newer version of InvenTree - this can lead to data loss or corruption', + error_code='INVE-W13', + ) + except ValueError: # pragma: no cover + logger.warning( + 'INVE-W13: Could not parse API version from backup metadata - cannot determine if backup is from newer version', + error_code='INVE-W13', + ) + + # Plugins enabled on backup but not restore environment - warn + if ( + backup_environment['plugins_enabled'] + and not current_environment['plugins_enabled'] + ): + logger.warning( + 'INVE-W13: Backup being restored was created with plugins enabled, but current environment has plugins disabled - this can lead to data loss', + error_code='INVE-W13', + ) + + # Plugins file hash mismatch - warn + if pg_hash := backup_environment['plugins_file_hash']: + if pg_hash != current_environment['plugins_file_hash']: + logger.warning( + 'INVE-W13: Backup being restored has a different plugins file hash to the current environment - this can lead to data loss or corruption', + error_code='INVE-W13', + ) + + # Installer mismatch - warn + if installer := backup_environment['installer']: + if installer != current_environment['installer']: + logger.warning( + f"INVE-W13: Backup being restored was created with installer '{installer}', but current environment has installer '{current_environment['installer']}'", + error_code='INVE-W13', + ) + + # Age of backup + last_backup_time = backup_environment.get('backup_time') + if datetime.now() - datetime.fromisoformat(last_backup_time) > timedelta(days=120): + logger.warning( + f'INVE-W13: Backup being restored is over 120 days old (last backup time: {last_backup_time})', + error_code='INVE-W13', + ) + + if settings.DEBUG: # pragma: no cover + logger.info( + f'INVE-I3: Backup environment: {backup_environment}', error_code='INVE-I3' + ) + logger.info( + f'INVE-I3: Current environment: {current_environment}', error_code='INVE-I3' + ) + + return True diff --git a/src/backend/InvenTree/InvenTree/config.py b/src/backend/InvenTree/InvenTree/config.py index 7392543441..d71d80e567 100644 --- a/src/backend/InvenTree/InvenTree/config.py +++ b/src/backend/InvenTree/InvenTree/config.py @@ -191,7 +191,7 @@ def load_config_data(set_cache: bool = False) -> map | None: if CONFIG_DATA is not None and not set_cache: return CONFIG_DATA - import yaml + import yaml.parser cfg_file = get_config_file() diff --git a/src/backend/InvenTree/InvenTree/exceptions.py b/src/backend/InvenTree/InvenTree/exceptions.py index dbb623eb5b..161860339d 100644 --- a/src/backend/InvenTree/InvenTree/exceptions.py +++ b/src/backend/InvenTree/InvenTree/exceptions.py @@ -66,7 +66,7 @@ def log_error( data = error_data else: try: - formatted_exception = traceback.format_exception(kind, info, data) # type: ignore[no-matching-overload] + formatted_exception = traceback.format_exception(kind, info, data) data = '\n'.join(formatted_exception) except AttributeError: data = 'No traceback information available' diff --git a/src/backend/InvenTree/InvenTree/filters.py b/src/backend/InvenTree/InvenTree/filters.py index 78c5c5e455..44319b843f 100644 --- a/src/backend/InvenTree/InvenTree/filters.py +++ b/src/backend/InvenTree/InvenTree/filters.py @@ -111,9 +111,11 @@ class InvenTreeOrderingFilter(filters.OrderingFilter): def get_ordering(self, request, queryset, view): """Override ordering for supporting aliases.""" - ordering = super().get_ordering(request, queryset, view) + ordering = list(super().get_ordering(request, queryset, view) or []) aliases = getattr(view, 'ordering_field_aliases', None) + lookup_field = getattr(view, 'lookup_field', 'pk') + lookup_reversed = len(ordering) > 0 and ordering[-1].startswith('-') # Attempt to map ordering fields based on provided aliases if ordering is not None and aliases is not None: @@ -123,9 +125,8 @@ class InvenTreeOrderingFilter(filters.OrderingFilter): ordering = [] for field in ordering_initial: - reverse = field.startswith('-') - - if reverse: + field_reversed = field.startswith('-') + if field_reversed: field = field[1:] # Are aliases defined for this field? @@ -153,11 +154,22 @@ class InvenTreeOrderingFilter(filters.OrderingFilter): continue for a in alias: - if reverse: + if field_reversed: a = '-' + a ordering.append(a) + # Ensure that any API filtering appends the primary-key field + # This is to prevent "ambiguous ordering" errors across pagination boundaries + # Ref: https://github.com/inventree/InvenTree/issues/11442 + if lookup_field and not any( + field in ordering for field in [lookup_field, f'-{lookup_field}'] + ): + if lookup_reversed: + ordering.append(f'-{lookup_field}') + else: + ordering.append(lookup_field) + return ordering @@ -220,18 +232,10 @@ class NumericInFilter(rest_filters.BaseInFilter): return super().filter(qs, numeric_values) -SEARCH_ORDER_FILTER = [ - drf_backend.DjangoFilterBackend, - InvenTreeSearchFilter, - filters.OrderingFilter, -] +ORDER_FILTER = [drf_backend.DjangoFilterBackend, InvenTreeOrderingFilter] -SEARCH_ORDER_FILTER_ALIAS = [ +SEARCH_ORDER_FILTER = [ drf_backend.DjangoFilterBackend, InvenTreeSearchFilter, InvenTreeOrderingFilter, ] - -ORDER_FILTER = [drf_backend.DjangoFilterBackend, filters.OrderingFilter] - -ORDER_FILTER_ALIAS = [drf_backend.DjangoFilterBackend, InvenTreeOrderingFilter] diff --git a/src/backend/InvenTree/InvenTree/helpers.py b/src/backend/InvenTree/InvenTree/helpers.py index 3acf31c67d..344aa7bde0 100644 --- a/src/backend/InvenTree/InvenTree/helpers.py +++ b/src/backend/InvenTree/InvenTree/helpers.py @@ -199,7 +199,7 @@ def regenerate_imagefile(_file, _name: str): _name: Name of the variation (e.g. 'thumbnail', 'preview') """ name = _file.field.attr_class.get_variation_name(_file.name, _name) - return ImageFieldFile(_file.instance, _file, name) # type: ignore + return ImageFieldFile(_file.instance, _file, name) # ty:ignore[too-many-positional-arguments] def image2name(img_obj: StdImageField, do_preview: bool, do_thumbnail: bool): @@ -229,8 +229,15 @@ def getStaticUrl(filename): return os.path.join(STATIC_URL, str(filename)) -def TestIfImage(img): - """Test if an image file is indeed an image.""" +def TestIfImage(img) -> bool: + """Test if an image file is indeed an image. + + Arguments: + img: A file-like object + + Returns: + True if the file is a valid image, False otherwise + """ try: Image.open(img).verify() return True @@ -248,9 +255,15 @@ def getBlankThumbnail(): return getStaticUrl('img/blank_image.thumbnail.png') +def checkStaticFile(*args) -> bool: + """Check if a file exists in the static storage.""" + static_storage = StaticFilesStorage() + fn = os.path.join(*args) + return static_storage.exists(fn) + + def getLogoImage(as_file=False, custom=True): """Return the InvenTree logo image, or a custom logo if available.""" - """Return the path to the logo-file.""" if custom and settings.CUSTOM_LOGO: static_storage = StaticFilesStorage() @@ -312,7 +325,7 @@ def TestIfImageURL(url): ] -def str2bool(text, test=True): +def str2bool(text, test=True) -> bool: """Test if a string 'looks' like a boolean value. Args: diff --git a/src/backend/InvenTree/InvenTree/helpers_email.py b/src/backend/InvenTree/InvenTree/helpers_email.py index 74d189d5d2..f6dca007f2 100644 --- a/src/backend/InvenTree/InvenTree/helpers_email.py +++ b/src/backend/InvenTree/InvenTree/helpers_email.py @@ -8,6 +8,7 @@ import structlog from allauth.account.models import EmailAddress import InvenTree.ready +import InvenTree.tasks as tasks from common.models import Priority, issue_mail logger = structlog.get_logger('inventree') @@ -98,7 +99,7 @@ def send_email( ) return False, 'INVE-W7: no from_email or DEFAULT_FROM_EMAIL specified' - InvenTree.tasks.offload_task( + tasks.offload_task( issue_mail, subject=subject, body=body, @@ -122,7 +123,8 @@ def get_email_for_user(user) -> Optional[str]: # Otherwise, find first matching email # Priority is given to primary or verified email addresses if ( - email := EmailAddress.objects.filter(user=user) + email := EmailAddress.objects + .filter(user=user) .order_by('-primary', '-verified') .first() ): diff --git a/src/backend/InvenTree/InvenTree/management/commands/migrate_icons.py b/src/backend/InvenTree/InvenTree/management/commands/migrate_icons.py index 1ff5e6fd62..ee8456fe4f 100644 --- a/src/backend/InvenTree/InvenTree/management/commands/migrate_icons.py +++ b/src/backend/InvenTree/InvenTree/management/commands/migrate_icons.py @@ -99,7 +99,7 @@ class Command(BaseCommand): if kwargs['include_items']: icons[icon]['items'].append({ 'model': model.__name__.lower(), - 'id': item.id, # type: ignore + 'id': item.id, }) self.stdout.write(f'Writing icon map for {len(icons.keys())} icons') diff --git a/src/backend/InvenTree/InvenTree/management/commands/remove_mfa.py b/src/backend/InvenTree/InvenTree/management/commands/remove_mfa.py index a7a1a038dd..4d030300f9 100644 --- a/src/backend/InvenTree/InvenTree/management/commands/remove_mfa.py +++ b/src/backend/InvenTree/InvenTree/management/commands/remove_mfa.py @@ -13,33 +13,59 @@ class Command(BaseCommand): def add_arguments(self, parser): """Add the arguments.""" - parser.add_argument('mail', type=str) + parser.add_argument('--mail', type=str, nargs='?') + parser.add_argument('--username', type=str, nargs='?') - def handle(self, *args, mail, **kwargs): - """Remove MFA for the supplied user (by mail).""" + def handle(self, *args, mail, username, **kwargs): + """Remove MFA for the supplied user (by mail or username).""" user = get_user_model() - mfa_user = [ - *set( - user.objects.filter(email=mail) - | user.objects.filter(emailaddress__email=mail) - ) - ] + mfa_user = [] + success = False - if len(mfa_user) == 0: - logger.warning('No user with this mail associated') - elif len(mfa_user) > 1: - emails_list = ', '.join( - sorted( - {b.email for a in mfa_user for b in a.emailaddress_set.all()} - | {a.email for a in mfa_user} + if mail is not None: + mfa_user = [ + *set( + user.objects.filter(email=mail) + | user.objects.filter(emailaddress__email=mail) ) - ) - usernames_list = ', '.join(sorted({a.username for a in mfa_user})) - logger.error( - f"Multiple users found with the provided email; Usernames: '{usernames_list}', Emails: '{emails_list}'" - ) + ] + if len(mfa_user) == 0: + logger.warning('No user with this mail associated') + elif len(mfa_user) > 1: + emails_list = ', '.join( + sorted( + {b.email for a in mfa_user for b in a.emailaddress_set.all()} + | {a.email for a in mfa_user} + ) + ) + usernames_list = ', '.join(sorted({a.username for a in mfa_user})) + logger.error( + f"Multiple users found with the provided email; Usernames: '{usernames_list}', Emails: '{emails_list}'" + ) + else: + # found exactly one user + success = True + + elif username is not None: + mfa_user = user.objects.filter(username=username) + if len(mfa_user) == 0: + logger.warning('No user with this username associated') + elif ( + len(mfa_user) > 1 + ): # pragma: no cover # Should not be possible due to unique constraint + logger.error('Multiple users found with the provided username') + else: + # found exactly one user + success = True + else: - # and clean out all MFA methods + logger.error('No mail or username provided') + raise ValueError( + 'Error: one of the following arguments is required: mail, username' + ) + + # Clean out all MFA methods + if success: auths = mfa_user[0].authenticator_set.all() length = len(auths) auths.delete() diff --git a/src/backend/InvenTree/InvenTree/management/commands/schema.py b/src/backend/InvenTree/InvenTree/management/commands/schema.py index 5f7022411f..c71e664a94 100644 --- a/src/backend/InvenTree/InvenTree/management/commands/schema.py +++ b/src/backend/InvenTree/InvenTree/management/commands/schema.py @@ -71,7 +71,8 @@ class Command(spectacular.Command): for p_name, p_spec in spec['paths'].items(): # strip path name p_name = ( - p_name.removeprefix(dja_path_prefix) + p_name + .removeprefix(dja_path_prefix) .removeprefix('/_allauth/browser/v1/') .removeprefix('/_allauth/app/v1/') ) diff --git a/src/backend/InvenTree/InvenTree/metadata.py b/src/backend/InvenTree/InvenTree/metadata.py index c45c20e832..86cbc91229 100644 --- a/src/backend/InvenTree/InvenTree/metadata.py +++ b/src/backend/InvenTree/InvenTree/metadata.py @@ -5,7 +5,7 @@ from django.http import Http404 from django.urls import reverse import structlog -from rest_framework import exceptions, serializers +from rest_framework import exceptions, permissions, serializers from rest_framework.fields import empty from rest_framework.metadata import SimpleMetadata from rest_framework.request import clone_request @@ -131,10 +131,26 @@ class InvenTreeMetadata(SimpleMetadata): # Remove any HTTP methods that the user does not have permission for for method, permission in rolemap.items(): + # general model / role permission result = check_user_permission(user, self.model, permission) or ( role_required and check_user_role(user, role_required, permission) ) + # check if simple IsAuthenticated permission class is used + if not result: + result = ( + view.permission_classes + and len(view.permission_classes) == 1 + and any( + perm + in [ + permissions.IsAuthenticated, + InvenTree.permissions.IsAuthenticatedOrReadScope, + ] + for perm in view.permission_classes + ) + ) + if method in actions and not result: del actions[method] diff --git a/src/backend/InvenTree/InvenTree/middleware.py b/src/backend/InvenTree/InvenTree/middleware.py index 60b3dbe48a..efed42d59c 100644 --- a/src/backend/InvenTree/InvenTree/middleware.py +++ b/src/backend/InvenTree/InvenTree/middleware.py @@ -42,7 +42,7 @@ def get_token_from_request(request): def ensure_slashes(path: str): - """Ensure that slashes are suroudning the passed path.""" + """Ensure that slashes are surrounding the passed path.""" if not path.startswith('/'): path = f'/{path}' if not path.endswith('/'): @@ -59,6 +59,7 @@ urls = [ paths_ignore_handling = [ '/api/', + '/plugin/', reverse('auth-check'), settings.MEDIA_URL, settings.STATIC_URL, @@ -68,7 +69,7 @@ paths_ignore_handling = [ paths_own_security = [ '/api/', # DRF handles API '/o/', # oAuth2 library - has its own auth model - '/anymail/', # Mails - wehbhooks etc + '/anymail/', # Mails - webhooks etc '/accounts/', # allauth account management - has its own auth model '/assets/', # Web assets - only used for testing, no security model needed ensure_slashes( @@ -322,7 +323,7 @@ class InvenTreeHostSettingsMiddleware(MiddlewareMixin): # treat the accessed scheme and host accessed_scheme = request._current_scheme_host - referer = urlsplit(accessed_scheme) + referrer = urlsplit(accessed_scheme) site_url = urlsplit(settings.SITE_URL) @@ -330,8 +331,8 @@ class InvenTreeHostSettingsMiddleware(MiddlewareMixin): site_url_match = ( ( # Exact match on domain - is_same_domain(referer.netloc, site_url.netloc) - and referer.scheme == site_url.scheme + is_same_domain(referrer.netloc, site_url.netloc) + and referrer.scheme == site_url.scheme ) or ( # Lax protocol match, accessed URL starts with SITE_URL @@ -341,7 +342,7 @@ class InvenTreeHostSettingsMiddleware(MiddlewareMixin): or ( # Lax protocol match, same domain settings.SITE_LAX_PROTOCOL_CHECK - and referer.hostname == site_url.hostname + and referrer.hostname == site_url.hostname ) ) @@ -367,7 +368,7 @@ class InvenTreeHostSettingsMiddleware(MiddlewareMixin): trusted_origins_match = ( # Matching domain found in allowed origins any( - is_same_domain(referer.netloc, host) + is_same_domain(referrer.netloc, host) for host in [ urlsplit(origin).netloc.lstrip('*') for origin in settings.CSRF_TRUSTED_ORIGINS @@ -377,7 +378,7 @@ class InvenTreeHostSettingsMiddleware(MiddlewareMixin): # Lax protocol match allowed settings.SITE_LAX_PROTOCOL_CHECK and any( - referer.hostname == urlsplit(origin).hostname + referrer.hostname == urlsplit(origin).hostname for origin in settings.CSRF_TRUSTED_ORIGINS ) ) diff --git a/src/backend/InvenTree/InvenTree/mixins.py b/src/backend/InvenTree/InvenTree/mixins.py index 498b201872..5dd51c30ca 100644 --- a/src/backend/InvenTree/InvenTree/mixins.py +++ b/src/backend/InvenTree/InvenTree/mixins.py @@ -239,10 +239,17 @@ class OutputOptionsMixin: def get_serializer(self, *args, **kwargs): """Return serializer instance with output options applied.""" - if self.output_options and hasattr(self, 'request'): + request = getattr(self, 'request', None) + + if self.output_options and request: params = self.request.query_params kwargs.update(self.output_options.format_params(params)) + # Ensure the request is included in the serializer context + context = kwargs.get('context', {}) + context['request'] = request + kwargs['context'] = context + serializer = super().get_serializer(*args, **kwargs) # Check if the serializer actually can be filtered - makes not much sense to use this mixin without that prerequisite diff --git a/src/backend/InvenTree/InvenTree/models.py b/src/backend/InvenTree/InvenTree/models.py index 978b11532c..07ef3ded71 100644 --- a/src/backend/InvenTree/InvenTree/models.py +++ b/src/backend/InvenTree/InvenTree/models.py @@ -610,7 +610,8 @@ class InvenTreeParameterMixin(InvenTreePermissionCheckMixin, models.Model): def get_parameters(self) -> QuerySet: """Return all Parameter instances for this model.""" return ( - self.parameters_list.all() + self.parameters_list + .all() .prefetch_related('template', 'model_type') .order_by('template__name') ) @@ -752,7 +753,8 @@ class InvenTreeTree(ContentTypeMixin, MPTTModel): for child in self.get_children(): # Store a flattened list of node IDs for each of the lower trees nodes = list( - child.get_descendants(include_self=True) + child + .get_descendants(include_self=True) .values_list('pk', flat=True) .distinct() ) @@ -1327,7 +1329,7 @@ class InvenTreeBarcodeMixin(models.Model): @classmethod def lookup_barcode(cls, barcode_hash: str) -> models.Model: """Check if a model instance exists with the specified third-party barcode hash.""" - return cls.objects.filter(barcode_hash=barcode_hash).first() + return cls.objects.filter(barcode_hash=barcode_hash).first() # ty:ignore[invalid-return-type] def assign_barcode( self, @@ -1408,32 +1410,22 @@ def after_failed_task(sender, instance: Task, created: bool, **kwargs): """Callback when a new task failure log is generated.""" from django.conf import settings + from InvenTree.exceptions import log_error + max_attempts = int(settings.Q_CLUSTER.get('max_attempts', 5)) n = instance.attempt_count # Only notify once the maximum number of attempts has been reached if not instance.success and n >= max_attempts: - try: - url = InvenTree.helpers_model.construct_absolute_url( - reverse( - 'admin:django_q_failure_change', kwargs={'object_id': instance.pk} - ) - ) - except (ValueError, NoReverseMatch): - url = '' + # Create a new Error object associated with this failed task + # This will, in turn, trigger a notification to staff users via the Error post_save signal - # Function name - f = instance.func - - notify_staff_users_of_error( - instance, - 'inventree.task_failure', - { - 'failure': instance, - 'name': _('Task Failure'), - 'message': _(f"Background worker task '{f}' failed after {n} attempts"), - 'link': url, - }, + log_error( + 'task_failure', + scope='worker', + error_name='Task Failure', + error_info=f"Task '{instance.pk}' failed after {n} attempts", + error_data=str(instance.result) if instance.result else '', ) @@ -1493,7 +1485,7 @@ class InvenTreeImageMixin(models.Model): def rename_image(self, filename): """Rename the uploaded image file using the IMAGE_RENAME function.""" - return self.IMAGE_RENAME(filename) # type: ignore + return self.IMAGE_RENAME(filename) image = StdImageField( upload_to=rename_image, diff --git a/src/backend/InvenTree/InvenTree/permissions.py b/src/backend/InvenTree/InvenTree/permissions.py index bf4335e94c..47af7dabcc 100644 --- a/src/backend/InvenTree/InvenTree/permissions.py +++ b/src/backend/InvenTree/InvenTree/permissions.py @@ -376,7 +376,7 @@ def auth_exempt(view_func): def wrapped_view(*args, **kwargs): return view_func(*args, **kwargs) - wrapped_view.auth_exempt = True # type:ignore[unresolved-attribute] + wrapped_view.auth_exempt = True return wraps(view_func)(wrapped_view) @@ -470,3 +470,25 @@ class DataImporterPermission(OASTokenMixin, permissions.BasePermission): ) return True + + +class ContentTypePermission(OASTokenMixin, permissions.BasePermission): + """Mixin class for determining if the user has correct permissions.""" + + ENFORCE_USER_PERMS = True + + def has_permission(self, request, view): + """Class level permission checks are handled via InvenTree.permissions.IsAuthenticatedOrReadScope.""" + return request.user and request.user.is_authenticated + + def get_required_alternate_scopes(self, request, view): + """Return the required scopes for the current request.""" + return map_scope(roles=_roles) + + def has_object_permission(self, request, view, obj): + """Check if the user has permission to access the object.""" + if model_class := obj.__class__: + return users.permissions.check_user_permission( + request.user, model_class, 'change' + ) + return False diff --git a/src/backend/InvenTree/InvenTree/ready.py b/src/backend/InvenTree/InvenTree/ready.py index b7fb78ca6b..bfcc504700 100644 --- a/src/backend/InvenTree/InvenTree/ready.py +++ b/src/backend/InvenTree/InvenTree/ready.py @@ -6,6 +6,13 @@ import os import sys import warnings +from django.conf import settings + +import structlog + +logger = structlog.get_logger('inventree') + + # Keep track of loaded apps, to prevent multiple executions of ready functions _loaded_apps = set() @@ -33,6 +40,11 @@ def isInTestMode(): return 'test' in sys.argv or sys.argv[0].endswith('pytest') +def isWaitingForDatabase(): + """Return True if we are currently waiting for the database to be ready.""" + return 'wait_for_db' in sys.argv + + def isImportingData(): """Returns True if the database is currently importing (or exporting) data, e.g. 'loaddata' command is performed.""" return any(x in sys.argv for x in ['flush', 'loaddata', 'dumpdata']) @@ -49,7 +61,13 @@ def isRunningMigrations(): def isRebuildingData(): """Return true if any of the rebuilding commands are being executed.""" return any( - x in sys.argv for x in ['rebuild_models', 'rebuild_thumbnails', 'rebuild'] + x in sys.argv + for x in [ + 'rebuild', + 'rebuild_models', + 'rebuild_thumbnails', + 'remove_stale_contenttypes', + ] ) @@ -61,13 +79,18 @@ def isRunningBackup(): 'backup', 'restore', 'dbbackup', - 'dbresotore', + 'dbrestore', 'mediabackup', 'mediarestore', ] ) +def isCollectingPlugins(): + """Return True if the 'collectplugins' command is being executed.""" + return 'collectplugins' in sys.argv + + def isGeneratingSchema(): """Return true if schema generation is being executed.""" if isInServerThread() or isInWorkerThread(): @@ -82,11 +105,54 @@ def isGeneratingSchema(): if isInTestMode(): return False - if 'schema' in sys.argv: + if isWaitingForDatabase(): + return False + + if isCollectingPlugins(): + return False + + # Additional set of commands which should not trigger schema generation + excluded_commands = [ + 'compilemessages', + 'createsuperuser', + 'clean_settings', + 'collectstatic', + 'makemessages', + 'wait_for_db', + 'gunicorn', + 'qcluster', + 'check', + 'shell', + ] + + if any(cmd in sys.argv for cmd in excluded_commands): + return False + + included_commands = [ + 'schema', + # schema adjacent calls + 'export_settings_definitions', + 'export_tags', + 'export_filters', + 'export_report_context', + ] + if any(cmd in sys.argv for cmd in included_commands): return True # This is a very inefficient call - so we only use it as a last resort - return any('drf_spectacular' in frame.filename for frame in inspect.stack()) + result = any('drf_spectacular' in frame.filename for frame in inspect.stack()) + + if not result: + # We should only get here if we *are* generating schema + # Raise a warning, so that deevlopers can add extra checks above + + if settings.DEBUG: + logger.warning( + 'isGeneratingSchema called outside of expected contexts - this may be a sign of a problem with the ready() function' + ) + logger.warning('sys.argv: %s', sys.argv) + + return result def isInWorkerThread(): diff --git a/src/backend/InvenTree/InvenTree/schema.py b/src/backend/InvenTree/InvenTree/schema.py index 095dbe15d4..8ec7392130 100644 --- a/src/backend/InvenTree/InvenTree/schema.py +++ b/src/backend/InvenTree/InvenTree/schema.py @@ -89,12 +89,13 @@ class ExtendedAutoSchema(AutoSchema): operation['requestBody'] = request_body self.method = original_method + parameters = operation.get('parameters', []) + # If pagination limit is not set (default state) then all results will return unpaginated. This doesn't match # what the schema defines to be the expected result. This forces limit to be present, producing the expected # type. pagination_class = getattr(self.view, 'pagination_class', None) if pagination_class and pagination_class == LimitOffsetPagination: - parameters = operation.get('parameters', []) for parameter in parameters: if parameter['name'] == 'limit': parameter['required'] = True @@ -102,7 +103,6 @@ class ExtendedAutoSchema(AutoSchema): # Add valid order selections to the ordering field description. ordering_fields = getattr(self.view, 'ordering_fields', None) if ordering_fields is not None: - parameters = operation.get('parameters', []) for parameter in parameters: if parameter['name'] == 'ordering': schema_order = [] @@ -117,8 +117,6 @@ class ExtendedAutoSchema(AutoSchema): if search_fields is not None: # Ensure consistent ordering of search fields search_fields = sorted(search_fields) - - parameters = operation.get('parameters', []) for parameter in parameters: if parameter['name'] == 'search': parameter['description'] = ( @@ -135,8 +133,57 @@ class ExtendedAutoSchema(AutoSchema): schema['items'] = {'$ref': schema['$ref']} del schema['$ref'] + # Add vendor extensions for custom behavior + operation.update(self.get_inventree_extensions()) + return operation + def get_inventree_extensions(self): + """Add InvenTree specific extensions to the schema.""" + from rest_framework.generics import RetrieveAPIView + from rest_framework.mixins import RetrieveModelMixin, UpdateModelMixin + + from data_exporter.mixins import DataExportViewMixin + from InvenTree.api import BulkOperationMixin + from InvenTree.mixins import CleanMixin + + lvl = settings.SCHEMA_VENDOREXTENSION_LEVEL + """Level of detail for InvenTree extensions.""" + + if lvl == 0: + return {} + + mro = self.view.__class__.__mro__ + + data = {} + if lvl >= 1: + data['x-inventree-meta'] = { + 'version': '1.0', + 'is_detail': any( + a in mro + for a in [RetrieveModelMixin, UpdateModelMixin, RetrieveAPIView] + ), + 'is_bulk': BulkOperationMixin in mro, + 'is_cleaned': CleanMixin in mro, + 'is_filtered': hasattr(self.view, 'output_options'), + 'is_exported': DataExportViewMixin in mro, + } + if lvl >= 2: + data['x-inventree-components'] = [str(a) for a in mro] + try: + qs = self.view.get_queryset() + qs = qs.model if qs is not None and hasattr(qs, 'model') else None + except Exception: + qs = None + + data['x-inventree-model'] = { + 'scope': 'core', + 'model': str(qs.__name__) if qs else None, + 'app': str(qs._meta.app_label) if qs else None, + } + + return data + def postprocess_schema_enums(result, generator, **kwargs): """Override call to drf-spectacular's enum postprocessor to filter out specific warnings.""" diff --git a/src/backend/InvenTree/InvenTree/serializers.py b/src/backend/InvenTree/InvenTree/serializers.py index 3fc8e04db5..4bd226a574 100644 --- a/src/backend/InvenTree/InvenTree/serializers.py +++ b/src/backend/InvenTree/InvenTree/serializers.py @@ -21,6 +21,7 @@ from rest_framework import serializers from rest_framework.exceptions import ValidationError from rest_framework.fields import empty from rest_framework.mixins import ListModelMixin +from rest_framework.permissions import SAFE_METHODS from rest_framework.serializers import DecimalField from rest_framework.utils import model_meta from taggit.serializers import TaggitSerializer, TagListSerializerField @@ -163,10 +164,15 @@ class FilterableSerializerMixin: def gather_filters(self, kwargs) -> None: """Gather filterable fields through introspection.""" + context = kwargs.get('context', {}) + request = context.get('request', None) or getattr(self, 'request', None) + + # Gather query parameters from the request context + query_params = dict(getattr(request, 'query_params', {})) if request else {} + # Fast exit if this has already been done or would not have any effect if getattr(self, '_was_filtered', False) or not hasattr(self, 'fields'): return - self._was_filtered = True # Actually gather the filterable fields # Also see `enable_filter` where` is_filterable and is_filterable_vals are set @@ -176,21 +182,22 @@ class FilterableSerializerMixin: if getattr(a, 'is_filterable', None) } - # Gather query parameters from the request context - query_params = {} - if context := kwargs.get('context', {}): - query_params = dict(getattr(context.get('request', {}), 'query_params', {})) - # Remove filter args from kwargs to avoid issues with super().__init__ popped_kwargs = {} # store popped kwargs as a arg might be reused for multiple fields tgs_vals: dict[str, bool] = {} for k, v in self.filter_targets.items(): pop_ref = v['filter_name'] or k val = kwargs.pop(pop_ref, popped_kwargs.get(pop_ref)) - # Optionally also look in query parameters - if val is None and self.filter_on_query and v.get('filter_by_query', True): + # Note that we only do this for a top-level serializer, to avoid issues with nested serializers + if ( + request + and val is None + and self.filter_on_query + and v.get('filter_by_query', True) + ): val = query_params.pop(pop_ref, None) + if isinstance(val, list) and len(val) == 1: val = val[0] @@ -199,7 +206,9 @@ class FilterableSerializerMixin: tgs_vals[k] = ( str2bool(val) if isinstance(val, (str, int, float)) else val ) # Support for various filtering style for backwards compatibility + self.filter_target_values = tgs_vals + self._was_filtered = True # Ensure this mixin is not broadly applied as it is expensive on scale (total CI time increased by 21% when running all coverage tests) if len(self.filter_targets) == 0 and not self.no_filters: @@ -216,14 +225,12 @@ class FilterableSerializerMixin: ): return - # Skip filtering when exporting data - leave all fields intact - if getattr(self, '_exporting_data', False): - return + is_exporting = getattr(self, '_exporting_data', False) # Skip filtering for a write requests - all fields should be present for data creation if request := self.context.get('request', None): if method := getattr(request, 'method', None): - if str(method).lower() in ['post', 'put', 'patch']: + if method not in SAFE_METHODS and not is_exporting: return # Throw out fields which are not requested (either by default or explicitly) diff --git a/src/backend/InvenTree/InvenTree/setting/db_backend.py b/src/backend/InvenTree/InvenTree/setting/db_backend.py new file mode 100644 index 0000000000..af523ef41a --- /dev/null +++ b/src/backend/InvenTree/InvenTree/setting/db_backend.py @@ -0,0 +1,153 @@ +"""Configuration settings specific to a particular database backend.""" + +import structlog + +from InvenTree.config import get_boolean_setting, get_setting + +logger = structlog.get_logger('inventree') + + +def set_db_options(engine: str, db_options: dict): + """Update database options based on the specified database backend. + + Arguments: + engine: The database engine (e.g. 'sqlite3', 'postgresql', etc.) + db_options: The database options dictionary to update + """ + logger.debug('Setting database options: %s', engine) + + if 'postgres' in engine: + set_postgres_options(db_options) + elif 'mysql' in engine: + set_mysql_options(db_options) + elif 'sqlite' in engine: + set_sqlite_options(db_options) + else: + raise ValueError(f'Unknown database engine: {engine}') + + +def set_postgres_options(db_options: dict): + """Set database options specific to postgres backend.""" + from django.db.backends.postgresql.psycopg_any import ( # type: ignore[unresolved-import] + IsolationLevel, + ) + + # Connection timeout + if 'connect_timeout' not in db_options: + # The DB server is in the same data center, it should not take very + # long to connect to the database server + # # seconds, 2 is minimum allowed by libpq + db_options['connect_timeout'] = int( + get_setting('INVENTREE_DB_TIMEOUT', 'database.timeout', 2) + ) + + # Setup TCP keepalive + # DB server is in the same DC, it should not become unresponsive for + # very long. With the defaults below we wait 5 seconds for the network + # issue to resolve itself. If that doesn't happen, whatever happened + # is probably fatal and no amount of waiting is going to fix it. + # # 0 - TCP Keepalives disabled; 1 - enabled + if 'keepalives' not in db_options: + db_options['keepalives'] = int( + get_setting('INVENTREE_DB_TCP_KEEPALIVES', 'database.tcp_keepalives', 1) + ) + + # Seconds after connection is idle to send keep alive + if 'keepalives_idle' not in db_options: + db_options['keepalives_idle'] = int( + get_setting( + 'INVENTREE_DB_TCP_KEEPALIVES_IDLE', 'database.tcp_keepalives_idle', 1 + ) + ) + + # Seconds after missing ACK to send another keep alive + if 'keepalives_interval' not in db_options: + db_options['keepalives_interval'] = int( + get_setting( + 'INVENTREE_DB_TCP_KEEPALIVES_INTERVAL', + 'database.tcp_keepalives_interval', + '1', + ) + ) + + # Number of missing ACKs before we close the connection + if 'keepalives_count' not in db_options: + db_options['keepalives_count'] = int( + get_setting( + 'INVENTREE_DB_TCP_KEEPALIVES_COUNT', + 'database.tcp_keepalives_count', + '5', + ) + ) + + # # Milliseconds for how long pending data should remain unacked + # by the remote server + # TODO: Supported starting in PSQL 11 + # "tcp_user_timeout": int(os.getenv("PGTCP_USER_TIMEOUT", "1000"), + + # Postgres's default isolation level is Read Committed which is + # normally fine, but most developers think the database server is + # actually going to do Serializable type checks on the queries to + # protect against simultaneous changes. + # https://www.postgresql.org/docs/devel/transaction-iso.html + # https://docs.djangoproject.com/en/3.2/ref/databases/#isolation-level + if 'isolation_level' not in db_options: + serializable = get_boolean_setting( + 'INVENTREE_DB_ISOLATION_SERIALIZABLE', 'database.serializable', False + ) + db_options['isolation_level'] = ( + IsolationLevel.SERIALIZABLE + if serializable + else IsolationLevel.READ_COMMITTED + ) + + +def set_mysql_options(db_options: dict): + """Set database options specific to mysql backend.""" + # TODO TCP time outs and keepalives + + # MariaDB's default isolation level is Repeatable Read which is + # normally fine, but most developers think the database server is + # actually going to Serializable type checks on the queries to + # protect against simultaneous changes. + # https://mariadb.com/kb/en/mariadb-transactions-and-isolation-levels-for-sql-server-users/#changing-the-isolation-level + # https://docs.djangoproject.com/en/3.2/ref/databases/#mysql-isolation-level + if 'isolation_level' not in db_options: + serializable = get_boolean_setting( + 'INVENTREE_DB_ISOLATION_SERIALIZABLE', 'database.serializable', False + ) + db_options['isolation_level'] = ( + 'serializable' if serializable else 'read committed' + ) + + +def set_sqlite_options(db_options: dict): + """Set database options specific to sqlite backend. + + References: + - https://docs.djangoproject.com/en/5.0/ref/databases/#sqlite-notes + - https://docs.djangoproject.com/en/6.0/ref/databases/#database-is-locked-errors + """ + import InvenTree.ready + + # Specify minimum timeout behavior for SQLite connections + if 'timeout' not in db_options: + db_options['timeout'] = int( + get_setting('INVENTREE_DB_TIMEOUT', 'database.timeout', 10) + ) + + # Specify the transaction mode for the database + # For the backend worker thread, IMMEDIATE mode is used, + # it has been determined to provide better protection against database locks in the worker thread + db_options['transaction_mode'] = ( + 'IMMEDIATE' if InvenTree.ready.isInWorkerThread() else 'DEFERRED' + ) + + # SQLite's default isolation level is Serializable due to SQLite's + # single writer implementation. Presumably as a result of this, it is + # not possible to implement any lower isolation levels in SQLite. + # https://www.sqlite.org/isolation.html + + if get_boolean_setting('INVENTREE_DB_WAL_MODE', 'database.wal_mode', True): + # Specify that we want to use Write-Ahead Logging (WAL) mode for SQLite databases, as this allows for better concurrency and performance + db_options['init_command'] = 'PRAGMA journal_mode=WAL;' diff --git a/src/backend/InvenTree/InvenTree/settings.py b/src/backend/InvenTree/InvenTree/settings.py index 1945e3c8c4..83dfe37f6b 100644 --- a/src/backend/InvenTree/InvenTree/settings.py +++ b/src/backend/InvenTree/InvenTree/settings.py @@ -26,19 +26,14 @@ from corsheaders.defaults import default_headers as default_cors_headers import InvenTree.backup from InvenTree.cache import get_cache_config, is_global_cache_enabled -from InvenTree.config import ( - get_boolean_setting, - get_custom_file, - get_oidc_private_key, - get_setting, -) -from InvenTree.ready import isInMainThread +from InvenTree.config import get_boolean_setting, get_oidc_private_key, get_setting +from InvenTree.ready import isInMainThread, isRunningBackup from InvenTree.sentry import default_sentry_dsn, init_sentry from InvenTree.version import checkMinPythonVersion, inventreeCommitHash from users.oauth2_scopes import oauth2_scopes from . import config -from .setting import locales, markdown, spectacular, storages +from .setting import db_backend, locales, markdown, spectacular, storages try: import django_stubs_ext @@ -83,6 +78,9 @@ config.load_version_file() # SECURITY WARNING: don't run with debug turned on in production! DEBUG = get_boolean_setting('INVENTREE_DEBUG', 'debug', False) +# Internal flag to determine if we are running in docker mode +DOCKER = get_boolean_setting('INVENTREE_DOCKER', default_value=False) + # Configure logging settings LOG_LEVEL = get_setting('INVENTREE_LOG_LEVEL', 'log_level', 'WARNING') JSON_LOG = get_boolean_setting('INVENTREE_JSON_LOG', 'json_log', False) @@ -260,12 +258,22 @@ DBBACKUP_EMAIL_SUBJECT_PREFIX = InvenTree.backup.backup_email_prefix() DBBACKUP_CONNECTORS = {'default': InvenTree.backup.get_backup_connector_options()} +DBBACKUP_BACKUP_METADATA_SETTER = InvenTree.backup.metadata_set +DBBACKUP_RESTORE_METADATA_VALIDATOR = InvenTree.backup.validate_restore + # Data storage options DBBACKUP_STORAGE_CONFIG = { 'BACKEND': InvenTree.backup.get_backup_storage_backend(), 'OPTIONS': InvenTree.backup.get_backup_storage_options(), } +# This can also be overridden with a command line flag --restore-allow-newer-version when running the restore command +BACKUP_RESTORE_ALLOW_NEWER_VERSION = get_boolean_setting( + 'INVENTREE_BACKUP_RESTORE_ALLOW_NEWER_VERSION', + 'backup_restore_allow_newer_version', + False, +) + # Enable django admin interface? INVENTREE_ADMIN_ENABLED = get_boolean_setting( 'INVENTREE_ADMIN_ENABLED', config_key='admin_enabled', default_value=True @@ -475,7 +483,7 @@ if LDAP_AUTH: # pragma: no cover ) AUTH_LDAP_USER_SEARCH = django_auth_ldap.config.LDAPSearch( get_setting('INVENTREE_LDAP_SEARCH_BASE_DN', 'ldap.search_base_dn'), - ldap.SCOPE_SUBTREE, # type: ignore[unresolved-attribute] + ldap.SCOPE_SUBTREE, str( get_setting( 'INVENTREE_LDAP_SEARCH_FILTER_STR', @@ -511,7 +519,7 @@ if LDAP_AUTH: # pragma: no cover ) AUTH_LDAP_GROUP_SEARCH = django_auth_ldap.config.LDAPSearch( get_setting('INVENTREE_LDAP_GROUP_SEARCH', 'ldap.group_search'), - ldap.SCOPE_SUBTREE, # type: ignore[unresolved-attribute] + ldap.SCOPE_SUBTREE, f'(objectClass={AUTH_LDAP_GROUP_OBJECT_CLASS})', ) AUTH_LDAP_GROUP_TYPE_CLASS = get_setting( @@ -544,9 +552,6 @@ if LDAP_AUTH: # pragma: no cover ) AUTH_LDAP_FIND_GROUP_PERMS = True -# Internal flag to determine if we are running in docker mode -DOCKER = get_boolean_setting('INVENTREE_DOCKER', default_value=False) - # Allow secure http developer server in debug mode if DEBUG: INSTALLED_APPS.append('sslserver') @@ -715,108 +720,8 @@ db_options = db_config.get('OPTIONS', db_config.get('options')) if db_options is None: db_options = {} -# Specific options for postgres backend -if 'postgres' in DB_ENGINE: # pragma: no cover - from django.db.backends.postgresql.psycopg_any import ( # type: ignore[unresolved-import] - IsolationLevel, - ) - - # Connection timeout - if 'connect_timeout' not in db_options: - # The DB server is in the same data center, it should not take very - # long to connect to the database server - # # seconds, 2 is minimum allowed by libpq - db_options['connect_timeout'] = int( - get_setting('INVENTREE_DB_TIMEOUT', 'database.timeout', 2) - ) - - # Setup TCP keepalive - # DB server is in the same DC, it should not become unresponsive for - # very long. With the defaults below we wait 5 seconds for the network - # issue to resolve itself. It it that doesn't happen whatever happened - # is probably fatal and no amount of waiting is going to fix it. - # # 0 - TCP Keepalives disabled; 1 - enabled - if 'keepalives' not in db_options: - db_options['keepalives'] = int( - get_setting('INVENTREE_DB_TCP_KEEPALIVES', 'database.tcp_keepalives', 1) - ) - - # Seconds after connection is idle to send keep alive - if 'keepalives_idle' not in db_options: - db_options['keepalives_idle'] = int( - get_setting( - 'INVENTREE_DB_TCP_KEEPALIVES_IDLE', 'database.tcp_keepalives_idle', 1 - ) - ) - - # Seconds after missing ACK to send another keep alive - if 'keepalives_interval' not in db_options: - db_options['keepalives_interval'] = int( - get_setting( - 'INVENTREE_DB_TCP_KEEPALIVES_INTERVAL', - 'database.tcp_keepalives_internal', - '1', - ) - ) - - # Number of missing ACKs before we close the connection - if 'keepalives_count' not in db_options: - db_options['keepalives_count'] = int( - get_setting( - 'INVENTREE_DB_TCP_KEEPALIVES_COUNT', - 'database.tcp_keepalives_count', - '5', - ) - ) - - # # Milliseconds for how long pending data should remain unacked - # by the remote server - # TODO: Supported starting in PSQL 11 - # "tcp_user_timeout": int(os.getenv("PGTCP_USER_TIMEOUT", "1000"), - - # Postgres's default isolation level is Read Committed which is - # normally fine, but most developers think the database server is - # actually going to do Serializable type checks on the queries to - # protect against simultaneous changes. - # https://www.postgresql.org/docs/devel/transaction-iso.html - # https://docs.djangoproject.com/en/3.2/ref/databases/#isolation-level - if 'isolation_level' not in db_options: - serializable = get_boolean_setting( - 'INVENTREE_DB_ISOLATION_SERIALIZABLE', 'database.serializable', False - ) - db_options['isolation_level'] = ( - IsolationLevel.SERIALIZABLE - if serializable - else IsolationLevel.READ_COMMITTED - ) - -# Specific options for MySql / MariaDB backend -elif 'mysql' in DB_ENGINE: # pragma: no cover - # TODO TCP time outs and keepalives - - # MariaDB's default isolation level is Repeatable Read which is - # normally fine, but most developers think the database server is - # actually going to Serializable type checks on the queries to - # protect against siumltaneous changes. - # https://mariadb.com/kb/en/mariadb-transactions-and-isolation-levels-for-sql-server-users/#changing-the-isolation-level - # https://docs.djangoproject.com/en/3.2/ref/databases/#mysql-isolation-level - if 'isolation_level' not in db_options: - serializable = get_boolean_setting( - 'INVENTREE_DB_ISOLATION_SERIALIZABLE', 'database.serializable', False - ) - db_options['isolation_level'] = ( - 'serializable' if serializable else 'read committed' - ) - -# Specific options for sqlite backend -elif 'sqlite' in DB_ENGINE: - # TODO: Verify timeouts are not an issue because no network is involved for SQLite - - # SQLite's default isolation level is Serializable due to SQLite's - # single writer implementation. Presumably as a result of this, it is - # not possible to implement any lower isolation levels in SQLite. - # https://www.sqlite.org/isolation.html - pass +# Set database-specific options +db_backend.set_db_options(DB_ENGINE, db_options) # Provide OPTIONS dict back to the database configuration dict db_config['OPTIONS'] = db_options @@ -867,7 +772,7 @@ TRACING_ENABLED = get_boolean_setting( ) TRACING_DETAILS: Optional[dict] = None -if TRACING_ENABLED: # pragma: no cover +if TRACING_ENABLED and not isRunningBackup(): # pragma: no cover from InvenTree.tracing import setup_instruments, setup_tracing _t_endpoint = get_setting('INVENTREE_TRACING_ENDPOINT', 'tracing.endpoint', None) @@ -938,6 +843,10 @@ BACKGROUND_WORKER_COUNT = ( else 1 ) +# If running with SQLite, limit background worker threads to 1 to prevent database locking issues +if 'sqlite' in DB_ENGINE: + BACKGROUND_WORKER_COUNT = 1 + # django-q background worker configuration Q_CLUSTER = { 'name': 'InvenTree', @@ -948,6 +857,7 @@ Q_CLUSTER = { 'max_attempts': int( get_setting('INVENTREE_BACKGROUND_MAX_ATTEMPTS', 'background.max_attempts', 5) ), + 'save_limit': 1000, 'queue_limit': 50, 'catch_up': False, 'bulk': 10, @@ -1289,10 +1199,12 @@ CORS_ALLOWED_ORIGIN_REGEXES = get_setting( typecast=list, ) +_allowed_headers = (*default_cors_headers, 'traceparent') # Allow extra CORS headers in DEBUG mode # Required for serving /static/ and /media/ files if DEBUG: - CORS_ALLOW_HEADERS = (*default_cors_headers, 'cache-control', 'pragma', 'expires') + _allowed_headers = (*_allowed_headers, 'cache-control', 'pragma', 'expires') +CORS_ALLOW_HEADERS = _allowed_headers # In debug mode allow CORS requests from localhost # This allows connection from the frontend development server @@ -1451,12 +1363,9 @@ if len(GLOBAL_SETTINGS_OVERRIDES) > 0: logger.debug('- Override value for %s = ********', key) # User interface customization values -CUSTOM_LOGO = get_custom_file( - 'INVENTREE_CUSTOM_LOGO', 'customize.logo', 'custom logo', lookup_media=True -) -CUSTOM_SPLASH = get_custom_file( - 'INVENTREE_CUSTOM_SPLASH', 'customize.splash', 'custom splash' -) +CUSTOM_LOGO = get_setting('INVENTREE_CUSTOM_LOGO', 'customize.logo', typecast=str) + +CUSTOM_SPLASH = get_setting('INVENTREE_CUSTOM_SPLASH', 'customize.splash', typecast=str) CUSTOMIZE = get_setting( 'INVENTREE_CUSTOMIZE', 'customize', default_value=None, typecast=dict @@ -1495,6 +1404,9 @@ LOGIN_REDIRECT_URL = '/api/auth/login-redirect/' # Configuration for API schema generation / oAuth2 SPECTACULAR_SETTINGS = spectacular.get_spectacular_settings() +SCHEMA_VENDOREXTENSION_LEVEL = get_setting( + 'INVENTREE_SCHEMA_LEVEL', 'schema.level', default_value=0, typecast=int +) OAUTH2_PROVIDER = { # default scopes diff --git a/src/backend/InvenTree/InvenTree/sso.py b/src/backend/InvenTree/InvenTree/sso.py index cbb2d79938..d04abf21ba 100644 --- a/src/backend/InvenTree/InvenTree/sso.py +++ b/src/backend/InvenTree/InvenTree/sso.py @@ -10,7 +10,6 @@ import structlog from allauth.socialaccount.models import SocialAccount, SocialLogin from common.settings import get_global_setting -from InvenTree.helpers import str2bool logger = structlog.get_logger('inventree') @@ -50,7 +49,7 @@ def check_provider(provider): if not app: return False - if allauth.app_settings.SITES_ENABLED: # type: ignore[unresolved-attribute] + if allauth.app_settings.SITES_ENABLED: # At least one matching site must be specified if not app.sites.exists(): logger.error('SocialApp %s has no sites configured', app) @@ -69,21 +68,6 @@ def provider_display_name(provider): return provider.name -def sso_login_enabled() -> bool: - """Return True if SSO login is enabled.""" - return str2bool(get_global_setting('LOGIN_ENABLE_SSO')) - - -def sso_registration_enabled() -> bool: - """Return True if SSO registration is enabled.""" - return str2bool(get_global_setting('LOGIN_ENABLE_SSO_REG')) - - -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. @@ -96,7 +80,9 @@ def ensure_sso_groups(sender, sociallogin: SocialLogin, **kwargs): 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, []): + for sso_group in sociallogin.account.extra_data.get('userinfo', {}).get( + group_key, [] + ): if mapped_name := group_map.get(sso_group): group_names.append(mapped_name) diff --git a/src/backend/InvenTree/InvenTree/tasks.py b/src/backend/InvenTree/InvenTree/tasks.py index 0ab4205963..9b29a68da1 100644 --- a/src/backend/InvenTree/InvenTree/tasks.py +++ b/src/backend/InvenTree/InvenTree/tasks.py @@ -161,13 +161,20 @@ def record_task_success(task_name: str): def offload_task( taskname, *args, force_async=False, force_sync=False, **kwargs -) -> bool: +) -> str | bool: """Create an AsyncTask if workers are running. This is different to a 'scheduled' task, in that it only runs once! If workers are not running or force_sync flag, is set then the task is ran synchronously. + Arguments: + taskname: The name of the task to be run, in the format 'app.module.function' + *args: Positional arguments to be passed to the task function + force_async: If True, force the task to be offloaded (even if workers are not running) + force_sync: If True, force the task to be run synchronously (even if workers are running) + **kwargs: Keyword arguments to be passed to the task function + Returns: - bool: True if the task was offloaded (or ran), False otherwise + str | bool: Task ID if the task was offloaded, True if ran synchronously, False otherwise """ from InvenTree.exceptions import log_error @@ -203,6 +210,9 @@ def offload_task( task = AsyncTask(taskname, *args, group=group, **kwargs) with tracer.start_as_current_span(f'async worker: {taskname}'): task.run() + + # Return the ID of the offloaded task, so that it can be tracked if needed + return task.id except ImportError: raise_warning(f"WARNING: '{taskname}' not offloaded - Function not found") return False @@ -265,6 +275,40 @@ def offload_task( return True +def get_queued_task(task_id: str): + """Find the task in the queue, if it exists. + + Note that the OrmQ table does NOT keep the task ID as a database field, + it is instead stored in the payload data. + If there are a large number of pending tasks, this query may be inefficient, + but there is no other way to find a queued task by ID. + """ + offset = 0 + limit = 500 + + if not task_id: + # Return early if no task ID was provided + return None + + task_id = str(task_id) + + from django_q.models import OrmQ + + while True: + queued_tasks = OrmQ.objects.all().order_by('id')[offset : offset + limit] + if not queued_tasks: + break + + for task in queued_tasks: + if task.task_id() == task_id: + return task + + offset += limit + + # No matching task was discovered + return None + + @dataclass() class ScheduledTask: """A scheduled task. @@ -286,7 +330,7 @@ class ScheduledTask: QUARTERLY: str = 'Q' YEARLY: str = 'Y' - TYPE: tuple[str] = (MINUTES, HOURLY, DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY) # type: ignore[invalid-assignment] + TYPE: tuple[str] = (MINUTES, HOURLY, DAILY, WEEKLY, MONTHLY, QUARTERLY, YEARLY) class TaskRegister: @@ -587,6 +631,15 @@ def update_exchange_rates(force: bool = False): Arguments: force: If True, force the update to run regardless of the last update time """ + from InvenTree.ready import canAppAccessDatabase, isRunningMigrations + + if isRunningMigrations(): + return + + # Do not update exchange rates if we cannot access the database + if not canAppAccessDatabase(allow_test=True, allow_shell=True): + return + try: from djmoney.contrib.exchange.models import Rate diff --git a/src/backend/InvenTree/InvenTree/test_api.py b/src/backend/InvenTree/InvenTree/test_api.py index 7aeacb6751..5475edd03a 100644 --- a/src/backend/InvenTree/InvenTree/test_api.py +++ b/src/backend/InvenTree/InvenTree/test_api.py @@ -278,8 +278,7 @@ class BulkDeleteTests(InvenTreeAPITestCase): response = self.delete(url, {}, expected_code=400) self.assertIn( - 'List of items or filters must be provided for bulk operation', - str(response.data), + 'List of items must be provided for bulk operation', str(response.data) ) # DELETE with invalid 'items' @@ -287,11 +286,6 @@ class BulkDeleteTests(InvenTreeAPITestCase): self.assertIn('Items must be provided as a list', str(response.data)) - # DELETE with invalid 'filters' - response = self.delete(url, {'filters': [1, 2, 3]}, expected_code=400) - - self.assertIn('Filters must be provided as a dict', str(response.data)) - class SearchTests(InvenTreeAPITestCase): """Unit tests for global search endpoint.""" @@ -574,7 +568,7 @@ class GeneralApiTests(InvenTreeAPITestCase): self.assertIn('License file not found at', str(log.output)) - with TemporaryDirectory() as tmp: # type: ignore[no-matching-overload] + with TemporaryDirectory() as tmp: sample_file = Path(tmp, 'temp.txt') sample_file.write_text('abc', 'utf-8') diff --git a/src/backend/InvenTree/InvenTree/test_auth.py b/src/backend/InvenTree/InvenTree/test_auth.py index c8651c4285..465be13b64 100644 --- a/src/backend/InvenTree/InvenTree/test_auth.py +++ b/src/backend/InvenTree/InvenTree/test_auth.py @@ -38,7 +38,7 @@ class TestSsoGroupSync(TransactionTestCase): 'SSO_GROUP_MAP', '{"idp_group": "inventree_group"}' ) # configure sociallogin - extra_data = {'groups': ['idp_group']} + extra_data = {'userinfo': {'groups': ['idp_group']}} self.group = Group(name='inventree_group') self.group.save() # ensure default group exists diff --git a/src/backend/InvenTree/InvenTree/test_commands.py b/src/backend/InvenTree/InvenTree/test_commands.py index a83a0d4cc2..82caec7d73 100644 --- a/src/backend/InvenTree/InvenTree/test_commands.py +++ b/src/backend/InvenTree/InvenTree/test_commands.py @@ -2,10 +2,15 @@ from pathlib import Path +from django.conf import settings from django.contrib.auth.models import User from django.core.management import call_command from django.test import TestCase +from opentelemetry.instrumentation.sqlite3 import SQLite3Instrumentor + +from InvenTree.config import get_testfolder_dir + class CommandTestCase(TestCase): """Test case for custom management commands.""" @@ -19,40 +24,191 @@ class CommandTestCase(TestCase): def test_remove_mfa(self): """Test the remove_mfa command.""" + + def get_dummyuser(uname='admin'): + admin = User.objects.create_user( + username=uname, email=f'{uname}@example.org' + ) + admin.authenticator_set.create(type='TOTP', data={}) + self.assertEqual(admin.authenticator_set.all().count(), 1) + return admin + # missing arg with self.assertRaises(Exception) as cm: call_command('remove_mfa', verbosity=0) self.assertEqual( - 'Error: the following arguments are required: mail', str(cm.exception) + 'Error: one of the following arguments is required: mail, username', + str(cm.exception), ) # no user with self.assertLogs('inventree') as cm: self.assertFalse( - call_command('remove_mfa', 'admin@example.org', verbosity=0) + call_command('remove_mfa', mail='admin@example.org', verbosity=0) ) self.assertIn('No user with this mail associated', str(cm[1])) # correct removal - my_admin1 = User.objects.create_user( - username='admin', email='admin@example.org' - ) - my_admin1.authenticator_set.create(type='TOTP', data={}) - self.assertEqual(my_admin1.authenticator_set.all().count(), 1) - output = call_command('remove_mfa', 'admin@example.org', verbosity=0) + my_admin1 = get_dummyuser() + output = call_command('remove_mfa', mail=my_admin1.email, verbosity=0) self.assertEqual(output, 'done') self.assertEqual(my_admin1.authenticator_set.all().count(), 0) # two users with same email - my_admin2 = User.objects.create_user( - username='admin2', email='admin@example.org' - ) + my_admin2 = User.objects.create_user(username='admin2', email=my_admin1.email) my_admin2.emailaddress_set.create(email='456') my_admin2.emailaddress_set.create(email='123') with self.assertLogs('inventree') as cm: self.assertFalse( - call_command('remove_mfa', 'admin@example.org', verbosity=0) + call_command('remove_mfa', mail=my_admin1.email, verbosity=0) ) self.assertIn('Multiple users found with the provided email', str(cm[1])) self.assertIn('admin, admin2', str(cm[1])) - self.assertIn('123, 456, admin@example.org', str(cm[1])) + self.assertIn(f'123, 456, {my_admin1.email}', str(cm[1])) + + # correct removal by username + my_admin3 = get_dummyuser('admin3') + output = call_command('remove_mfa', username=my_admin3.username, verbosity=0) + self.assertEqual(output, 'done') + self.assertEqual(my_admin3.authenticator_set.all().count(), 0) + + def test_backup_metadata(self): + """Test the backup metadata functions.""" + from InvenTree.backup import ( + _gather_environment_metadata, + _parse_environment_metadata, + ) + + metadata = _gather_environment_metadata() + self.assertIn('ivt_1_version', metadata) + self.assertIn('ivt_1_plugins_enabled', metadata) + + parsed = _parse_environment_metadata(metadata) + self.assertIn('version', parsed) + self.assertIn('plugins_enabled', parsed) + + def test_restore_validation(self): + """Test the restore validation functions.""" + from InvenTree.backup import _gather_environment_metadata, validate_restore + + metadata = _gather_environment_metadata() + + self.assertTrue(validate_restore(metadata)) + + # Version + with self.assertLogs() as cm: + self.assertTrue(validate_restore({})) + self.assertIn( + 'INVE-W13: Backup metadata does not contain version information', str(cm[1]) + ) + with self.assertLogs() as cm: + self.assertTrue(validate_restore({**metadata, 'ivt_1_version': '123xx'})) + self.assertIn( + 'INVE-W13: Backup being restored was created with InvenTree version', + str(cm[1]), + ) + with self.assertLogs() as cm: + self.assertFalse( + validate_restore({ + **metadata, + 'ivt_1_version': '9999', + 'ivt_1_version_api': '9999', + }) + ) + self.assertIn( + 'INVE-E16: Backup being restored was created with a newer version', + str(cm[1]), + ) + # not with allow flag + with self.settings(BACKUP_RESTORE_ALLOW_NEWER_VERSION=True): + with self.assertLogs() as cm: + self.assertTrue( + validate_restore({ + **metadata, + 'ivt_1_version': '9999', + 'ivt_1_version_api': '9999', + }) + ) + self.assertIn( + 'INVE-W13: Backup restore is allowing a restore from a newer version of InvenTree', + str(cm[1]), + ) + + # Plugins enabled + with self.settings(PLUGINS_ENABLED=False): + with self.assertLogs() as cm: + self.assertTrue(validate_restore(metadata)) + self.assertIn( + 'INVE-W13: Backup being restored was created with plugins enabled', + str(cm[1]), + ) + + # Plugin hash + with self.assertLogs() as cm: + self.assertTrue( + validate_restore({**metadata, 'ivt_1_plugins_file_hash': '123xx'}) + ) + self.assertIn( + 'INVE-W13: Backup being restored has a different plugins file hash', + str(cm[1]), + ) + + # installer + with self.assertLogs() as cm: + self.assertTrue(validate_restore({**metadata, 'ivt_1_installer': '123xx'})) + self.assertIn( + 'INVE-W13: Backup being restored was created with installer', str(cm[1]) + ) + + # Age + with self.assertLogs() as cm: + self.assertTrue( + validate_restore({ + **metadata, + 'ivt_1_backup_time': '2020-02-02T00:00:00', + }) + ) + self.assertIn( + 'INVE-W13: Backup being restored is over 120 days old', str(cm[1]) + ) + + def test_backup_command_e2e(self): + """Test the backup command.""" + # we only test on sqlite, the environment in which we also run coverage + if settings.DB_ENGINE != 'django.db.backends.sqlite3': + self.skipTest('Backup command test only runs on sqlite database') + + # disable tracing for now + if settings.TRACING_ENABLED: # pragma: no cover + print('Disabling tracing for backup command test') + SQLite3Instrumentor().uninstrument() + + output_path = get_testfolder_dir().joinpath('backup.zip').resolve() + + # Backup + with self.assertLogs() as cm: + output = call_command( + 'dbbackup', noinput=True, verbosity=2, output_path=str(output_path) + ) + self.assertIsNone(output) + self.assertIn(f'Writing metadata file to {output_path}', str(cm[1])) + + # Restore + with self.assertLogs() as cm: + output = call_command( + 'dbrestore', + noinput=True, + interactive=False, + verbosity=2, + input_path=str(output_path), + ) + self.assertIsNone(output) + self.assertIn('Using connector from metadata', str(cm[1])) + + # Cleanup the generated backup file and metadata file + output_path.unlink() + Path(str(output_path) + '.metadata').unlink() + + if settings.TRACING_ENABLED: # pragma: no cover + print('Re-enabling tracing for backup command test') + SQLite3Instrumentor().instrument() diff --git a/src/backend/InvenTree/InvenTree/test_serializers.py b/src/backend/InvenTree/InvenTree/test_serializers.py index 4cde34d806..b6c794e33f 100644 --- a/src/backend/InvenTree/InvenTree/test_serializers.py +++ b/src/backend/InvenTree/InvenTree/test_serializers.py @@ -157,7 +157,7 @@ class FilteredSerializers(InvenTreeAPITestCase): _ = BadSerializer() self.assertTrue(True) # Dummy assertion to ensure we reach here - def test_failiure_OutputOptionsMixin(self): + def test_failure_OutputOptionsMixin(self): """Test failure case for OutputOptionsMixin.""" class BadSerializer(InvenTree.serializers.InvenTreeModelSerializer): diff --git a/src/backend/InvenTree/InvenTree/test_tasks.py b/src/backend/InvenTree/InvenTree/test_tasks.py index f169292711..ac74816827 100644 --- a/src/backend/InvenTree/InvenTree/test_tasks.py +++ b/src/backend/InvenTree/InvenTree/test_tasks.py @@ -234,11 +234,8 @@ class InvenTreeTaskTests(PluginRegistryMixin, TestCase): msg = NotificationMessage.objects.last() - self.assertEqual(msg.name, 'Task Failure') - self.assertEqual( - msg.message, - "Background worker task 'InvenTree.tasks.failed_task' failed after 10 attempts", - ) + self.assertEqual(msg.name, 'Server Error') + self.assertEqual(msg.message, 'An error has been logged by the server.') def test_delete_old_emails(self): """Test the delete_old_emails task.""" diff --git a/src/backend/InvenTree/InvenTree/tests.py b/src/backend/InvenTree/InvenTree/tests.py index a28aad7313..c8a999b563 100644 --- a/src/backend/InvenTree/InvenTree/tests.py +++ b/src/backend/InvenTree/InvenTree/tests.py @@ -703,12 +703,12 @@ class TestHelpers(TestCase): """Test getMediaUrl.""" # Str should not work with self.assertRaises(TypeError): - helpers.getMediaUrl('xx/yy.png') # type: ignore + helpers.getMediaUrl('xx/yy.png') # Correct usage part = Part().image self.assertEqual( - helpers.getMediaUrl(StdImageFieldFile(part, part, 'xx/yy.png')), # type: ignore + helpers.getMediaUrl(StdImageFieldFile(part, part, 'xx/yy.png')), # ty:ignore[too-many-positional-arguments] '/media/xx/yy.png', ) diff --git a/src/backend/InvenTree/InvenTree/tracing.py b/src/backend/InvenTree/InvenTree/tracing.py index 4cedbb584d..f97da6c0eb 100644 --- a/src/backend/InvenTree/InvenTree/tracing.py +++ b/src/backend/InvenTree/InvenTree/tracing.py @@ -4,7 +4,7 @@ import base64 import logging from typing import Optional -from opentelemetry import metrics, trace # type: ignore[import] +from opentelemetry import metrics, trace from opentelemetry.instrumentation.django import DjangoInstrumentor from opentelemetry.instrumentation.redis import RedisInstrumentor from opentelemetry.instrumentation.requests import RequestsInstrumentor diff --git a/src/backend/InvenTree/InvenTree/unit_test.py b/src/backend/InvenTree/InvenTree/unit_test.py index 5360d9f71d..bae1262297 100644 --- a/src/backend/InvenTree/InvenTree/unit_test.py +++ b/src/backend/InvenTree/InvenTree/unit_test.py @@ -655,7 +655,9 @@ class InvenTreeAPITestCase( # Append URL params url += '?' + '&'.join([f'{key}={value}' for key, value in params.items()]) - response = self.client.get(url, data=None, format='json') + response = self.get( + url, data=None, format='json', expected_code=expected_code, **kwargs + ) self.check_response(url, response, expected_code=expected_code) # Check that the response is of the correct type @@ -729,6 +731,48 @@ class InvenTreeAPITestCase( """Assert that dictionary 'a' is a subset of dictionary 'b'.""" self.assertEqual(b, b | a) + def run_ordering_test( + self, url: str, ordering_field: str, params: Optional[dict] = None + ): + """Run a test to check that the results are ordered correctly. + + Arguments: + url: The URL to test + ordering_field: The field to order by (e.g. 'name') + params: Additional parameters to include in the request (e.g. filters) + + Process: + - Run a GET request against the provided URL with the appropriate ordering parameter + - Run a separate GET request with the opposite ordering parameter (e.g. '-name') + - Check that the results are ordered differently in each case + """ + query_params = {**(params or {})} + + pk_values = set() + + for ordering in [None, ordering_field, f'-{ordering_field}']: + response = self.get( + url, + data={**query_params, 'ordering': ordering} + if ordering + else query_params, + expected_code=200, + ) + + self.assertGreater( + len(response.data), + 1, + f'No data returned from {url} with ordering={ordering}', + ) + + pk_values.add(response.data[0]['pk']) + + self.assertGreater( + len(pk_values), + 1, + f"Ordering by '{ordering_field}' does not change the order of results at {url}", + ) + def run_output_test( self, url: str, diff --git a/src/backend/InvenTree/InvenTree/version.py b/src/backend/InvenTree/InvenTree/version.py index 387d60c0fb..2f77ab765b 100644 --- a/src/backend/InvenTree/InvenTree/version.py +++ b/src/backend/InvenTree/InvenTree/version.py @@ -12,16 +12,19 @@ import sys from datetime import datetime as dt from datetime import timedelta as td +from django.conf import settings + from .api_version import INVENTREE_API_TEXT, INVENTREE_API_VERSION # InvenTree software version -INVENTREE_SW_VERSION = '1.2.0 dev' +INVENTREE_SW_VERSION = '1.3.0 dev' # Minimum supported Python version MIN_PYTHON_VERSION = (3, 11) logger = logging.getLogger('inventree') +git_warning_txt = 'INVE-W3: Could not detect git information.' # Discover git try: @@ -33,8 +36,17 @@ try: main_repo = Repo(pathlib.Path(__file__).parent.parent.parent.parent.parent) main_commit = main_repo[main_repo.head()] except NotGitRepository: - # If we are running in a docker container, the repo may not be available - logger.warning('INVE-W3: Could not detect git information.') + output = logger.warning + + try: + if settings.DOCKER: + output = logger.info + except Exception: + # We may not have access to settings at this point + pass + + output(git_warning_txt) + main_repo = None main_commit = None @@ -51,7 +63,7 @@ except ImportError: main_commit = None main_branch = None except Exception as exc: - logger.warning('INVE-W3: Could not detect git information.', exc_info=exc) + logger.warning(git_warning_txt, exc_info=exc) main_repo = None main_commit = None main_branch = None @@ -277,8 +289,10 @@ def inventreeBranch(): return ' '.join(branch.splitlines()) if main_branch is None: - return None - return main_branch.decode('utf-8') + return None # pragma: no cover - branch information may not be available in all environments + return main_branch.decode( + 'utf-8' + ) # pragma: no cover - branch information may not be available in all environments def inventreeTarget(): diff --git a/src/backend/InvenTree/build/api.py b/src/backend/InvenTree/build/api.py index d7b8692bab..232b7adca7 100644 --- a/src/backend/InvenTree/build/api.py +++ b/src/backend/InvenTree/build/api.py @@ -11,12 +11,13 @@ import django_filters.rest_framework.filters as rest_filters from django_filters.rest_framework.filterset import FilterSet from drf_spectacular.utils import extend_schema, extend_schema_field from rest_framework import serializers, status -from rest_framework.exceptions import ValidationError +from rest_framework.exceptions import NotFound, ValidationError from rest_framework.response import Response import build.models as build_models import build.serializers import common.models +import common.serializers import part.models as part_models import stock.models as stock_models import stock.serializers @@ -24,10 +25,10 @@ from build.models import Build, BuildItem, BuildLine from build.status_codes import BuildStatus, BuildStatusGroups from data_exporter.mixins import DataExportViewMixin from generic.states.api import StatusView -from InvenTree.api import BulkDeleteMixin, MetadataView, ParameterListMixin +from InvenTree.api import BulkDeleteMixin, ParameterListMixin, meta_path from InvenTree.fields import InvenTreeOutputOption, OutputConfiguration from InvenTree.filters import ( - SEARCH_ORDER_FILTER_ALIAS, + SEARCH_ORDER_FILTER, InvenTreeDateFilter, NumberOrNullFilter, ) @@ -145,8 +146,8 @@ class BuildFilter(FilterSet): def filter_overdue(self, queryset, name, value): """Filter the queryset to either include or exclude orders which are overdue.""" if str2bool(value): - return queryset.filter(Build.OVERDUE_FILTER) - return queryset.exclude(Build.OVERDUE_FILTER) + return queryset.filter(Build.get_overdue_filter()) + return queryset.exclude(Build.get_overdue_filter()) assigned_to_me = rest_filters.BooleanFilter( label=_('Assigned to me'), method='filter_assigned_to_me' @@ -343,9 +344,11 @@ class BuildList( output_options = BuildListOutputOptions filterset_class = BuildFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER ordering_fields = [ 'reference', + 'part', + 'IPN', 'part__name', 'status', 'creation_date', @@ -364,6 +367,8 @@ class BuildList( ordering_field_aliases = { 'reference': ['reference_int', 'reference'], 'project_code': ['project_code__code'], + 'part': ['part__name'], + 'IPN': ['part__IPN'], } ordering = '-reference' search_fields = [ @@ -590,10 +595,11 @@ class BuildLineList( """API endpoint for accessing a list of BuildLine objects.""" filterset_class = BuildLineFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER output_options = BuildLineOutputOptions ordering_fields = [ 'part', + 'IPN', 'allocated', 'category', 'consumed', @@ -612,6 +618,7 @@ class BuildLineList( ordering_field_aliases = { 'part': 'bom_item__sub_part__name', + 'IPN': 'bom_item__sub_part__IPN', 'reference': 'bom_item__reference', 'unit_quantity': 'bom_item__quantity', 'category': 'bom_item__sub_part__category__name', @@ -656,6 +663,13 @@ class BuildLineDetail(BuildLineMixin, OutputOptionsMixin, RetrieveUpdateDestroyA class BuildOrderContextMixin: """Mixin class which adds build order as serializer context variable.""" + def get_build(self): + """Return the Build object associated with this API endpoint.""" + try: + return Build.objects.get(pk=self.kwargs.get('pk', None)) + except (ValueError, Build.DoesNotExist): + raise NotFound(_('Build not found')) + def get_serializer_context(self): """Add extra context information to the endpoint serializer.""" ctx = super().get_serializer_context() @@ -664,8 +678,8 @@ class BuildOrderContextMixin: ctx['to_complete'] = True try: - ctx['build'] = Build.objects.get(pk=self.kwargs.get('pk', None)) - except Exception: + ctx['build'] = self.get_build() + except NotFound: pass return ctx @@ -758,6 +772,37 @@ class BuildAutoAllocate(BuildOrderContextMixin, CreateAPI): queryset = Build.objects.none() serializer_class = build.serializers.BuildAutoAllocationSerializer + @extend_schema(responses={200: common.serializers.TaskDetailSerializer}) + def post(self, *args, **kwargs): + """Override the POST method to handle auto allocation task. + + As this is offloaded to the background task, + we return information about the background task which is performing the auto allocation operation. + """ + from build.tasks import auto_allocate_build + from InvenTree.tasks import offload_task + + build = self.get_build() + serializer = self.get_serializer(data=self.request.data) + serializer.is_valid(raise_exception=True) + data = serializer.validated_data + + # Offload the task to the background worker + task_id = offload_task( + auto_allocate_build, + build.pk, + location=data.get('location', None), + exclude_location=data.get('exclude_location', None), + interchangeable=data['interchangeable'], + substitutes=data['substitutes'], + optional_items=data['optional_items'], + item_type=data.get('item_type', 'untracked'), + group='build', + ) + + response = common.serializers.TaskDetailSerializer.from_task(task_id).data + return Response(response, status=response['http_status']) + class BuildAllocate(BuildOrderContextMixin, CreateAPI): """API endpoint to allocate stock items to a build order. @@ -780,6 +825,39 @@ class BuildConsume(BuildOrderContextMixin, CreateAPI): queryset = Build.objects.none() serializer_class = build.serializers.BuildConsumeSerializer + @extend_schema(responses={200: common.serializers.TaskDetailSerializer}) + def post(self, *args, **kwargs): + """Override the POST method to handle consume task. + + As this is offloaded to the background task, + we return information about the background task which is performing the consume operation. + """ + from build.tasks import consume_build_stock + from InvenTree.tasks import offload_task + + build = self.get_build() + serializer = self.get_serializer(data=self.request.data) + serializer.is_valid(raise_exception=True) + data = serializer.validated_data + + # Extract the information we need to consume build stock + items = data.get('items', []) + lines = data.get('lines', []) + notes = data.get('notes', '') + + # Offload the task to the background worker + task_id = offload_task( + consume_build_stock, + build.pk, + lines=[line['build_line'].pk for line in lines], + items={item['build_item'].pk: item['quantity'] for item in items}, + user_id=self.request.user.pk, + notes=notes, + ) + + response = common.serializers.TaskDetailSerializer.from_task(task_id).data + return Response(response, status=response['http_status']) + class BuildIssue(BuildOrderContextMixin, CreateAPI): """API endpoint for issuing a BuildOrder.""" @@ -802,13 +880,17 @@ class BuildCancel(BuildOrderContextMixin, CreateAPI): serializer_class = build.serializers.BuildCancelSerializer -class BuildItemDetail(RetrieveUpdateDestroyAPI): - """API endpoint for detail view of a BuildItem object.""" +class BuildItemMixin: + """Mixin class for BuildItem API endpoints.""" - queryset = BuildItem.objects.all() + queryset = BuildItem.objects.all().prefetch_related('stock_item__location') serializer_class = build.serializers.BuildItemSerializer +class BuildItemDetail(BuildItemMixin, RetrieveUpdateDestroyAPI): + """API endpoint for detail view of a BuildItem object.""" + + class BuildItemFilter(FilterSet): """Custom filterset for the BuildItemList API endpoint.""" @@ -893,16 +975,45 @@ class BuildItemOutputOptions(OutputConfiguration): """Output options for BuildItem endpoint.""" OPTIONS = [ - InvenTreeOutputOption('part_detail'), - InvenTreeOutputOption('location_detail'), - InvenTreeOutputOption('stock_detail'), - InvenTreeOutputOption('build_detail'), - InvenTreeOutputOption('supplier_part_detail'), + InvenTreeOutputOption( + 'part_detail', + default=False, + description='Include detailed information about the part associated with this build item.', + ), + InvenTreeOutputOption( + 'location_detail', + default=False, + description='Include detailed information about the location of the allocated stock item.', + ), + InvenTreeOutputOption( + 'stock_detail', + default=False, + description='Include detailed information about the allocated stock item.', + ), + InvenTreeOutputOption( + 'build_detail', + default=False, + description='Include detailed information about the associated build order.', + ), + InvenTreeOutputOption( + 'supplier_part_detail', + default=False, + description='Include detailed information about the supplier part associated with this build item.', + ), + InvenTreeOutputOption( + 'install_into_detail', + default=False, + description='Include detailed information about the build output for this build item.', + ), ] class BuildItemList( - DataExportViewMixin, OutputOptionsMixin, BulkDeleteMixin, ListCreateAPI + BuildItemMixin, + DataExportViewMixin, + OutputOptionsMixin, + BulkDeleteMixin, + ListCreateAPI, ): """API endpoint for accessing a list of BuildItem objects. @@ -911,10 +1022,8 @@ class BuildItemList( """ output_options = BuildItemOutputOptions - queryset = BuildItem.objects.all() - serializer_class = build.serializers.BuildItemSerializer filterset_class = BuildItemFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER def get_queryset(self): """Override the queryset method, to perform custom prefetch.""" @@ -960,11 +1069,7 @@ build_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=BuildItem), - name='api-build-item-metadata', - ), + meta_path(BuildItem), path('', BuildItemDetail.as_view(), name='api-build-item-detail'), ]), ), @@ -1007,11 +1112,7 @@ build_api_urls = [ 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'), - path( - 'metadata/', - MetadataView.as_view(model=Build), - name='api-build-metadata', - ), + meta_path(Build), path('', BuildDetail.as_view(), name='api-build-detail'), ]), ), diff --git a/src/backend/InvenTree/build/migrations/0012_build_sales_order.py b/src/backend/InvenTree/build/migrations/0012_build_sales_order.py index 6b4a845a6e..cd2860919f 100644 --- a/src/backend/InvenTree/build/migrations/0012_build_sales_order.py +++ b/src/backend/InvenTree/build/migrations/0012_build_sales_order.py @@ -15,6 +15,6 @@ class Migration(migrations.Migration): migrations.AddField( model_name='build', name='sales_order', - field=models.ForeignKey(blank=True, help_text='SalesOrder to which this build is allocated', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='builds', to='order.SalesOrder'), + field=models.ForeignKey(blank=True, help_text='Sales Order to which this build is allocated', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='builds', to='order.SalesOrder'), ), ] diff --git a/src/backend/InvenTree/build/migrations/0014_auto_20200425_1243.py b/src/backend/InvenTree/build/migrations/0014_auto_20200425_1243.py index af65a12cb3..88fece94ba 100644 --- a/src/backend/InvenTree/build/migrations/0014_auto_20200425_1243.py +++ b/src/backend/InvenTree/build/migrations/0014_auto_20200425_1243.py @@ -50,7 +50,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='build', name='sales_order', - field=models.ForeignKey(blank=True, help_text='SalesOrder to which this build is allocated', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='builds', to='order.SalesOrder', verbose_name='Sales Order Reference'), + field=models.ForeignKey(blank=True, help_text='Sales Order to which this build is allocated', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='builds', to='order.SalesOrder', verbose_name='Sales Order Reference'), ), migrations.AlterField( model_name='build', 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 5094d74c6d..db2803f53f 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 @@ -37,7 +37,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='build', name='parent', - field=mptt.fields.TreeForeignKey(blank=True, help_text='BuildOrder to which this build is allocated', null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='children', to='build.Build', verbose_name='Parent Build'), + field=mptt.fields.TreeForeignKey(blank=True, help_text='Build Order to which this build is allocated', null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='children', to='build.Build', verbose_name='Parent Build'), ), migrations.AlterField( model_name='build', diff --git a/src/backend/InvenTree/build/migrations/0024_auto_20201201_1023.py b/src/backend/InvenTree/build/migrations/0024_auto_20201201_1023.py index fde4114af5..4e995fdf80 100644 --- a/src/backend/InvenTree/build/migrations/0024_auto_20201201_1023.py +++ b/src/backend/InvenTree/build/migrations/0024_auto_20201201_1023.py @@ -15,6 +15,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='build', name='parent', - field=mptt.fields.TreeForeignKey(blank=True, help_text='BuildOrder to which this build is allocated', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='children', to='build.Build', verbose_name='Parent Build'), + field=mptt.fields.TreeForeignKey(blank=True, help_text='Build Order to which this build is allocated', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='children', to='build.Build', verbose_name='Parent Build'), ), ] diff --git a/src/backend/InvenTree/build/models.py b/src/backend/InvenTree/build/models.py index 42e8213099..39018c661a 100644 --- a/src/backend/InvenTree/build/models.py +++ b/src/backend/InvenTree/build/models.py @@ -1,7 +1,7 @@ """Build database model definitions.""" import decimal -from typing import Optional +from typing import Optional, TypedDict from django.contrib.auth.models import User from django.core.exceptions import ValidationError @@ -42,6 +42,7 @@ from common.settings import ( get_global_setting, prevent_build_output_complete_on_incompleted_tests, ) +from generic.enums import StringEnum from generic.states import StateTransitionMixin, StatusCodeMixin from plugin.events import trigger_event from stock.status_codes import StockHistoryCode, StockStatus @@ -49,7 +50,7 @@ from stock.status_codes import StockHistoryCode, StockStatus logger = structlog.get_logger('inventree') -class BuildReportContext(report.mixins.BaseReportContext): +class BuildReportContext(report.mixins.BaseReportContext, TypedDict): """Context for the Build model. Attributes: @@ -111,6 +112,7 @@ class Build( """ STATUS_CLASS = BuildStatus + IMPORT_ID_FIELDS = ['reference'] class Meta: """Metaclass options for the BuildOrder model.""" @@ -123,11 +125,21 @@ class Build( order_insertion_by = ['reference'] - OVERDUE_FILTER = ( - Q(status__in=BuildStatusGroups.ACTIVE_CODES) - & ~Q(target_date=None) - & Q(target_date__lte=InvenTree.helpers.current_date()) - ) + class BuildItemTypes(StringEnum): + """Enumeration of available item types.""" + + ALL = 'all' # All BOM items (both tracked and untracked) + TRACKED = 'tracked' # Tracked BOM items + UNTRACKED = 'untracked' # Untracked BOM items + + @classmethod + def get_overdue_filter(cls): + """Filter for determining if a build order is overdue.""" + return ( + Q(status__in=BuildStatusGroups.ACTIVE_CODES) + & ~Q(target_date=None) + & Q(target_date__lte=InvenTree.helpers.current_date()) + ) # Global setting for specifying reference pattern REFERENCE_PATTERN_SETTING = 'BUILDORDER_REFERENCE_PATTERN' @@ -263,7 +275,7 @@ class Build( null=True, related_name='children', verbose_name=_('Parent Build'), - help_text=_('BuildOrder to which this build is allocated'), + help_text=_('Build Order to which this build is allocated'), ) part = models.ForeignKey( @@ -282,7 +294,7 @@ class Build( related_name='builds', null=True, blank=True, - help_text=_('SalesOrder to which this build is allocated'), + help_text=_('Sales Order to which this build is allocated'), ) take_from = models.ForeignKey( @@ -456,7 +468,7 @@ class Build( bool: Is the build overdue """ query = Build.objects.filter(pk=self.pk) - query = query.filter(Build.OVERDUE_FILTER) + query = query.filter(Build.get_overdue_filter()) return query.exists() @@ -949,49 +961,10 @@ class Build( # Auto-allocate stock based on serial number if auto_allocate: - for bom_item in trackable_parts: - valid_part_ids = valid_parts.get(bom_item.pk, []) - - # Find all matching stock items, based on serial number - stock_items = list( - stock.models.StockItem.objects.filter( - part__pk__in=valid_part_ids, - serial=output.serial, - quantity=1, - ) - ) - - # Filter stock items to only those which are in stock - # Note that we can accept "in production" items here - available_items = list( - filter( - lambda item: item.is_in_stock( - check_in_production=False - ), - stock_items, - ) - ) - - if len(available_items) == 1: - stock_item = available_items[0] - - # Find the 'BuildLine' object which points to this BomItem - try: - build_line = BuildLine.objects.get( - build=self, bom_item=bom_item - ) - - # Allocate the stock items against the BuildLine - allocations.append( - BuildItem( - build_line=build_line, - stock_item=stock_item, - quantity=1, - install_into=output, - ) - ) - except BuildLine.DoesNotExist: - pass + if new_allocations := self.auto_allocate_tracked_output( + output, location=self.take_from + ): + allocations.extend(new_allocations) # Bulk create tracking entries stock.models.StockItemTracking.objects.bulk_create(tracking) @@ -1066,7 +1039,7 @@ class Build( lines = lines.exclude(bom_item__consumable=True) lines = lines.annotate(allocated=annotate_allocated_quantity()) - for build_line in lines: # type: ignore[non-iterable] + for build_line in lines: reduce_by = build_line.allocated - build_line.quantity if reduce_by <= 0: @@ -1173,6 +1146,7 @@ class Build( user, notes=notes, deltas={ + 'quantity': float(quantity), 'location': location.pk, 'status': StockStatus.REJECTED.value, 'buildorder': self.pk, @@ -1222,6 +1196,13 @@ class Build( # List the allocated BuildItem objects for the given output allocated_items = output.items_to_install.all() + # Ensure that none of the allocated items are themselves still "in production" + for build_item in allocated_items: + if build_item.stock_item.is_building: + raise ValidationError( + _('Allocated stock items are still in production') + ) + # If a partial quantity is provided, split the stock output if quantity is not None and quantity != output.quantity: # Cannot split a build output with allocated items @@ -1254,11 +1235,17 @@ class Build( output.build = self output.is_building = False output.location = location - output.status = status + + # Assign the stock status + output.set_status(status) output.save(add_note=False) - deltas = {'status': status, 'buildorder': self.pk} + deltas = { + 'status': status, + 'buildorder': self.pk, + 'quantity': float(output.quantity), + } if location: deltas['location'] = location.pk @@ -1275,11 +1262,134 @@ class Build( self.save() @transaction.atomic - def auto_allocate_stock(self, **kwargs): + def auto_allocate_stock( + self, item_type: str = BuildItemTypes.UNTRACKED, **kwargs + ) -> None: """Automatically allocate stock items against this build order. - Following a number of 'guidelines': - - Only "untracked" BOM items are considered (tracked BOM items must be manually allocated) + Arguments: + item_type: The type of BuildItem to allocate (default = untracked) + """ + if item_type in [self.BuildItemTypes.UNTRACKED, self.BuildItemTypes.ALL]: + self.auto_allocate_untracked_stock(**kwargs) + + if item_type in [self.BuildItemTypes.TRACKED, self.BuildItemTypes.ALL]: + self.auto_allocate_tracked_stock(**kwargs) + + def auto_allocate_tracked_output(self, output, **kwargs): + """Auto-allocate tracked stock items against a particular build output. + + This may occur at the time of build output creation, or later when triggered manually. + """ + location = kwargs.get('location') + exclude_location = kwargs.get('exclude_location') + substitutes = kwargs.get('substitutes', True) + optional_items = kwargs.get('optional_items', False) + + # Newly created allocations (not yet committed to the database) + allocations = [] + + # Return early if the output should not be auto-allocated + if not output.serialized: + return allocations + + tracked_line_items = self.tracked_line_items.filter( + bom_item__consumable=False, bom_item__sub_part__virtual=False + ) + + for line_item in tracked_line_items: + bom_item = line_item.bom_item + + if bom_item.consumable: + # Do not auto-allocate stock to consumable BOM items + continue + + if bom_item.optional and not optional_items: + # User has specified that optional_items are to be ignored + continue + + # If the line item is already fully allocated, we can continue + if line_item.is_fully_allocated(): + continue + + # If there is already allocated stock against this build output, skip it + if line_item.allocated_quantity(output=output) > 0: + continue + + # Find available parts (may include variants and substitutes) + available_parts = bom_item.get_valid_parts_for_allocation( + allow_variants=True, allow_substitutes=substitutes + ) + + # Find stock items which match the output serial number + available_stock = stock.models.StockItem.objects.filter( + part__in=list(available_parts), + part__active=True, + part__virtual=False, + serial=output.serial, + ).exclude(Q(serial=None) | Q(serial='')) + + if location: + # Filter only stock items located "below" the specified location + sublocations = location.get_descendants(include_self=True) + available_stock = available_stock.filter( + location__in=list(sublocations) + ) + + if exclude_location: + # Exclude any stock items from the provided location + sublocations = exclude_location.get_descendants(include_self=True) + available_stock = available_stock.exclude( + location__in=list(sublocations) + ) + + # Filter stock items to only those which are in stock + # Note that we can accept "in production" items here + available_items = list( + filter( + lambda item: item.is_in_stock(check_in_production=False), + available_stock, + ) + ) + + if len(available_items) == 1: + allocations.append( + BuildItem( + build_line=line_item, + stock_item=available_items[0], + quantity=1, + install_into=output, + ) + ) + + return allocations + + def auto_allocate_tracked_stock(self, **kwargs): + """Automatically allocate tracked stock items against serialized build outputs. + + This function allocates tracked stock items automatically against serialized build outputs, + following a set of "guidelines": + + - Only "tracked" BOM items are considered (untracked BOM items must be allocated separately) + - Only build outputs with serial numbers are considered + - Unallocated tracked components are allocated against build outputs with matching serial numbers + """ + new_items = [] + + # Select only "tracked" line items + for output in self.incomplete_outputs.all(): + new_items.extend(self.auto_allocate_tracked_output(output, **kwargs)) + + # Bulk-create the new BuildItem objects + BuildItem.objects.bulk_create(new_items) + + def auto_allocate_untracked_stock(self, **kwargs): + """Automatically allocate untracked stock items against this build order. + + This function allocates untracked stock items automatically against a BuildOrder, + following a set of "guidelines": + + - Only "untracked" BOM items are considered (tracked BOM items must be allocated separately) - If a particular BOM item is already fully allocated, it is skipped - Extract all available stock items for the BOM part - If variant stock is allowed, extract stock for those too @@ -1303,7 +1413,7 @@ class Build( new_items = [] - # Auto-allocation is only possible for "untracked" line items + # Select only "untracked" line items for line_item in self.untracked_line_items.all(): # Find the referenced BomItem bom_item = line_item.bom_item @@ -1326,7 +1436,7 @@ class Build( # Check which parts we can "use" (may include variants and substitutes) available_parts = bom_item.get_valid_parts_for_allocation( - allow_variants=True, allow_substitutes=substitutes + allow_variants=True, allow_inactive=False, allow_substitutes=substitutes ) # Look for available stock items @@ -1337,6 +1447,11 @@ class Build( # Filter by list of available parts available_stock = available_stock.filter(part__in=list(available_parts)) + # Ensure part is active and not virtual + available_stock = available_stock.filter( + part__active=True, part__virtual=False + ) + # Filter out "serialized" stock items, these cannot be auto-allocated available_stock = available_stock.filter( Q(serial=None) | Q(serial='') @@ -1369,10 +1484,7 @@ class Build( key=lambda item, b=bom_item, v=variant_parts: stock_sort(item, b, v), ) - if len(available_stock) == 0: - # No stock items are available - continue - elif len(available_stock) == 1 or interchangeable: + if len(available_stock) == 1 or interchangeable: # Either there is only a single stock item available, # or all items are "interchangeable" and we don't care where we take stock from @@ -1400,10 +1512,10 @@ class Build( unallocated_quantity -= quantity except (ValidationError, serializers.ValidationError) as exc: - # Catch model errors and re-throw as DRF errors + # Re-raise with a Django-compatible validation payload raise ValidationError( - exc.message, detail=serializers.as_serializer_error(exc) - ) + serializers.as_serializer_error(exc) + ) from exc if unallocated_quantity <= 0: # We have now fully-allocated this BomItem - no need to continue! @@ -1583,7 +1695,7 @@ def after_save_build(sender, instance: Build, created: bool, **kwargs): instance.update_build_line_items() -class BuildLineReportContext(report.mixins.BaseReportContext): +class BuildLineReportContext(report.mixins.BaseReportContext, TypedDict): """Context for the BuildLine model. Attributes: @@ -1633,6 +1745,7 @@ class BuildLine(report.mixins.InvenTreeReportMixin, InvenTree.models.InvenTreeMo """Return the API URL used to access this model.""" return reverse('api-build-line-list') + # type def report_context(self) -> BuildLineReportContext: """Generate custom report context for this BuildLine object.""" return { @@ -1679,11 +1792,14 @@ class BuildLine(report.mixins.InvenTreeReportMixin, InvenTree.models.InvenTreeMo """Return the sub_part reference from the link bom_item.""" return self.bom_item.sub_part - def allocated_quantity(self): + def allocated_quantity(self, output: Optional[stock.models.StockItem] = None): """Calculate the total allocated quantity for this BuildLine.""" # Queryset containing all BuildItem objects allocated against this BuildLine allocations = self.allocations.all() + if output is not None: + allocations = allocations.filter(install_into=output) + allocated = allocations.aggregate( q=Coalesce(Sum('quantity'), 0, output_field=models.DecimalField()) ) @@ -1746,11 +1862,10 @@ class BuildItem(InvenTree.models.InvenTreeMetadataModel): def save(self, *args, **kwargs): """Custom save method for the BuildItem model.""" - self.clean() - + self.clean(raise_error=False) super().save() - def clean(self): + def clean(self, raise_error: bool = True): """Check validity of this BuildItem instance. The following checks are performed: @@ -1774,47 +1889,7 @@ class BuildItem(InvenTree.models.InvenTreeMetadataModel): ) ) - # Allocated quantity cannot exceed available stock quantity - if self.quantity > self.stock_item.quantity: - q = InvenTree.helpers.normalize(self.quantity) - a = InvenTree.helpers.normalize(self.stock_item.quantity) - - raise ValidationError({ - 'quantity': _( - f'Allocated quantity ({q}) must not exceed available stock quantity ({a})' - ) - }) - - # Ensure that we do not 'over allocate' a stock item - available = decimal.Decimal(self.stock_item.quantity) - quantity = decimal.Decimal(self.quantity) - build_allocation_count = decimal.Decimal( - self.stock_item.build_allocation_count( - exclude_allocations={'pk': self.pk} - ) - ) - sales_allocation_count = decimal.Decimal( - self.stock_item.sales_order_allocation_count() - ) - - total_allocation = ( - build_allocation_count + sales_allocation_count + quantity - ) - - if total_allocation > available: - raise ValidationError({'quantity': _('Stock item is over-allocated')}) - - # Allocated quantity must be positive - if self.quantity <= 0: - raise ValidationError({ - 'quantity': _('Allocation quantity must be greater than zero') - }) - - # Quantity must be 1 for serialized stock - if self.stock_item.serialized and self.quantity != 1: - raise ValidationError({ - 'quantity': _('Quantity must be 1 for serialized stock') - }) + self.check_allocated_quantity(raise_error=raise_error) except stock.models.StockItem.DoesNotExist: raise ValidationError('Stock item must be specified') @@ -1876,6 +1951,60 @@ class BuildItem(InvenTree.models.InvenTreeMetadataModel): 'stock_item': _('Selected stock item does not match BOM line') }) + def check_allocated_quantity(self, raise_error: bool = False): + """Ensure that the allocated quantity is valid. + + Will reduce the allocated quantity if it exceeds available stock. + + Arguments: + raise_error: If True, raise ValidationError on failure + + Raises: + ValidationError: If the allocated quantity is invalid and raise_error is True + """ + error = None + + # Allocated quantity must be positive + if self.quantity <= 0: + self.quantity = 0 + error = {'quantity': _('Allocated quantity must be greater than zero')} + + # Quantity must be 1 for serialized stock + if self.stock_item.serialized and self.quantity != 1: + self.quantity = 1 + raise ValidationError({ + 'quantity': _('Quantity must be 1 for serialized stock') + }) + + # Allocated quantity cannot exceed available stock quantity + if self.quantity > self.stock_item.quantity: + q = InvenTree.helpers.normalize(self.quantity) + a = InvenTree.helpers.normalize(self.stock_item.quantity) + self.quantity = self.stock_item.quantity + error = { + 'quantity': _( + f'Allocated quantity ({q}) must not exceed available stock quantity ({a})' + ) + } + + # Ensure that we do not 'over allocate' a stock item + available = decimal.Decimal(self.stock_item.quantity) + quantity = decimal.Decimal(self.quantity) + build_allocation_count = decimal.Decimal( + self.stock_item.build_allocation_count(exclude_allocations={'pk': self.pk}) + ) + sales_allocation_count = decimal.Decimal( + self.stock_item.sales_order_allocation_count() + ) + + total_allocation = build_allocation_count + sales_allocation_count + quantity + + if total_allocation > available: + error = {'quantity': _('Stock item is over-allocated')} + + if error and raise_error: + raise ValidationError(error) + @property def build(self): """Return the BuildOrder associated with this BuildItem.""" @@ -1887,7 +2016,7 @@ class BuildItem(InvenTree.models.InvenTreeMetadataModel): return self.build_line.bom_item if self.build_line else None @transaction.atomic - def complete_allocation(self, quantity=None, notes='', user=None) -> None: + def complete_allocation(self, quantity=None, notes: str = '', user=None) -> None: """Complete the allocation of this BuildItem into the output stock item. Arguments: @@ -1910,9 +2039,7 @@ class BuildItem(InvenTree.models.InvenTreeMetadataModel): # Ensure we are not allocating more than available if quantity > item.quantity: - raise ValidationError({ - 'quantity': _('Allocated quantity exceeds available stock quantity') - }) + quantity = item.quantity # Split the allocated stock if there are more available than allocated if item.quantity > quantity: diff --git a/src/backend/InvenTree/build/serializers.py b/src/backend/InvenTree/build/serializers.py index b13d5fdf17..1e1f3c6860 100644 --- a/src/backend/InvenTree/build/serializers.py +++ b/src/backend/InvenTree/build/serializers.py @@ -21,7 +21,6 @@ from django.utils.translation import gettext_lazy as _ from rest_framework import serializers from rest_framework.serializers import ValidationError -import build.tasks import common.filters import common.settings import company.serializers @@ -38,7 +37,6 @@ from InvenTree.serializers import ( NotesFieldMixin, enable_filter, ) -from InvenTree.tasks import offload_task from stock.generators import generate_batch_code from stock.models import StockItem, StockLocation from stock.serializers import ( @@ -51,7 +49,6 @@ from users.serializers import OwnerSerializer, UserSerializer from .models import Build, BuildItem, BuildLine from .status_codes import BuildStatus -from .tasks import consume_build_item, consume_build_line class BuildSerializer( @@ -168,7 +165,8 @@ class BuildSerializer( queryset = queryset.annotate( overdue=Case( When( - Build.OVERDUE_FILTER, then=Value(True, output_field=BooleanField()) + Build.get_overdue_filter(), + then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()), ) @@ -1117,25 +1115,16 @@ class BuildAutoAllocationSerializer(serializers.Serializer): help_text=_('Allocate optional BOM items to build order'), ) - def save(self): - """Perform the auto-allocation step.""" - import InvenTree.tasks - - data = self.validated_data - - build_order = self.context['build'] - - if not InvenTree.tasks.offload_task( - build.tasks.auto_allocate_build, - build_order.pk, - location=data.get('location', None), - exclude_location=data.get('exclude_location', None), - interchangeable=data['interchangeable'], - substitutes=data['substitutes'], - optional_items=data['optional_items'], - group='build', - ): - raise ValidationError(_('Failed to start auto-allocation task')) + item_type = serializers.ChoiceField( + default=Build.BuildItemTypes.UNTRACKED, + choices=[ + (Build.BuildItemTypes.ALL, _('All Items')), + (Build.BuildItemTypes.UNTRACKED, _('Untracked Items')), + (Build.BuildItemTypes.TRACKED, _('Tracked Items')), + ], + label=_('Item Type'), + help_text=_('Select item type to auto-allocate'), + ) class BuildItemSerializer( @@ -1179,6 +1168,7 @@ class BuildItemSerializer( 'part_detail', 'stock_item_detail', 'supplier_part_detail', + 'install_into_detail', # The following fields are only used for data export 'bom_reference', 'bom_part_id', @@ -1244,6 +1234,21 @@ class BuildItemSerializer( ], ) + install_into_detail = enable_filter( + StockItemSerializer( + source='install_into', + read_only=True, + allow_null=True, + label=_('Install Into'), + part_detail=False, + location_detail=False, + supplier_part_detail=False, + path_detail=False, + ), + False, + prefetch_fields=['install_into', 'install_into__part'], + ) + location = serializers.PrimaryKeyRelatedField( label=_('Location'), source='stock_item.location', many=False, read_only=True ) @@ -1378,7 +1383,9 @@ class BuildLineSerializer( ) allocations = enable_filter( - BuildItemSerializer(many=True, read_only=True, build_detail=False), + BuildItemSerializer( + many=True, read_only=True, allow_null=True, build_detail=False + ), True, prefetch_fields=[ 'allocations', @@ -1426,6 +1433,7 @@ class BuildLineSerializer( source='bom_item', many=False, read_only=True, + allow_null=True, pricing=False, substitutes=False, sub_part_detail=False, @@ -1455,6 +1463,7 @@ class BuildLineSerializer( source='bom_item.sub_part', many=False, read_only=True, + allow_null=True, pricing=False, ), False, @@ -1814,46 +1823,3 @@ class BuildConsumeSerializer(serializers.Serializer): raise ValidationError(_('At least one item or line must be provided')) return data - - @transaction.atomic - def save(self): - """Perform the stock consumption step.""" - data = self.validated_data - request = self.context.get('request') - notes = data.get('notes', '') - - # We may be passed either a list of BuildItem or BuildLine instances - items = data.get('items', []) - lines = data.get('lines', []) - - with transaction.atomic(): - # Process the provided BuildItem objects - for item in items: - build_item = item['build_item'] - quantity = item['quantity'] - - if build_item.install_into: - # If the build item is tracked into an output, we do not consume now - # Instead, it gets consumed when the output is completed - continue - - # Offload a background task to consume this BuildItem - offload_task( - consume_build_item, - build_item.pk, - quantity, - notes=notes, - user_id=request.user.pk if request else None, - ) - - # Process the provided BuildLine objects - for line in lines: - build_line = line['build_line'] - - # Offload a background task to consume this BuildLine - offload_task( - consume_build_line, - build_line.pk, - notes=notes, - user_id=request.user.pk if request else None, - ) diff --git a/src/backend/InvenTree/build/tasks.py b/src/backend/InvenTree/build/tasks.py index fd8e3da1de..363dac3e19 100644 --- a/src/backend/InvenTree/build/tasks.py +++ b/src/backend/InvenTree/build/tasks.py @@ -2,8 +2,10 @@ from datetime import timedelta from decimal import Decimal +from typing import Optional from django.contrib.auth.models import User +from django.db import transaction from django.utils.translation import gettext_lazy as _ import structlog @@ -27,61 +29,53 @@ def auto_allocate_build(build_id: int, **kwargs): """Run auto-allocation for a specified BuildOrder.""" from build.models import Build - build_order = Build.objects.filter(pk=build_id).first() - - if not build_order: - logger.warning( - 'Could not auto-allocate BuildOrder <%s> - BuildOrder does not exist', - build_id, - ) - return - + build_order = Build.objects.get(pk=build_id) build_order.auto_allocate_stock(**kwargs) -@tracer.start_as_current_span('consume_build_item') -def consume_build_item( - item_id: str, quantity, notes: str = '', user_id: int | None = None +@tracer.start_as_current_span('consume_build_stock') +def consume_build_stock( + build_id: int, + lines: Optional[list[int]] = None, + items: Optional[dict] = None, + user_id: int | None = None, + **kwargs, ): - """Consume stock against a particular BuildOrderLineItem allocation.""" - from build.models import BuildItem + """Consume stock for the specified BuildOrder. - item = BuildItem.objects.filter(pk=item_id).first() + Arguments: + build_id: The ID of the BuildOrder to consume stock for + lines: Optional list of BuildLine IDs to consume + items: Optional dict of BuildItem IDs (and quantities)to consume + user_id: The ID of the user who initiated the stock consumption + """ + from build.models import Build, BuildItem, BuildLine - if not item: - logger.warning( - 'Could not consume stock for BuildItem <%s> - BuildItem does not exist', - item_id, - ) - return + build = Build.objects.get(pk=build_id) + user = User.objects.filter(pk=user_id).first() if user_id else None - item.complete_allocation( - quantity=quantity, - notes=notes, - user=User.objects.filter(pk=user_id).first() if user_id else None, - ) + lines = lines or [] + items = items or {} + notes = kwargs.pop('notes', '') + # Extract the relevant BuildLine and BuildItem objects + with transaction.atomic(): + # Consume each of the specified BuildLine objects + for line_id in lines: + if build_line := BuildLine.objects.filter(pk=line_id, build=build).first(): + for item in build_line.allocations.all(): + item.complete_allocation( + quantity=item.quantity, notes=notes, user=user + ) -@tracer.start_as_current_span('consume_build_line') -def consume_build_line(line_id: int, notes: str = '', user_id: int | None = None): - """Consume stock against a particular BuildOrderLineItem.""" - from build.models import BuildLine - - line_item = BuildLine.objects.filter(pk=line_id).first() - - if not line_item: - logger.warning( - 'Could not consume stock for LineItem <%s> - LineItem does not exist', - line_id, - ) - return - - for item in line_item.allocations.all(): - item.complete_allocation( - quantity=item.quantity, - notes=notes, - user=User.objects.filter(pk=user_id).first() if user_id else None, - ) + # Consume each of the specified BuildItem objects + for item_id, quantity in items.items(): + if build_item := BuildItem.objects.filter( + pk=item_id, build_line__build=build + ).first(): + build_item.complete_allocation( + quantity=quantity, notes=notes, user=user + ) @tracer.start_as_current_span('complete_build_allocations') @@ -89,7 +83,7 @@ def complete_build_allocations(build_id: int, user_id: int): """Complete build allocations for a specified BuildOrder.""" from build.models import Build - build_order = Build.objects.filter(pk=build_id).first() + build_order = Build.objects.get(pk=build_id) if user_id: try: @@ -103,13 +97,6 @@ def complete_build_allocations(build_id: int, user_id: int): else: user = None - if not build_order: - logger.warning( - 'Could not complete build allocations for BuildOrder <%s> - BuildOrder does not exist', - build_id, - ) - return - build_order.complete_allocations(user) diff --git a/src/backend/InvenTree/build/test_api.py b/src/backend/InvenTree/build/test_api.py index 241eb1d3e7..26fdaf201e 100644 --- a/src/backend/InvenTree/build/test_api.py +++ b/src/backend/InvenTree/build/test_api.py @@ -920,6 +920,77 @@ class BuildAllocationTest(BuildAPITest): self.assertIsNotNone(bi) self.assertEqual(bi.build, build) + def test_auto_allocate_tracked(self): + """Test manual auto-allocation of tracked items against a Build.""" + # Create a base assembly + assembly = Part.objects.create( + name='Test Assembly', + description='Test Assembly Description', + assembly=True, + trackable=True, + ) + + component = Part.objects.create( + name='Test Component', + description='Test Component Description', + trackable=True, + component=True, + ) + + # Create a BOM item for the assembly + BomItem.objects.create(part=assembly, sub_part=component, quantity=1) + + # Create a build order for the assembly + build = Build.objects.create(part=assembly, reference='BO-12347', quantity=10) + + SN = '123456' + + # Create serialized component item + c = StockItem.objects.create(part=component, quantity=1, serial=SN) + + N = BuildItem.objects.count() + + # Create a new build output + response = self.post( + reverse('api-build-output-create', kwargs={'pk': build.pk}), + {'quantity': 1, 'serial_numbers': SN, 'auto_allocate': False}, + expected_code=201, + ) + + output = response.data[0] + + self.assertIsNotNone(output) + self.assertIsNotNone(output['pk']) + self.assertEqual(output['serial'], SN) + + # No new build items (allocations) have been created yet + self.assertEqual(N, BuildItem.objects.count()) + + # Let's auto-allocate via the API now + url = reverse('api-build-auto-allocate', kwargs={'pk': build.pk}) + + # Allocate only 'untracked' items - this should not allocate our tracked item + self.post(url, data={'item_type': 'untracked'}, expected_code=200) + + self.assertEqual(N, BuildItem.objects.count()) + + # Allocate 'tracked' items - this should allocate our tracked item + self.post(url, data={'item_type': 'tracked'}, expected_code=200) + + # A new BuildItem should have been created + self.assertEqual(N + 1, BuildItem.objects.count()) + + line = build.build_lines.first() + + self.assertIsNotNone(line) + allocations = line.allocations.filter(install_into_id=output['pk']) + self.assertEqual(allocations.count(), 1) + + allocation = allocations.first() + + self.assertEqual(allocation.stock_item, c) + self.assertEqual(allocation.quantity, 1) + class BuildItemTest(BuildAPITest): """Unit tests for build items. @@ -1493,12 +1564,13 @@ class BuildLineTests(BuildAPITest): # Filter by 'available' status # Note: The max_query_time is bumped up here, as postgresql backend has some strange issues (only during testing) - response = self.get(url, data={'available': True}, max_query_time=15) + # TODO: This needs to be addressed in the future, as 25 seconds is an unacceptably long time for a query to take in testing + response = self.get(url, data={'available': True}, max_query_time=25) n_t = len(response.data) self.assertGreater(n_t, 0) # Note: The max_query_time is bumped up here, as postgresql backend has some strange issues (only during testing) - response = self.get(url, data={'available': False}, max_query_time=15) + response = self.get(url, data={'available': False}, max_query_time=25) n_f = len(response.data) self.assertGreater(n_f, 0) @@ -1664,7 +1736,7 @@ class BuildConsumeTest(BuildAPITest): 'lines': [{'build_line': line.pk} for line in self.build.build_lines.all()] } - self.post(url, data, expected_code=201) + self.post(url, data, expected_code=200) self.assertEqual(self.build.allocated_stock.count(), 0) self.assertEqual(self.build.consumed_stock.count(), 3) @@ -1687,7 +1759,7 @@ class BuildConsumeTest(BuildAPITest): ] } - self.post(url, data, expected_code=201) + self.post(url, data, expected_code=200) self.assertEqual(self.build.allocated_stock.count(), 0) self.assertEqual(self.build.consumed_stock.count(), 3) diff --git a/src/backend/InvenTree/common/api.py b/src/backend/InvenTree/common/api.py index 4118548acc..2fb2a6b09f 100644 --- a/src/backend/InvenTree/common/api.py +++ b/src/backend/InvenTree/common/api.py @@ -5,8 +5,9 @@ import json.decoder from django.conf import settings from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import ValidationError +from django.core.exceptions import FieldDoesNotExist, ValidationError from django.db.models import Q +from django.http import JsonResponse from django.http.response import HttpResponse from django.urls import include, path, re_path from django.utils.decorators import method_decorator @@ -16,11 +17,12 @@ from django.views.decorators.csrf import csrf_exempt import django_filters.rest_framework.filters as rest_filters import django_q.models +import django_q.tasks from django_filters.rest_framework.filterset import FilterSet -from django_q.tasks import async_task from djmoney.contrib.exchange.models import ExchangeBackend, Rate from drf_spectacular.utils import OpenApiResponse, extend_schema from error_report.models import Error +from opentelemetry import trace from pint._typing import UnitLike from rest_framework import generics, serializers from rest_framework.exceptions import NotAcceptable, NotFound, PermissionDenied @@ -33,17 +35,21 @@ import common.filters import common.models import common.serializers import InvenTree.conversion +import InvenTree.models +import InvenTree.ready from common.icons import get_icon_packs from common.settings import get_global_setting from data_exporter.mixins import DataExportViewMixin from generic.states.api import urlpattern as generic_states_api_urls -from InvenTree.api import BulkCreateMixin, BulkDeleteMixin, MetadataView -from InvenTree.config import CONFIG_LOOKUPS -from InvenTree.filters import ( - ORDER_FILTER, - SEARCH_ORDER_FILTER, - SEARCH_ORDER_FILTER_ALIAS, +from InvenTree.api import ( + BulkCreateMixin, + BulkDeleteMixin, + GenericMetadataView, + SimpleGenericMetadataView, + meta_path, ) +from InvenTree.config import CONFIG_LOOKUPS +from InvenTree.filters import ORDER_FILTER, SEARCH_ORDER_FILTER from InvenTree.helpers import inheritors, str2bool from InvenTree.helpers_email import send_email from InvenTree.mixins import ( @@ -109,7 +115,7 @@ class WebhookView(CsrfExemptMixin, APIView): # process data message = self.webhook.save_data(payload, headers, request) if self.run_async: - async_task(self._process_payload, message.id) + django_q.tasks.async_task(self._process_payload, message.id) else: self._process_result( self.webhook.process_payload(message, payload, headers), message @@ -558,13 +564,29 @@ class ErrorMessageDetail(RetrieveUpdateDestroyAPI): permission_classes = [IsAuthenticatedOrReadScope, IsAdminUser] +class BackgroundTaskDetail(APIView): + """Detail view for a single background task.""" + + permission_classes = [IsAuthenticatedOrReadScope] + + @extend_schema(responses={200: common.serializers.TaskDetailSerializer}) + def get(self, request, task_id, *args, **kwargs): + """Fetch information regarding a particular background task ID.""" + response = common.serializers.TaskDetailSerializer.from_task(task_id).data + + return Response(response, status=response['http_status']) + + class BackgroundTaskOverview(APIView): """Provides an overview of the background task queue status.""" permission_classes = [IsAuthenticatedOrReadScope, IsAdminUser] serializer_class = None - @extend_schema(responses={200: common.serializers.TaskOverviewSerializer}) + @extend_schema( + operation_id='background_task_overview', + responses={200: common.serializers.TaskOverviewSerializer}, + ) def get(self, request, fmt=None): """Return information about the current status of the background task queue.""" import django_q.models as q_models @@ -602,7 +624,7 @@ class ScheduledTaskList(ListAPI): ordering_fields = ['pk', 'func', 'last_run', 'next_run'] - search_fields = ['func'] + search_fields = ['func', 'name'] def get_queryset(self): """Return annotated queryset.""" @@ -830,7 +852,13 @@ class ParameterTemplateFilter(FilterSet): content_type = common.filters.determine_content_type(value) if not content_type: - return queryset.none() + raise ValidationError({ + 'exists_for_model': 'Invalid model type provided - unable to determine content type' + }) + + # If the 'filter_exists_for_model_id' filter is applied, defer to that + if self.request.query_params.get('exists_for_model_id', None): + return queryset queryset = queryset.prefetch_related('parameters') @@ -844,6 +872,160 @@ class ParameterTemplateFilter(FilterSet): # Return only those ParameterTemplates which have at least one Parameter for the given model type return queryset.filter(parameter_count__gt=0) + exists_for_model_id = rest_filters.NumberFilter( + method='filter_exists_for_model_id', label='Exists For Model ID' + ) + + def filter_exists_for_model_id(self, queryset, name, value): + """Filter queryset to include only ParameterTemplates which have at least one Parameter for the given model type and model id. + + Notes: + - This filter can only be applied if the 'exists_for_model' filter is also applied, as the model_id is only meaningful in the context of a particular model type. + + Reference: https://github.com/inventree/InvenTree/issues/11381 + """ + exists_for_model = self.request.query_params.get('exists_for_model', None) + + if not exists_for_model: + raise ValidationError({ + 'exists_for_model': 'Invalid model type provided - unable to determine content type' + }) + + content_type = common.filters.determine_content_type(exists_for_model) + + if not content_type: + raise ValidationError({ + 'exists_for_model': 'Invalid model type provided - unable to determine content type' + }) + + model_class = content_type.model_class() + + # Try to find the model instance + try: + instance = model_class.objects.get(pk=value) + except (model_class.DoesNotExist, ValueError): + # If the model instance does not exist, then we can return an empty queryset + raise ValidationError({ + 'exists_for_model_id': 'Invalid model id provided - no such instance for the given model type' + }) + + # If the provided model is a "tree" structure, then we should also include any child objects in the filter + if isinstance(instance, InvenTree.models.InvenTreeTree): + id_values = list( + instance.get_descendants(include_self=True).values_list('pk', flat=True) + ) + else: + id_values = [instance.pk] + + # Now, filter against model type and model id + queryset = queryset.prefetch_related('parameters') + + filters = {'model_type': content_type, 'model_id__in': id_values} + + # Annotate the queryset to determine which ParameterTemplates have at least one Parameter defined + queryset = queryset.annotate( + parameter_count=SubqueryCount('parameters', filter=Q(**filters)) + ) + + return queryset.filter(parameter_count__gt=0) + + exists_for_related_model = rest_filters.CharFilter( + method='filter_exists_for_related_model', label='Exists For Related Model' + ) + + def filter_exists_for_related_model(self, queryset, name, value): + """Filter applied to map parameter templates to a particular model relation against the target model. + + For instance, specify 'category' to filter part parameters which exist for any part in that category. + + Note: + - This filter has no effect on its own + - It requires the 'exists_for_model' filter to be applied (to specify the base model) + - It requires the 'exists_for_related_model_id' filter to be applied also (to specify the related model id) + """ + return queryset + + exists_for_related_model_id = rest_filters.NumberFilter( + method='filter_exists_for_related_model_id', label='Exists For Model ID' + ) + + def filter_exists_for_related_model_id(self, queryset, name, value): + """Filter queryset to include only ParameterTemplates which have at least one Parameter for the given related model type and model id. + + Notes: + - This filter can only be applied if the 'exists_for_model' filter is also applied, as the model_id is only meaningful in the context of a base model + - This filter can only be applied if the 'exists_for_related_model' filter is also applied, as the related model id is only meaningful in the context of a particular model relation + + Example: To filter part parameters which have at least one parameter defined for any part in category 5, you could apply the following filters: + - exists_for_model=part + - exists_for_related_model=category + - exists_for_related_model_id=5 + """ + model = self.request.query_params.get('exists_for_model', None) + related_model = self.request.query_params.get('exists_for_related_model', None) + + if not model or not related_model: + raise ValidationError({ + 'exists_for_model': 'Invalid model type provided - unable to determine content type' + }) + + # Determine content type for the base model, to ensure they are valid + model_type = common.filters.determine_content_type(model) + + if not model_type: + return queryset.none() + + # Determine the model class for the 'related' model + try: + related_model_field = model_type.model_class()._meta.get_field( + related_model + ) + except FieldDoesNotExist: + raise ValidationError({ + 'exists_for_related_model': 'Invalid related model - no such field on the base model' + }) + if related_model_field := model_type.model_class()._meta.get_field( + related_model + ): + related_model_class = related_model_field.related_model + else: + # Return an empty queryset if the provided related model is invalid + return queryset.none() + + # Find all instances of the related model which match the provided related model id + try: + related_instance = related_model_class.objects.get(pk=value) + except (related_model_class.DoesNotExist, ValueError): + return queryset.none() + + # Account for potential tree structure in the related model + if isinstance(related_instance, InvenTree.models.InvenTreeTree): + related_instances = list( + related_instance.get_descendants(include_self=True).values_list( + 'pk', flat=True + ) + ) + else: + related_instances = [related_instance.pk] + + # Next, find all instances of the base model which are related to the related model instances + model_instances = model_type.model_class().objects.filter(**{ + f'{related_model}__in': related_instances + }) + model_instance_ids = list(model_instances.values_list('pk', flat=True)) + + # Now, filter against model type and model id + queryset = queryset.prefetch_related('parameters') + + filters = {'model_type': model_type, 'model_id__in': model_instance_ids} + + # Annotate the queryset to determine which ParameterTemplates have at least one Parameter defined + queryset = queryset.annotate( + parameter_count=SubqueryCount('parameters', filter=Q(**filters)) + ) + + return queryset.filter(parameter_count__gt=0) + class ParameterTemplateMixin: """Mixin class for ParameterTemplate views.""" @@ -909,7 +1091,7 @@ class ParameterList( """List API endpoint for Parameter objects.""" filterset_class = ParameterFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER ordering_fields = ['name', 'data', 'units', 'template', 'updated', 'updated_by'] @@ -996,6 +1178,22 @@ class DataOutputEndpointMixin: serializer_class = common.serializers.DataOutputSerializer permission_classes = [IsAuthenticatedOrReadScope] + def get_queryset(self): + """Return the set of DataOutput objects which the user has permission to view.""" + queryset = super().get_queryset() + + try: + user = self.request.user + except AttributeError: + return common.models.DataOutput.objects.none() + + # Allow staff users access to all DataOutput objects + if user.is_staff: + return queryset + + # All other users are limited to viewing their own DataOutput objects + return queryset.filter(user=user) + class DataOutputList(DataOutputEndpointMixin, BulkDeleteMixin, ListAPI): """List view for DataOutput objects.""" @@ -1065,6 +1263,92 @@ class TestEmail(CreateAPI): ) # pragma: no cover +class HealthCheckStatusSerializer(serializers.Serializer): + """Status of the overall system health.""" + + status = serializers.ChoiceField( + help_text='Health status of the InvenTree server', + choices=['ok', 'loading'], + read_only=True, + default='ok', + ) + + +class HealthCheckView(APIView): + """Simple JSON endpoint for InvenTree health check. + + Intended to be used by external services to confirm that the InvenTree server is running. + """ + + permission_classes = [AllowAnyOrReadScope] + + @extend_schema( + responses={ + 200: OpenApiResponse( + response=HealthCheckStatusSerializer, + description='InvenTree server health status', + ) + } + ) + def get(self, request, *args, **kwargs): + """Simple health check endpoint for monitoring purposes. + + Use the root API endpoint for more detailed information (using an authenticated request). + """ + status = ( + InvenTree.ready.isPluginRegistryLoaded() + if settings.PLUGINS_ENABLED + else True + ) + return JsonResponse( + {'status': 'ok' if status else 'loading'}, status=200 if status else 503 + ) + + +class ObservabilityEndSerializer(serializers.Serializer): + """Serializer for observability end endpoint.""" + + traceid = serializers.CharField( + help_text='Trace ID to end', max_length=128, required=True + ) + service = serializers.CharField( + help_text='Service name', max_length=128, required=True + ) + + +class ObservabilityEnd(CreateAPI): + """Endpoint for observability tools.""" + + permission_classes = [AllowAnyOrReadScope] + serializer_class = ObservabilityEndSerializer + + def create(self, request, *args, **kwargs): + """End a trace in the observability system.""" + if not settings.TRACING_ENABLED: + return Response({'status': 'ok'}) + + data = self.get_serializer(data=request.data) + data.is_valid(raise_exception=True) + + traceid = data.validated_data['traceid'] + # service = data.validated_data['service'] # This will become interesting with frontend observability + + # End the foreign trend via the low level otel API + tracer = trace.get_tracer(__name__) + span_context = trace.SpanContext( + trace_id=int(traceid, 16), + span_id=0, + is_remote=True, + trace_flags=trace.TraceFlags(0x01), + trace_state=trace.TraceState(), + ) + with tracer.start_span('Ending session') as span: + span.add_event('Ending external trace') + span.add_link(span_context) + + return Response({'status': 'ok'}) + + selection_urls = [ path( '/', @@ -1144,6 +1428,9 @@ common_api_urls = [ name='api-scheduled-task-list', ), path('failed/', FailedTaskList.as_view(), name='api-failed-task-list'), + path( + '/', BackgroundTaskDetail.as_view(), name='api-task-detail' + ), path('', BackgroundTaskOverview.as_view(), name='api-task-overview'), ]), ), @@ -1154,11 +1441,7 @@ common_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=common.models.Attachment), - name='api-attachment-metadata', - ), + meta_path(common.models.Attachment), path('', AttachmentDetail.as_view(), name='api-attachment-detail'), ]), ), @@ -1175,13 +1458,7 @@ common_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view( - model=common.models.ParameterTemplate - ), - name='api-parameter-template-metadata', - ), + meta_path(common.models.ParameterTemplate), path( '', ParameterTemplateDetail.as_view(), @@ -1199,11 +1476,7 @@ common_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=common.models.Parameter), - name='api-parameter-metadata', - ), + meta_path(common.models.Parameter), path('', ParameterDetail.as_view(), name='api-parameter-detail'), ]), ), @@ -1217,6 +1490,22 @@ common_api_urls = [ path('', ErrorMessageList.as_view(), name='api-error-list'), ]), ), + # Metadata + path( + 'metadata/', + include([ + path( + '///', + GenericMetadataView.as_view(), + name='api-generic-metadata', + ), + path( + '//', + SimpleGenericMetadataView.as_view(), + name='api-generic-metadata', + ), + ]), + ), # Project codes path( 'project-code/', @@ -1224,14 +1513,7 @@ common_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view( - model=common.models.ProjectCode, - permission_classes=[IsStaffOrReadOnlyScope], - ), - name='api-project-code-metadata', - ), + meta_path(common.models.ProjectCode), path( '', ProjectCodeDetail.as_view(), name='api-project-code-detail' ), @@ -1345,6 +1627,26 @@ common_api_urls = [ path('', DataOutputList.as_view(), name='api-data-output-list'), ]), ), + # System APIs (related to basic system functions) + path( + 'system/', + include([ + # Health check + path('health/', HealthCheckView.as_view(), name='api-system-health') + ]), + ), + # Internal System APIs - DO NOT USE + path( + 'system-internal/', + include([ + # Observability + path( + 'observability/end', + ObservabilityEnd.as_view(), + name='api-system-observability', + ) + ]), + ), ] admin_api_urls = [ diff --git a/src/backend/InvenTree/common/currency.py b/src/backend/InvenTree/common/currency.py index 6146c321c7..adb3b55cff 100644 --- a/src/backend/InvenTree/common/currency.py +++ b/src/backend/InvenTree/common/currency.py @@ -19,6 +19,11 @@ logger = structlog.get_logger('inventree') def currency_code_default(create: bool = True): """Returns the default currency code (or USD if not specified).""" from common.settings import get_global_setting + from InvenTree.ready import isRunningBackup, isRunningMigrations + + if isRunningMigrations() or isRunningBackup(): + # Prevent database writes during migration or backup operations + create = False code = '' @@ -225,6 +230,6 @@ def get_price( quantity = decimal.Decimal(f'{quantity}') if pb_found: - cost = pb_cost * quantity + cost = decimal.Decimal(pb_cost) * quantity return InvenTree.helpers.normalize(cost + instance.base_cost) return None diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index 6e1dbd2e5f..42bd00f119 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -85,8 +85,8 @@ class RenderMeta(enums.ChoicesType): return [] -class RenderChoices(models.TextChoices, metaclass=RenderMeta): # type: ignore - """Class for creating enumerated string choices for schema rendering.""" +class RenderChoices(models.TextChoices, metaclass=RenderMeta): + """Class for creating enumerated string choices for schema rendering.""" # ty:ignore[conflicting-metaclass] class MetaMixin(models.Model): @@ -148,6 +148,8 @@ class UpdatedUserMixin(models.Model): class ProjectCode(InvenTree.models.InvenTreeMetadataModel): """A ProjectCode is a unique identifier for a project.""" + IMPORT_ID_FIELDS = ['code'] + class Meta: """Class options for the ProjectCode model.""" @@ -970,6 +972,22 @@ class BaseInvenTreeSetting(models.Model): return setting.get('model', None) + def confirm(self) -> bool: + """Return if this setting requires confirmation on change.""" + setting = self.get_setting_definition( + self.key, **self.get_filters_for_instance() + ) + + return setting.get('confirm', False) + + def confirm_text(self) -> str: + """Return the confirmation text for this setting, if provided.""" + setting = self.get_setting_definition( + self.key, **self.get_filters_for_instance() + ) + + return setting.get('confirm_text', '') + def model_filters(self) -> Optional[dict]: """Return the model filters associated with this setting.""" setting = self.get_setting_definition( @@ -1066,7 +1084,7 @@ class BaseInvenTreeSetting(models.Model): return self.__class__.validator_is_bool(validator) - def as_bool(self): + def as_bool(self) -> bool: """Return the value of this setting converted to a boolean value. Warning: Only use on values where is_bool evaluates to true! @@ -1200,7 +1218,9 @@ class InvenTreeSetting(BaseInvenTreeSetting): even if that key does not exist. """ - SETTINGS: dict[str, InvenTreeSettingsKeyType] + from common.setting.system import SYSTEM_SETTINGS + + SETTINGS: dict[str, InvenTreeSettingsKeyType] = SYSTEM_SETTINGS CHECK_SETTING_KEY = True @@ -1266,9 +1286,6 @@ class InvenTreeSetting(BaseInvenTreeSetting): The keys must be upper-case """ - from common.setting.system import SYSTEM_SETTINGS - - SETTINGS = SYSTEM_SETTINGS typ = 'inventree' @@ -1294,6 +1311,8 @@ class InvenTreeUserSetting(BaseInvenTreeSetting): import common.setting.user + SETTINGS = common.setting.user.USER_SETTINGS + CHECK_SETTING_KEY = True class Meta: @@ -1305,8 +1324,6 @@ class InvenTreeUserSetting(BaseInvenTreeSetting): models.UniqueConstraint(fields=['key', 'user'], name='unique key and user') ] - SETTINGS = common.setting.user.USER_SETTINGS - typ = 'user' extra_unique_fields = ['user'] @@ -2381,6 +2398,8 @@ class ParameterTemplate( enabled: Is this template enabled? """ + IMPORT_ID_FIELDS = ['name'] + class Meta: """Metaclass options for the ParameterTemplate model.""" diff --git a/src/backend/InvenTree/common/notifications.py b/src/backend/InvenTree/common/notifications.py index bae8fe913a..880b5ba64e 100644 --- a/src/backend/InvenTree/common/notifications.py +++ b/src/backend/InvenTree/common/notifications.py @@ -177,9 +177,9 @@ def trigger_notification(obj: Model, category: str = '', obj_ref: str = 'pk', ** # Filter out any users who are inactive, or do not have the required model permissions valid_users = list( filter( - lambda u: u - and u.is_active - and (not obj or check_user_permission(u, obj, 'view')), + lambda u: ( + u and u.is_active and (not obj or check_user_permission(u, obj, 'view')) + ), list(target_users), ) ) diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index d2fee07132..574c45f265 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -42,7 +42,7 @@ class SettingsValueField(serializers.Field): """Return the object instance, not the attribute value.""" return instance - def to_representation(self, instance: common_models.InvenTreeSetting) -> str: + def to_representation(self, instance: common_models.InvenTreeSetting): """Return the value of the setting. Protected settings are returned as '***' @@ -88,6 +88,18 @@ class SettingsSerializer(InvenTreeModelSerializer): choices = serializers.SerializerMethodField() + def get_choices(self, obj) -> list: + """Returns the choices available for a given item.""" + results = [] + + choices = obj.choices() + + if choices: + for choice in choices: + results.append({'value': choice[0], 'display_name': choice[1]}) + + return results + model_name = serializers.CharField(read_only=True, allow_null=True) model_filters = serializers.DictField(read_only=True) @@ -108,17 +120,26 @@ class SettingsSerializer(InvenTreeModelSerializer): typ = serializers.CharField(read_only=True) - def get_choices(self, obj) -> list: - """Returns the choices available for a given item.""" - results = [] + confirm = serializers.BooleanField( + read_only=True, + help_text=_('Indicates if changing this setting requires confirmation'), + ) - choices = obj.choices() + confirm_text = serializers.CharField(read_only=True) - if choices: - for choice in choices: - results.append({'value': choice[0], 'display_name': choice[1]}) - - return results + def is_valid(self, *, raise_exception=False): + """Validate the setting, including confirmation if required.""" + ret = super().is_valid(raise_exception=raise_exception) + # Check if confirmation was provided if required + if self.instance.confirm(): + req_data = self.context['request'].data + if not 'manual_confirm' in req_data or not req_data['manual_confirm']: + raise serializers.ValidationError({ + 'manual_confirm': _( + 'This setting requires confirmation before changing. Please confirm the change.' + ) + }) + return ret class GlobalSettingsSerializer(SettingsSerializer): @@ -141,6 +162,8 @@ class GlobalSettingsSerializer(SettingsSerializer): 'api_url', 'typ', 'read_only', + 'confirm', + 'confirm_text', ] read_only = serializers.SerializerMethodField( @@ -184,6 +207,8 @@ class UserSettingsSerializer(SettingsSerializer): 'model_name', 'api_url', 'typ', + 'confirm', + 'confirm_text', ] user = serializers.PrimaryKeyRelatedField(read_only=True) @@ -232,6 +257,8 @@ class GenericReferencedSettingSerializer(SettingsSerializer): 'typ', 'units', 'required', + 'confirm', + 'confirm_text', ] # set Meta class @@ -354,7 +381,7 @@ class ConfigSerializer(serializers.Serializer): """Return the configuration data as a dictionary.""" if not isinstance(instance, str): instance = list(instance.keys())[0] - return {'key': instance, **self.instance[instance]} + return {'key': instance, **self.instance.get(instance)} class NotesImageSerializer(InvenTreeModelSerializer): @@ -430,7 +457,7 @@ class FlagSerializer(serializers.Serializer): data = {'key': instance, 'state': flag_state(instance, request=request)} if request and request.user.is_superuser: - data['conditions'] = self.instance[instance] + data['conditions'] = self.instance.get(instance) return data @@ -495,6 +522,78 @@ class ErrorMessageSerializer(InvenTreeModelSerializer): read_only_fields = ['when', 'info', 'data', 'path', 'pk'] +class TaskDetailSerializer(serializers.Serializer): + """Serializer for a background task detail.""" + + task_id = serializers.CharField(read_only=True) + exists = serializers.BooleanField(read_only=True) + pending = serializers.BooleanField(read_only=True) + complete = serializers.BooleanField(read_only=True) + success = serializers.BooleanField(read_only=True) + http_status = serializers.IntegerField(read_only=True) + + @classmethod + def from_task(cls, task_id: str | bool | None) -> 'TaskDetailSerializer': + """Create a TaskDetailSerializer instance from a django_q Task. + + Arguments: + task_id: The ID of the task to retrieve details for. + + Returns: + An instance of TaskDetailSerializer with the task details. + + Notes: + - If the provided task_id is None, the task has not been run, or has errored out + - If the provided task_id is a boolean, the task has been run synchronously, and the boolean value indicates success or failure + - If the provided task_id is a string, the task has been offloaded to the background worker, and the details can be from the database + + """ + from InvenTree.tasks import get_queued_task + + if task_id is None or type(task_id) is bool: + # If the task_id is a boolean, the task has been run synchronously + return cls({ + 'task_id': '', + 'exists': False, + 'pending': False, + 'complete': task_id is not None, + 'success': False if task_id is None else bool(task_id), + 'http_status': 404 if task_id is None else 200, + }) + + # A non-boolean result indicates that the task has been offloaded to the background worker + success = django_q.models.Success.objects.filter(id=task_id).first() + failure = django_q.models.Failure.objects.filter(id=task_id).first() + task = ( + success + or failure + or django_q.models.Task.objects.filter(id=task_id).first() + ) + queued = False + + exists = bool(success or failure or task) + + if not exists: + # If the task has not been started yet, it may be present in the queue + queued = bool(get_queued_task(task_id)) + + complete = bool(success) or bool(failure) + + # Determine the http_status code for the task + # - 200: Task exists and has been completed + # - 404: Task does not exist + http_status = 200 if exists or queued else 404 + + return cls({ + 'task_id': task_id, + 'exists': exists or queued, + 'pending': queued, + 'complete': complete, + 'success': bool(success), + 'http_status': http_status, + }) + + class TaskOverviewSerializer(serializers.Serializer): """Serializer for background task overview.""" @@ -808,7 +907,9 @@ class ParameterSerializer( ) updated_by_detail = enable_filter( - UserSerializer(source='updated_by', read_only=True, many=False), + UserSerializer( + source='updated_by', read_only=True, allow_null=True, many=False + ), True, prefetch_fields=['updated_by'], ) diff --git a/src/backend/InvenTree/common/setting/system.py b/src/backend/InvenTree/common/setting/system.py index 087e494400..00fb35a558 100644 --- a/src/backend/InvenTree/common/setting/system.py +++ b/src/backend/InvenTree/common/setting/system.py @@ -11,7 +11,7 @@ from django.core.exceptions import FieldDoesNotExist, ValidationError from django.core.validators import MaxValueValidator, MinValueValidator, URLValidator from django.utils.translation import gettext_lazy as _ -from jinja2 import Template +from jinja2.sandbox import SandboxedEnvironment import build.validators import common.currency @@ -52,7 +52,7 @@ def validate_part_name_format(value): p = Part(name='test part', description='some test part') try: - Template(value).render({'part': p}) + SandboxedEnvironment().from_string(value).render({'part': p}) except Exception as exc: raise ValidationError({'value': str(exc)}) @@ -106,6 +106,20 @@ def reload_plugin_registry(setting): registry.reload_plugins(full_reload=True, force_reload=True, collect=True) +def enforce_mfa(setting): + """Enforce multifactor authentication for all users.""" + from allauth.usersessions.models import UserSession + + from common.models import logger + + logger.info( + 'Enforcing multifactor authentication for all users by signing out all sessions.' + ) + for session in UserSession.objects.all(): + session.end() + logger.info('All user sessions have been ended.') + + def barcode_plugins() -> list: """Return a list of plugin choices which can be used for barcode generation.""" try: @@ -623,6 +637,14 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'default': False, 'validator': bool, }, + 'PART_BOM_ALLOW_ZERO_QUANTITY': { + 'name': _('Allow BOM Zero Quantity'), + 'description': _( + 'Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity' + ), + 'default': False, + 'validator': bool, + }, 'LABEL_ENABLE': { 'name': _('Enable label printing'), 'description': _('Enable label printing from the web interface'), @@ -1007,6 +1029,11 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'description': _('Users must use multifactor security.'), 'default': False, 'validator': bool, + 'confirm': True, + 'confirm_text': _( + 'Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately.' + ), + 'after_save': enforce_mfa, }, 'PLUGIN_ON_STARTUP': { 'name': _('Check plugins on startup'), @@ -1080,7 +1107,7 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'validator': bool, }, 'STOCKTAKE_ENABLE': { - 'name': _('Enable Stock History'), + 'name': _('Enable Stocktake'), 'description': _( 'Enable functionality for recording historical stock levels and value' ), @@ -1090,30 +1117,47 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'STOCKTAKE_EXCLUDE_EXTERNAL': { 'name': _('Exclude External Locations'), 'description': _( - 'Exclude stock items in external locations from stock history calculations' + 'Exclude stock items in external locations from stocktake calculations' ), 'validator': bool, 'default': False, }, 'STOCKTAKE_AUTO_DAYS': { 'name': _('Automatic Stocktake Period'), - 'description': _('Number of days between automatic stock history recording'), + 'description': _('Number of days between automatic stocktake recording'), 'validator': [int, MinValueValidator(1)], 'default': 7, 'units': _('days'), }, 'STOCKTAKE_DELETE_OLD_ENTRIES': { - 'name': _('Delete Old Stock History Entries'), + 'name': _('Delete Old Stocktake Entries'), 'description': _( - 'Delete stock history entries older than the specified number of days' + 'Delete stocktake entries older than the specified number of days' ), 'default': False, 'validator': bool, }, 'STOCKTAKE_DELETE_DAYS': { - 'name': _('Stock History Deletion Interval'), + 'name': _('Stocktake Deletion Interval'), 'description': _( - 'Stock history entries will be deleted after specified number of days' + 'Stocktake entries will be deleted after specified number of days' + ), + 'default': 365, + 'units': _('days'), + 'validator': [int, MinValueValidator(30)], + }, + 'STOCK_TRACKING_DELETE_OLD_ENTRIES': { + 'name': _('Delete Old Stock Tracking Entries'), + 'description': _( + 'Delete stock tracking entries older than the specified number of days' + ), + 'default': False, + 'validator': bool, + }, + 'STOCK_TRACKING_DELETE_DAYS': { + 'name': _('Stock Tracking Deletion Interval'), + 'description': _( + 'Stock tracking entries will be deleted after specified number of days' ), 'default': 365, 'units': _('days'), diff --git a/src/backend/InvenTree/common/setting/type.py b/src/backend/InvenTree/common/setting/type.py index 5ec029f998..0e788c017f 100644 --- a/src/backend/InvenTree/common/setting/type.py +++ b/src/backend/InvenTree/common/setting/type.py @@ -26,12 +26,15 @@ class SettingsKeyType(TypedDict, total=False): validator: Validation function/list of functions for the setting (optional, default: None, e.g: bool, int, str, MinValueValidator, ...) default: Default value or function that returns default value (optional) choices: Function that returns or value of list[tuple[str: key, str: display value]] (optional) + model_filters: Filters to apply when querying the associated model (optional) hidden: Hide this setting from settings page (optional) before_save: Function that gets called after save with *args, **kwargs (optional) after_save: Function that gets called after save with *args, **kwargs (optional) protected: Protected values are not returned to the client, instead "***" is returned (optional, default: False) required: Is this setting required to work, can be used in combination with .check_all_settings(...) (optional, default: False) model: Auto create a dropdown menu to select an associated model instance (e.g. 'company.company', 'auth.user' and 'auth.group' are possible too, optional) + confirm: Require an explicit confirmation before changing the setting (optional, default: False) + confirm_text: Text to display in the confirmation dialog (optional) """ name: str @@ -40,12 +43,15 @@ class SettingsKeyType(TypedDict, total=False): validator: Callable | list[Callable] | tuple[Callable] default: Callable | Any choices: list[tuple[str, str]] | Callable[[], list[tuple[str, str]]] + model_filters: dict[str, Any] hidden: bool before_save: Callable[..., None] after_save: Callable[..., None] protected: bool required: bool model: str + confirm: bool + confirm_text: str class InvenTreeSettingsKeyType(SettingsKeyType): diff --git a/src/backend/InvenTree/common/settings.py b/src/backend/InvenTree/common/settings.py index c721d8c346..79cda8ca50 100644 --- a/src/backend/InvenTree/common/settings.py +++ b/src/backend/InvenTree/common/settings.py @@ -44,6 +44,11 @@ def get_global_setting(key, backup_value=None, environment_key=None, **kwargs): def set_global_setting(key, value, change_user=None, create=True, **kwargs): """Set the value of a global setting using the provided key.""" from common.models import InvenTreeSetting + from InvenTree.ready import canAppAccessDatabase + + if not canAppAccessDatabase(allow_shell=True, allow_test=True): + logger.info(f'Cannot set global setting "{key}" - database is not accessible') + return False kwargs['change_user'] = change_user kwargs['create'] = create diff --git a/src/backend/InvenTree/common/test_api.py b/src/backend/InvenTree/common/test_api.py index 4e77eacf85..1feffb0b6f 100644 --- a/src/backend/InvenTree/common/test_api.py +++ b/src/backend/InvenTree/common/test_api.py @@ -6,6 +6,44 @@ import common.models from InvenTree.unit_test import InvenTreeAPITestCase +class DataOutputAPITests(InvenTreeAPITestCase): + """API tests for the DataOutput endpoint.""" + + roles = 'all' + + def setUp(self): + """Set up some test data for DataOutput API testing.""" + from report.models import DataOutput + + super().setUp() + + for ii in range(5): + DataOutput.objects.create( + output_type='test_output', + user=self.user if ii % 2 == 0 else None, + complete=ii % 2 == 1, + ) + + def test_data_output_list(self): + """Test the DataOutput API list endpoint.""" + url = reverse('api-data-output-list') + + # Non-staff user should only see outputs which are either enabled for all users, or created by themselves + self.user.is_staff = False + self.user.save() + response = self.get(url) + self.assertEqual(len(response.data), 3) + + for output in response.data: + self.assertEqual(output['user'], self.user.pk) + + # Set staff access = True, so we should see all outputs + self.user.is_staff = True + self.user.save() + response = self.get(url) + self.assertEqual(len(response.data), 5) + + class ParameterAPITests(InvenTreeAPITestCase): """Tests for the Parameter API.""" @@ -237,6 +275,217 @@ class ParameterAPITests(InvenTreeAPITestCase): f'Incorrect number of templates for model "{model_name}"', ) + def test_template_extended_filters(self): + """Unit testing for more complex filters on the ParameterTemplate endpoint. + + Ref: https://github.com/inventree/InvenTree/pull/11383 + + In these tests we will filter by complex model relations. + """ + from part.models import Part, PartCategory + + # Create some part categories + cat_mech = PartCategory.objects.create( + name='Mechanical', description='Mechanical components' + ) + cat_elec = PartCategory.objects.create( + name='Electronics', description='Electronic components' + ) + cat_pass = PartCategory.objects.create( + name='Passive', description='Passive electronic components', parent=cat_elec + ) + cat_res = PartCategory.objects.create( + name='Resistors', description='Resistor components', parent=cat_pass + ) + cat_cap = PartCategory.objects.create( + name='Capacitors', description='Capacitor components', parent=cat_pass + ) + + # Create some parts + capacitors = [ + Part.objects.create( + name=f'Capacitor {ii}', description='A capacitor', category=cat_cap + ) + for ii in range(5) + ] + + resistors = [ + Part.objects.create( + name=f'Resistor {ii}', description='A resistor', category=cat_res + ) + for ii in range(5) + ] + + # Create some ParameterTemplates which relate to the category of the part + resistance = common.models.ParameterTemplate.objects.create( + name='Resistance', description='The resistance of a part', units='Ohms' + ) + + capacitance = common.models.ParameterTemplate.objects.create( + name='Capacitance', description='The capacitance of a part', units='Farads' + ) + + tolerance = common.models.ParameterTemplate.objects.create( + name='Tolerance', description='The tolerance of a part', units='%' + ) + + for idx, resistor in enumerate(resistors): + common.models.Parameter.objects.create( + template=resistance, + model_type=resistor.get_content_type(), + model_id=resistor.pk, + data=f'{10 * (idx + 1)}k', + ) + + common.models.Parameter.objects.create( + template=tolerance, + model_type=resistor.get_content_type(), + model_id=resistor.pk, + data=f'{idx + 1}%', + ) + + for idx, capacitor in enumerate(capacitors): + common.models.Parameter.objects.create( + template=capacitance, + model_type=capacitor.get_content_type(), + model_id=capacitor.pk, + data=f'{10 * (idx + 1)}uF', + ) + + common.models.Parameter.objects.create( + template=tolerance, + model_type=capacitor.get_content_type(), + model_id=capacitor.pk, + data=f'{5 * (idx + 1)}%', + ) + + # Ensure that we have the expected number of templates and parameters created for testing + self.assertEqual(common.models.ParameterTemplate.objects.count(), 3) + self.assertEqual(common.models.Parameter.objects.count(), 20) + + # Now, we have some data - let's apply some filtering + url = reverse('api-parameter-template-list') + + # Return *all* results, without filters + response = self.get(url) + self.assertEqual(len(response.data), 3) + + # Filter by 'exists_for_model' + for model_name, count in { + 'part.part': 3, + 'part': 3, + 'company': 0, + 'build': 0, + }.items(): + response = self.get(url, data={'exists_for_model': model_name}) + n = len(response.data) + self.assertEqual( + n, + count, + f'Incorrect number of templates ({n}) for model "{model_name}"', + ) + + # Filter by 'exists_for_model' and 'exists_for_model_id' + res = resistors[0] + response = self.get( + url, data={'exists_for_model': 'part.part', 'exists_for_model_id': res.pk} + ) + + self.assertEqual(len(response.data), 2) + pk_list = [t['pk'] for t in response.data] + self.assertIn(resistance.pk, pk_list) + self.assertIn(tolerance.pk, pk_list) + + cap = capacitors[0] + response = self.get( + url, data={'exists_for_model': 'part.part', 'exists_for_model_id': cap.pk} + ) + self.assertEqual(len(response.data), 2) + pk_list = [t['pk'] for t in response.data] + self.assertIn(capacitance.pk, pk_list) + self.assertIn(tolerance.pk, pk_list) + + # Filter by 'exists_for_related_model' (test the "capacitor" relationship) + + # Check the 'capacitor' category + response = self.get( + url, + data={ + 'exists_for_model': 'part.part', + 'exists_for_related_model': 'category', + 'exists_for_related_model_id': cat_cap.pk, + }, + ) + + self.assertEqual(len(response.data), 2) + pk_list = [t['pk'] for t in response.data] + self.assertIn(capacitance.pk, pk_list) + self.assertIn(tolerance.pk, pk_list) + + # Check the 'electronics' category - this should return all parameters + response = self.get( + url, + data={ + 'exists_for_model': 'part.part', + 'exists_for_related_model': 'category', + 'exists_for_related_model_id': cat_elec.pk, + }, + ) + self.assertEqual(len(response.data), 3) + pk_list = [t['pk'] for t in response.data] + self.assertIn(resistance.pk, pk_list) + self.assertIn(capacitance.pk, pk_list) + self.assertIn(tolerance.pk, pk_list) + + # Check the 'mechanical' category - this should return no parameters + response = self.get( + url, + data={ + 'exists_for_model': 'part.part', + 'exists_for_related_model': 'category', + 'exists_for_related_model_id': cat_mech.pk, + }, + ) + + self.assertEqual(len(response.data), 0) + + def test_invalid_filters(self): + """Test error messages for invalid filter combinations.""" + url = reverse('api-parameter-template-list') + + # Invalid 'exists_for_model' value + response = self.get( + url, {'exists_for_model': 'asdf---invalid---model'}, expected_code=400 + ) + + self.assertIn( + 'Invalid model type provided', str(response.data['exists_for_model']) + ) + + # Invalid 'exists_for_model_id' value + for model_id in ['not_an_integer', -1, 9999]: + response = self.get( + url, + {'exists_for_model': 'part.part', 'exists_for_model_id': model_id}, + expected_code=400, + ) + + # Invalid 'exists_for_related_model' value + response = self.get( + url, + { + 'exists_for_model': 'part', + 'exists_for_related_model': 'invalid_field', + 'exists_for_related_model_id': 1, + }, + expected_code=400, + ) + + self.assertIn( + 'no such field on the base model', + str(response.data['exists_for_related_model']), + ) + def test_parameter_api(self): """Test Parameter API functionality.""" # Create a simple part to test with diff --git a/src/backend/InvenTree/common/tests.py b/src/backend/InvenTree/common/tests.py index 4cc16136bd..e6c850e0c3 100644 --- a/src/backend/InvenTree/common/tests.py +++ b/src/backend/InvenTree/common/tests.py @@ -408,6 +408,8 @@ class SettingsTest(InvenTreeTestCase): 'requires_restart', 'after_save', 'before_save', + 'confirm', + 'confirm_text', ] for k in setting: @@ -641,6 +643,18 @@ class GlobalSettingsApiTest(InvenTreeAPITestCase): setting.refresh_from_db() self.assertEqual(setting.value, val) + def test_mfa_change(self): + """Test that changes in LOGIN_ENFORCE_MFA are handled correctly.""" + # Setup admin users + self.user.usersession_set.create(ip='192.168.1.1') + self.assertEqual(self.user.usersession_set.count(), 1) + + # Enable enforced MFA + set_global_setting('LOGIN_ENFORCE_MFA', True) + + # There should be no user sessions now + self.assertEqual(self.user.usersession_set.count(), 0) + def test_api_detail(self): """Test that we can access the detail view for a setting based on the .""" # These keys are invalid, and should return 404 @@ -1093,6 +1107,41 @@ class TaskListApiTests(InvenTreeAPITestCase): for task in response.data: self.assertEqual(task['name'], 'time.sleep') + def test_task_detail(self): + """Test the BackgroundTaskDetail API endpoint.""" + from InvenTree.tasks import offload_task + + # Force run a task + result = offload_task('fake_module.test_task', force_sync=True) + self.assertFalse(result) + self.assertEqual(type(result), bool) + + # Schedule a dummy task - and ensure it offloads to the worker + task_id = offload_task('fake_module.test_task', force_async=True) + self.assertIsNotNone(task_id) + self.assertEqual(type(task_id), str) + + url = reverse('api-task-detail', kwargs={'task_id': task_id}) + + data = self.get(url, expected_code=200).data + + self.assertEqual(data['task_id'], task_id) + self.assertTrue(data['exists']) + self.assertTrue(data['pending']) + self.assertFalse(data['complete']) + self.assertFalse(data['success']) + + # Perform a lookup for a non-existent task + url = reverse('api-task-detail', kwargs={'task_id': 'doesnotexist'}) + + data = self.get(url, expected_code=404).data + + self.assertEqual(data['task_id'], 'doesnotexist') + self.assertFalse(data['exists']) + self.assertFalse(data['pending']) + self.assertFalse(data['complete']) + self.assertFalse(data['success']) + class WebhookMessageTests(TestCase): """Tests for webhooks.""" @@ -1303,12 +1352,18 @@ class NotificationTest(InvenTreeAPITestCase): # Now, let's bulk delete all 'unread' notifications via the API, # but only associated with the logged in user - response = self.delete(url, {'filters': {'read': False}}, expected_code=200) + read_notifications = NotificationMessage.objects.filter(read=True) + response = self.delete( + url, {'items': [ntf.pk for ntf in read_notifications]}, expected_code=200 + ) - # Only 7 notifications should have been deleted, + # Only 3 notifications should have been deleted, # as the notifications associated with other users must remain untouched - self.assertEqual(NotificationMessage.objects.count(), 13) - self.assertEqual(NotificationMessage.objects.filter(user=self.user).count(), 3) + self.assertEqual(NotificationMessage.objects.count(), 17) + self.assertEqual(NotificationMessage.objects.filter(user=self.user).count(), 7) + self.assertEqual( + NotificationMessage.objects.filter(user=self.user, read=True).count(), 0 + ) def test_simple(self): """Test that a simple notification can be created.""" @@ -1471,6 +1526,35 @@ class CommonTest(InvenTreeAPITestCase): self.user.is_superuser = False self.user.save() + def test_health_api(self): + """Test health check URL.""" + from plugin import registry + + # Fully started system - ok + response_data = self.get(reverse('api-system-health'), expected_code=200).json() + self.assertIn('status', response_data) + self.assertEqual(response_data['status'], 'ok') + + # Simulate plugin reloading - Not ready + try: + registry.plugins_loaded = False + response_data = self.get( + reverse('api-system-health'), expected_code=503 + ).json() + self.assertIn('status', response_data) + self.assertEqual(response_data['status'], 'loading') + finally: + registry.plugins_loaded = True + + # No plugins enabled - still ok + with self.settings(PLUGINS_ENABLED=False): + self.assertEqual( + self.get(reverse('api-system-health'), expected_code=200).json()[ + 'status' + ], + 'ok', + ) + class CurrencyAPITests(InvenTreeAPITestCase): """Unit tests for the currency exchange API endpoints.""" diff --git a/src/backend/InvenTree/company/api.py b/src/backend/InvenTree/company/api.py index 8ec8a4ae14..9ce3eaf27c 100644 --- a/src/backend/InvenTree/company/api.py +++ b/src/backend/InvenTree/company/api.py @@ -9,9 +9,9 @@ from django_filters.rest_framework.filterset import FilterSet import part.models from data_exporter.mixins import DataExportViewMixin -from InvenTree.api import ListCreateDestroyAPIView, MetadataView, ParameterListMixin +from InvenTree.api import ListCreateDestroyAPIView, ParameterListMixin, meta_path from InvenTree.fields import InvenTreeOutputOption, OutputConfiguration -from InvenTree.filters import SEARCH_ORDER_FILTER, SEARCH_ORDER_FILTER_ALIAS +from InvenTree.filters import SEARCH_ORDER_FILTER from InvenTree.mixins import ( ListCreateAPI, OutputOptionsMixin, @@ -200,6 +200,14 @@ class ManufacturerPartList( filter_backends = SEARCH_ORDER_FILTER output_options = ManufacturerOutputOptions + ordering_fields = ['part', 'IPN', 'MPN', 'manufacturer'] + + ordering_field_aliases = { + 'part': 'part__name', + 'IPN': 'part__IPN', + 'manufacturer': 'manufacturer__name', + } + search_fields = [ 'manufacturer__name', 'description', @@ -241,6 +249,8 @@ class SupplierPartFilter(FilterSet): active = rest_filters.BooleanFilter(label=_('Supplier Part is Active')) + primary = rest_filters.BooleanFilter(label=_('Primary Supplier Part')) + # Filter by 'active' status of linked part part_active = rest_filters.BooleanFilter( field_name='part__active', label=_('Internal Part is Active') @@ -350,16 +360,18 @@ class SupplierPartList( """ filterset_class = SupplierPartFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER output_options = SupplierPartOutputOptions ordering_fields = [ - 'SKU', 'part', 'supplier', 'manufacturer', 'active', + 'primary', + 'IPN', 'MPN', + 'SKU', 'packaging', 'pack_quantity', 'in_stock', @@ -370,8 +382,9 @@ class SupplierPartList( 'part': 'part__name', 'supplier': 'supplier__name', 'manufacturer': 'manufacturer_part__manufacturer__name', - 'MPN': 'manufacturer_part__MPN', 'pack_quantity': ['pack_quantity_native', 'pack_quantity'], + 'IPN': 'part__IPN', + 'MPN': 'manufacturer_part__MPN', } search_fields = [ @@ -447,7 +460,11 @@ class SupplierPriceBreakOutputOptions(OutputConfiguration): class SupplierPriceBreakList( - SupplierPriceBreakMixin, SerializerContextMixin, OutputOptionsMixin, ListCreateAPI + DataExportViewMixin, + SupplierPriceBreakMixin, + SerializerContextMixin, + OutputOptionsMixin, + ListCreateAPI, ): """API endpoint for list view of SupplierPriceBreak object. @@ -458,7 +475,7 @@ class SupplierPriceBreakList( output_options = SupplierPriceBreakOutputOptions filterset_class = SupplierPriceBreakFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER ordering_fields = ['quantity', 'supplier', 'SKU', 'price'] search_fields = ['part__SKU', 'part__supplier__name'] @@ -476,11 +493,7 @@ manufacturer_part_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=ManufacturerPart), - name='api-manufacturer-part-metadata', - ), + meta_path(ManufacturerPart), path( '', ManufacturerPartDetail.as_view(), @@ -497,11 +510,7 @@ supplier_part_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=SupplierPart), - name='api-supplier-part-metadata', - ), + meta_path(SupplierPart), path('', SupplierPartDetail.as_view(), name='api-supplier-part-detail'), ]), ), @@ -532,11 +541,7 @@ company_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=Company), - name='api-company-metadata', - ), + meta_path(Company), path('', CompanyDetail.as_view(), name='api-company-detail'), ]), ), @@ -546,11 +551,7 @@ company_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=Contact), - name='api-contact-metadata', - ), + meta_path(Contact), path('', ContactDetail.as_view(), name='api-contact-detail'), ]), ), diff --git a/src/backend/InvenTree/company/migrations/0078_supplierpart_primary.py b/src/backend/InvenTree/company/migrations/0078_supplierpart_primary.py new file mode 100644 index 0000000000..0459589051 --- /dev/null +++ b/src/backend/InvenTree/company/migrations/0078_supplierpart_primary.py @@ -0,0 +1,22 @@ +# Generated by Django 5.2.11 on 2026-02-12 10:52 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("company", "0077_delete_manufacturerpartparameter"), + ] + + operations = [ + migrations.AddField( + model_name="supplierpart", + name="primary", + field=models.BooleanField( + default=False, + help_text="Is this the primary supplier part for the linked Part?", + verbose_name="Primary", + ), + ), + ] diff --git a/src/backend/InvenTree/company/migrations/0079_auto_20260212_1054.py b/src/backend/InvenTree/company/migrations/0079_auto_20260212_1054.py new file mode 100644 index 0000000000..a045edae4a --- /dev/null +++ b/src/backend/InvenTree/company/migrations/0079_auto_20260212_1054.py @@ -0,0 +1,55 @@ +# Generated by Django 5.2.11 on 2026-02-12 10:54 + +from django.db import migrations + + +def link_primary_supplier_part(apps, schema_editor): + """Mark 'primary' SupplierPart for each Part, if one exists.""" + + Part = apps.get_model("part", "Part") + SupplierPart = apps.get_model("company", "SupplierPart") + + # Find any part which links to a "default_supplier" + primary_supplier_ids = Part.objects.exclude( + default_supplier=None, + ).values_list("default_supplier_id", flat=True).distinct() + + if len(primary_supplier_ids) > 0: + # Mark the relevant SupplierPart objects as "primary" + SupplierPart.objects.filter( + pk__in=primary_supplier_ids + ).update(primary=True) + + print(f"Marked {len(primary_supplier_ids)} SupplierPart objects as primary") + + +def reverse_link_primary_supplier_part(apps, schema_editor): + """Add 'primary' SupplierPart for each Part.""" + + SupplierPart = apps.get_model("company", "SupplierPart") + + # Find any SupplierPart object marked as "primary" + primary_supplier_parts = SupplierPart.objects.filter(primary=True) + + if len(primary_supplier_parts) > 0: + # Unmark the relevant SupplierPart objects as "primary" + + for supplier_part in primary_supplier_parts: + supplier_part.part.default_supplier = supplier_part + supplier_part.part.save() + + print(f"Linked {len(primary_supplier_parts)} primary SupplierPart objects") + + +class Migration(migrations.Migration): + + dependencies = [ + ("company", "0078_supplierpart_primary"), + ] + + operations = [ + migrations.RunPython( + code=link_primary_supplier_part, + reverse_code=reverse_link_primary_supplier_part, + ), + ] diff --git a/src/backend/InvenTree/company/models.py b/src/backend/InvenTree/company/models.py index 96934ff277..431f7ae11b 100644 --- a/src/backend/InvenTree/company/models.py +++ b/src/backend/InvenTree/company/models.py @@ -2,6 +2,7 @@ import os from decimal import Decimal +from typing import TypedDict from django.apps import apps from django.conf import settings @@ -53,7 +54,7 @@ def rename_company_image(instance, filename): return os.path.join(base, fn) -class CompanyReportContext(report.mixins.BaseReportContext): +class CompanyReportContext(report.mixins.BaseReportContext, TypedDict): """Report context for the Company model. Attributes: @@ -111,6 +112,7 @@ class Company( """ IMAGE_RENAME = rename_company_image + IMPORT_ID_FIELDS = ['name'] class Meta: """Metaclass defines extra model options.""" @@ -242,7 +244,11 @@ class Company( # We may have a pre-fetched primary address list if hasattr(self, 'primary_address_list'): addresses = self.primary_address_list - return addresses[0] if len(addresses) > 0 else None + return ( + addresses[0] + if len(addresses) > 0 and isinstance(addresses, list) + else None + ) # Otherwise, query the database return self.addresses.filter(primary=True).first() @@ -297,6 +303,8 @@ class Contact(InvenTree.models.InvenTreeMetadataModel): role: position in company """ + IMPORT_ID_FIELDS = ['name', 'email'] + class Meta: """Metaclass defines extra model options.""" @@ -370,22 +378,19 @@ class Address(InvenTree.models.InvenTreeModel): Rules: - If this address is marked as "primary", ensure that all other addresses for this company are marked as non-primary """ - others = list( - Address.objects.filter(company=self.company).exclude(pk=self.pk).all() - ) + others = Address.objects.filter(company=self.company).exclude(pk=self.pk) # If this is the *only* address for this company, make it the primary one - if len(others) == 0: + if not others.exists(): self.primary = True super().save(*args, **kwargs) # Once this address is saved, check others if self.primary: - for addr in others: - if addr.primary: - addr.primary = False - addr.save() + Address.objects.filter(company=self.company).exclude(pk=self.pk).filter( + primary=True + ).update(primary=False) @staticmethod def get_api_url(): @@ -494,6 +499,8 @@ class ManufacturerPart( description: Descriptive notes field """ + IMPORT_ID_FIELDS = ['MPN'] + class Meta: """Metaclass defines extra model options.""" @@ -607,6 +614,7 @@ class SupplierPart( source_item: The sourcing item linked to this SupplierPart instance supplier: Company that supplies this SupplierPart object active: Boolean value, is this supplier part active + primary: Boolean value, is this the primary supplier part for the linked Part SKU: Stock keeping unit (supplier part number) link: Link to external website for this supplier part description: Descriptive notes field @@ -620,6 +628,8 @@ class SupplierPart( updated: Date that the SupplierPart was last updated """ + IMPORT_ID_FIELDS = ['SKU'] + class Meta: """Metaclass defines extra model options.""" @@ -732,8 +742,21 @@ class SupplierPart( self.clean() self.validate_unique() + # Ensure that only one SupplierPart is marked as "primary" for a given Part + others = SupplierPart.objects.filter(part=self.part).exclude(pk=self.pk) + + # If this is the *only* SupplierPart for this Part, make it the primary one + if not others.exists(): + self.primary = True + super().save(*args, **kwargs) + # Once this SupplierPart is saved, check others + if self.primary: + SupplierPart.objects.filter(part=self.part).exclude(pk=self.pk).filter( + primary=True + ).update(primary=False) + part = models.ForeignKey( 'part.Part', on_delete=models.CASCADE, @@ -764,6 +787,12 @@ class SupplierPart( help_text=_('Is this supplier part active?'), ) + primary = models.BooleanField( + default=False, + verbose_name=_('Primary'), + help_text=_('Is this the primary supplier part for the linked Part?'), + ) + manufacturer_part = models.ForeignKey( ManufacturerPart, on_delete=models.CASCADE, diff --git a/src/backend/InvenTree/company/serializers.py b/src/backend/InvenTree/company/serializers.py index b3c936ae49..eae59f1980 100644 --- a/src/backend/InvenTree/company/serializers.py +++ b/src/backend/InvenTree/company/serializers.py @@ -268,11 +268,7 @@ class ManufacturerPartSerializer( source='part', many=False, read_only=True, allow_null=True ), True, - prefetch_fields=[ - Prefetch( - 'part', queryset=part.models.Part.objects.select_related('pricing_data') - ) - ], + prefetch_fields=['part', 'part__pricing_data', 'part__category'], ) pretty_name = enable_filter( @@ -358,6 +354,7 @@ class SupplierPartSerializer( 'on_order', 'link', 'active', + 'primary', 'manufacturer_detail', 'manufacturer_part', 'manufacturer_part_detail', @@ -438,7 +435,7 @@ class SupplierPartSerializer( label=_('Part'), source='part', many=False, read_only=True, allow_null=True ), False, - prefetch_fields=['part'], + prefetch_fields=['part', 'part__pricing_data'], ) supplier_detail = enable_filter( @@ -544,8 +541,8 @@ class SupplierPartSerializer( @register_importer() class SupplierPriceBreakSerializer( - SupplierPriceBreakBriefSerializer, DataImportExportSerializerMixin, + SupplierPriceBreakBriefSerializer, InvenTreeModelSerializer, ): """Serializer for SupplierPriceBreak object. diff --git a/src/backend/InvenTree/company/test_api.py b/src/backend/InvenTree/company/test_api.py index 3599160d93..6df854edd6 100644 --- a/src/backend/InvenTree/company/test_api.py +++ b/src/backend/InvenTree/company/test_api.py @@ -505,7 +505,9 @@ class ManufacturerTest(InvenTreeAPITestCase): def test_manufacturer_part_detail(self): """Tests for the ManufacturerPart detail endpoint.""" - url = reverse('api-manufacturer-part-detail', kwargs={'pk': 1}) + mp = ManufacturerPart.objects.first() + + url = reverse('api-manufacturer-part-detail', kwargs={'pk': mp.pk}) response = self.get(url) self.assertEqual(response.data['MPN'], 'MPN123') @@ -710,6 +712,32 @@ class SupplierPartTest(InvenTreeAPITestCase): for result in response.data: self.assertEqual(result['supplier'], company.pk) + def test_primary(self): + """Test for the 'primary' field in the SupplierPart model.""" + for sp in SupplierPart.objects.filter(part=1): + self.patch( + reverse('api-supplier-part-detail', kwargs={'pk': sp.pk}), + {'primary': True}, + expected_code=200, + ) + + # Only one supplier part should be primary for this part + self.assertEqual( + SupplierPart.objects.filter(part=1, primary=True).count(), 1 + ) + + # Filter via the API + response = self.get( + reverse('api-supplier-part-list'), + {'part': 1, 'primary': True}, + expected_code=200, + ) + + self.assertEqual(len(response.data), 1) + + self.assertEqual(SupplierPart.objects.filter(part=1).count(), 4) + self.assertEqual(SupplierPart.objects.filter(part=1, primary=False).count(), 3) + def test_filterable_fields(self): """Test inclusion/exclusion of optional API fields.""" fields = { @@ -747,58 +775,6 @@ class SupplierPartTest(InvenTreeAPITestCase): ) -class CompanyMetadataAPITest(InvenTreeAPITestCase): - """Unit tests for the various metadata endpoints of API.""" - - fixtures = [ - 'category', - 'part', - 'location', - 'company', - 'contact', - 'manufacturer_part', - 'supplier_part', - ] - - roles = ['company.change', 'purchase_order.change', 'part.change'] - - def metatester(self, apikey, model): - """Generic tester.""" - modeldata = model.objects.first() - - # Useless test unless a model object is found - self.assertIsNotNone(modeldata) - - url = reverse(apikey, kwargs={'pk': modeldata.pk}) - - # Metadata is initially null - self.assertIsNone(modeldata.metadata) - - numstr = f'12{len(apikey)}' - - self.patch( - url, - {'metadata': {f'abc-{numstr}': f'xyz-{apikey}-{numstr}'}}, - expected_code=200, - ) - - # Refresh - modeldata.refresh_from_db() - self.assertEqual( - modeldata.get_metadata(f'abc-{numstr}'), f'xyz-{apikey}-{numstr}' - ) - - def test_metadata(self): - """Test all endpoints.""" - for apikey, model in { - 'api-manufacturer-part-metadata': ManufacturerPart, - 'api-supplier-part-metadata': SupplierPart, - 'api-company-metadata': Company, - 'api-contact-metadata': Contact, - }.items(): - self.metatester(apikey, model) - - class SupplierPriceBreakAPITest(InvenTreeAPITestCase): """Unit tests for the SupplierPart price break API.""" diff --git a/src/backend/InvenTree/config_template.yaml b/src/backend/InvenTree/config_template.yaml index a65509f072..ab5f232127 100644 --- a/src/backend/InvenTree/config_template.yaml +++ b/src/backend/InvenTree/config_template.yaml @@ -40,6 +40,10 @@ debug_silk: False debug_silk_profiling: False debug_shell: False +# Schema generation options +#schema: +# level: 0 # Level of added schema extensions detail (0-3) 0 = including no additional detail, or use the environment variable INVENTREE_SCHEMA_LEVEL + # Set to False to disable the admin interface, or use the environment variable INVENTREE_ADMIN_ENABLED #admin_enabled: True @@ -223,6 +227,7 @@ ldap: # navbar_message:
InvenTree demo mode
# hide_admin_link: true # hide_password_reset: true +# disable_theme_storage: true # logo: img/custom_logo.png # splash: img/custom_splash.jpg diff --git a/src/backend/InvenTree/data_exporter/mixins.py b/src/backend/InvenTree/data_exporter/mixins.py index 316dfdfbce..f40ee113f2 100644 --- a/src/backend/InvenTree/data_exporter/mixins.py +++ b/src/backend/InvenTree/data_exporter/mixins.py @@ -304,7 +304,7 @@ class DataExportViewMixin: """Export the data in the specified format. Arguments: - export_plugin: The plugin instance to use for exporting the data + export_plugin: The plugin instance to use for exporting the data. If not provided, the default exporter is used export_format: The file format to export the data in export_context: Additional context data to pass to the plugin output: The DataOutput object to write to @@ -312,6 +312,11 @@ class DataExportViewMixin: - By default, uses the provided serializer to generate the data, and return it as a file download. - If a plugin is specified, the plugin can be used to augment or replace the export functionality. """ + if export_plugin is None: + from plugin.registry import registry + + export_plugin = registry.get_plugin('inventree-exporter') + # Get the base serializer class for the view serializer_class = self.get_serializer_class() @@ -337,6 +342,12 @@ class DataExportViewMixin: # Update the output instance with the total number of items to export output.total = queryset.count() output.save() + request = context.get('request', None) + + if request: + query_params = getattr(request, 'query_params', {}) + context.update(**query_params) + context['request'] = request data = None serializer = serializer_class(context=context, exporting=True) @@ -363,7 +374,12 @@ class DataExportViewMixin: # The returned data *must* be a list of dict objects try: data = export_plugin.export_data( - queryset, serializer_class, headers, export_context, output + queryset, + serializer_class, + headers, + export_context, + output, + serializer_context=context, ) except Exception as e: diff --git a/src/backend/InvenTree/generic/states/fields.py b/src/backend/InvenTree/generic/states/fields.py index 9ffa81d8eb..0ca677b4ab 100644 --- a/src/backend/InvenTree/generic/states/fields.py +++ b/src/backend/InvenTree/generic/states/fields.py @@ -194,7 +194,7 @@ class InvenTreeCustomStatusSerializerMixin: """Ensure the custom field is updated if the leader was changed.""" self.gather_custom_fields() # Mirror values from leader to follower - for field in self._custom_fields_leader: + for field in self._custom_fields_leader or []: follower_field_name = f'{field}_custom_key' if ( field in self.initial_data @@ -205,7 +205,7 @@ class InvenTreeCustomStatusSerializerMixin: setattr(self.instance, follower_field_name, self.initial_data[field]) # Mirror values from follower to leader - for field in self._custom_fields_follower: + for field in self._custom_fields_follower or []: leader_field_name = field.replace('_custom_key', '') if field in validated_data and leader_field_name not in self.initial_data: try: @@ -276,7 +276,7 @@ class InvenTreeCustomStatusSerializerMixin: # Inherit choices from leader self.gather_custom_fields() - if field_name in self._custom_fields: + if self._custom_fields and field_name in self._custom_fields: leader_field_name = field_name.replace('_custom_key', '') leader_field = self.fields[leader_field_name] if hasattr(leader_field, 'choices'): diff --git a/src/backend/InvenTree/generic/states/states.py b/src/backend/InvenTree/generic/states/states.py index d94793e748..697166645d 100644 --- a/src/backend/InvenTree/generic/states/states.py +++ b/src/backend/InvenTree/generic/states/states.py @@ -303,7 +303,20 @@ class StatusCodeMixin: return getattr(self, f'{self.STATUS_FIELD}_custom_key', None) def compare_status(self, status: int) -> bool: - """Determine if the current status matches the provided status code.""" + """Determine if the current status matches the provided status code. + + Arguments: + status: The status code to compare against + + Returns: + True if the status matches, False otherwise. + """ + try: + status = int(status) + except (ValueError, TypeError): + # Value cannot be converted to integer - so it cannot match + return False + if status == self.get_status(): return True @@ -327,6 +340,13 @@ class StatusCodeMixin: else custom_values ) + # The status must be an integer + try: + status = int(status) + except (ValueError, TypeError): + logger.warning(f'Invalid status value {status} for class {self.__class__}') + return False + custom_field = f'{self.STATUS_FIELD}_custom_key' result = False diff --git a/src/backend/InvenTree/importer/models.py b/src/backend/InvenTree/importer/models.py index 2705435aaf..76f5d8dcc9 100644 --- a/src/backend/InvenTree/importer/models.py +++ b/src/backend/InvenTree/importer/models.py @@ -2,6 +2,7 @@ import json from collections import OrderedDict +from datetime import datetime from typing import Optional from django.contrib.auth.models import User @@ -151,6 +152,27 @@ class DataImportSession(models.Model): return supported_models().get(self.model_type, None) + def get_related_model(self, field_name: str) -> Optional[models.Model]: + """Return the related model for a given field name. + + Arguments: + field_name: The name of the field to check + + Returns: + The related model class, if one exists, or None otherwise + """ + model_class = self.model_class + + if not model_class: + return None + + try: + related_field = model_class._meta.get_field(field_name) + model = related_field.remote_field.model + return model + except (AttributeError, models.FieldDoesNotExist): + return None + def extract_columns(self) -> None: """Run initial column extraction and mapping. @@ -530,6 +552,12 @@ class DataImportRow(models.Model): self.valid = self.validate() super().save(*args, **kwargs) + def delete(self, *args, **kwargs): + """Update the session progress when a row is deleted.""" + session = self.session + super().delete(*args, **kwargs) + session.check_complete() + session = models.ForeignKey( DataImportSession, on_delete=models.CASCADE, @@ -597,6 +625,8 @@ class DataImportRow(models.Model): data = {} + self.related_field_map = {} + # 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) @@ -622,7 +652,9 @@ class DataImportRow(models.Model): if field_type == 'boolean': value = InvenTree.helpers.str2bool(value) elif field_type == 'date': - value = value or None + value = self.convert_date_field(value) + elif field_type == 'related field': + value = self.lookup_related_field(field, value) # Use the default value, if provided if value is None and field in default_values: @@ -667,6 +699,93 @@ class DataImportRow(models.Model): if commit: self.save() + def convert_date_field(self, value: str) -> Optional[str]: + """Convert an incoming date field to the correct format for the database.""" + if value in [None, '']: + return None + + # Attempt conversion using accepted formats + date_formats = ['%Y-%m-%d', '%d/%m/%Y', '%m/%d/%Y', '%Y/%m/%d'] + + for fmt in date_formats: + try: + dt = datetime.strptime(value.strip(), fmt) + + # If the date is valid, convert it to the standard format and return + return dt.strftime('%Y-%m-%d') + except ValueError: + continue + + # If none of the formats matched, return the original value + return value + + def lookup_related_field(self, field_name: str, value: str) -> Optional[int]: + """Try to perform lookup against a related field. + + - This is used to convert a human-readable value (e.g. a supplier name) into a database reference (e.g. supplier ID). + - Reference the value against the related model's allowable import fields + + Arguments: + field_name: The name of the field to perform the lookup against + value: The value to be looked up + + Returns: + A primary key value + """ + if value is None or value == '': + return value + + if field_name is None or field_name == '': + return value + + if field_name in self.related_field_map: + model = self.related_field_map[field_name] + else: + # Cache the related model for this field name + model = self.related_field_map[field_name] = self.session.get_related_model( + field_name + ) + + if not model: + raise DjangoValidationError({ + 'session': f'No related model found for field: {field_name}' + }) + + valid_items = set() + + base_filters = ( + self.session.field_filters.get(field_name, {}) + if self.session.field_filters + else {} + ) + + # First priority is the PK (primary key) field + id_fields = ['pk'] + + if custom_id_fields := getattr(model, 'IMPORT_ID_FIELDS', None): + id_fields += custom_id_fields + + # Iterate through the provided list - if any of the values match, we can perform the lookup + for id_field in id_fields: + try: + queryset = model.objects.filter(**{id_field: value}, **base_filters) + except ValueError: + continue + + # Evaluate at most two results to determine if there is exactly one match + results = list(queryset[:2]) + if len(results) == 1: + # We have a single match against this field + valid_items.add(results[0].pk) + + if len(valid_items) == 1: + # We found a single valid match against the related model - return this value + return valid_items.pop() + + # We found either zero or multiple values matching against the related model + # Return the original value and let the serializer validation handle any errors against this field + return value + def serializer_data(self): """Construct data object to be sent to the serializer. diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po index 46d379db99..64b0ec1bb9 100644 --- a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "نقطة نهاية API غير موجودة" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "المستخدم ليس لديه الصلاحية لعرض هذا النموذج" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "البريد الإلكتروني (مرة أخرى)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "تأكيد البريد الإلكتروني" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "يجب عليك كتابة نفس البريد الإلكتروني كل مرة." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "عنوان البريد الإلكتروني الرئيسي المقدم غير صالح." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "لم تتم الموافقة على نطاق البريد الإلكتروني المقدم." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "تعذّر تحويل {original} إلى {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "الكمية المقدمة غير صحيحة" @@ -112,13 +104,13 @@ msgstr "أدخل التاريخ" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "ملاحظات" @@ -131,75 +123,75 @@ msgstr "القيمة '{name}' لا تظهر في تنسيق النمط" msgid "Provided value does not match required pattern: " msgstr "القيمة المقدمة لا تتطابق مع النمط المطلوب: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "سلسلة الرقم التسلسلي فارغة" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "تكرار التسلسل" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "نطاق المجموعة {group} يتجاوز الكَمّيَّة المسموح بها ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "لم يتم العثور على أرقام متسلسلة" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "إزالة علامات HTML من هذه القيمة" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "خطأ فى الاتصال" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +199,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "البريد الإلكتروني" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po index e93e5251a6..3e65422b42 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "Не е намерена крайна точка на API" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Елементите трябва да се предоставят, като списък" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Филтрите следва да се предоставят, като dict" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Потребителя няма нужното разрешение, за да вижда този модел" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Е-поща отново" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Потвърждение на електронната поща" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Трябва ла въведете една и съща електронна поща." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Въведената основна електронна поща е невалидна." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Въведеният домейн на електронната поща не е утвърден." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Преобразуването на {original} в {unit} не беше успешно" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Въведена е недопустима стойност" @@ -112,13 +104,13 @@ msgstr "Въведи дата" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Бележки" @@ -131,75 +123,75 @@ msgstr "Значението '{name}' не отговаря на шаблона" msgid "Provided value does not match required pattern: " msgstr "Въведеното значение не отговаря на задължителния шаблон: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Липсва сериен номер" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Повтарящ се сериен номер" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Не са открити серийни номера" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Премахнете HTML маркерите от тази стойност" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Грешка при съединението" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Сървърът отговари с невалиден статусен код" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Възникна изключение" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Сървърът отговори с невалидна стойност за дължината на съдържанието (Content-Length)" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Размерът на изображението е твърде голям" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Сваляното на изображение превиши максималния размер" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Отдалеченият сървър върна празен отговор" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +199,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Трябва да активирате двойно оторизиране преди да направите, каквото и да е." @@ -255,133 +247,124 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Китайски (опростен)" msgid "Chinese (Traditional)" msgstr "Китайски (традиционен)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "Част" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Потребител" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Изпратено" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Цялостна наличност" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Място в склада" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Места в склада" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po index f91c06515f..ab15fea02d 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API endpoint nebyl nalezen" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Seznam položek nebo filtrů musí být k dispozici pro hromadnou operaci" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Položky musí být uvedeny jako seznam" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Zadán neplatný seznam položek" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Filtry musí být uvedeny jako slovník" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Poskytnuty neplatné filtry" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Všechny filtry musí být použity s Pravda" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Zadaným kritériím neodpovídají žádné položky" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Nebyla poskytnuta žádná data" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Toto pole musí být unikátní." -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Uživatel nemá právo zobrazit tento model" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Email (znovu)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Potvrzení emailové adresy" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Pokaždé musíte zadat stejný email." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Zadaná primární e-mailová adresa je neplatná." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Zadaná e-mailová doména není povolena." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nelze převést {original} na {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Vyplněno neplatné množství" @@ -112,13 +104,13 @@ msgstr "Zadejte datum" msgid "Invalid decimal value" msgstr "Neplaté desetinné číslo" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Poznámky" @@ -131,75 +123,75 @@ msgstr "Hodnota '{name}' neodpovídá formátu vzoru" msgid "Provided value does not match required pattern: " msgstr "Poskytnutá hodnota neodpovídá požadovanému vzoru: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Nelze serializovat více než 1000 položek najednou" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Nevyplněné výrobní číslo" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplicitní výrobní číslo" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Neplatná skupina: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, 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:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nenalezena žádná výrobní čísla" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Počet jedinečných sériových čísel ({n}) musí odpovídat množství ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Odstranit HTML tagy z této hodnoty" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Data obsahují zakázaný markdown obsah" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Chyba spojení" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Server odpověděl s neplatným stavovým kódem" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Došlo k výjimce" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Server odpověděl s neplatnou hodnotou Content-Length" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Velikost obrázku je příliš velká" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Stahování obrázku překročilo maximální velikost" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Vzdálený server vrátil prázdnou odpověď" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Zadaná URL adresa není platný soubor obrázku" @@ -207,11 +199,11 @@ msgstr "Zadaná URL adresa není platný soubor obrázku" msgid "Log in to the app" msgstr "Přihlásit se do aplikace" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Před tím, než budete dělat cokoli jiného, musíte zapnout dvoufaktorové ověřování." @@ -255,133 +247,124 @@ msgstr "Referenční číslo musí odpovídat požadovanému vzoru" msgid "Reference number is too large" msgstr "Referenční číslo je příliš velké" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Neplatný výběr" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Název" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Popis" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Popis (volitelně)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Cesta" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 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:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Poznámky (volitelné)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Data čárového kódu" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Data čárového kódu třetí strany" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Hash čárového kódu" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Jedinečný hash dat čárového kódu" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Nalezen existující čárový kód" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Selhání úlohy" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Úloha na pozadí '{f}' se ani po {n} pokusech nezdařila" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Chyba serveru" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Server zaznamenal chybu." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Obrazek" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Musí být platné číslo" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Měna" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Vyberte měnu z dostupných možností" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "Toto pole nesmí být nulové." -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Neplatná hodnota" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Vzdálený obraz" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL souboru vzdáleného obrázku" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Stahování obrázků ze vzdálené URL není povoleno" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Nepodařilo se stáhnout obrázek ze vzdálené adresy URL" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "Neplatný formát typu obsahu" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "Typ obsahu nenalezen" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "Typ obsahu neodpovídá požadované třídě mixinu" @@ -537,11 +520,11 @@ msgstr "Čínština (zjednodušená)" msgid "Chinese (Traditional)" msgstr "Čínština (tradiční)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "Dostupná aktualizace" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "Aktualizace pro InvenTree je k dispozici" @@ -553,30 +536,30 @@ msgstr "Neplatná fyzikální jednotka" msgid "Not a valid currency code" msgstr "Neplatný kód měny" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Stav objednávky" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Nadřazená sestava" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Zahrnout varianty" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Zahrnout varianty" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Zahrnout varianty" msgid "Part" msgstr "Díl" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategorie" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Sestava předků" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Přiřazeno mě" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Přiřazeno" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Vytvořeno před" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Vytvořeno po" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Má počáteční datum" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Datum začátku před" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Datum začátku po" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Má cílové datum" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Cílové datum před" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Cílové datum po" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Dokončeno před" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Dokončeno po" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "Min. datum" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "Max datum" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Vyloučit strom" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Sestavení musí být zrušeno před odstraněním" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Spotřební materiál" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Volitelné" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Sestava" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Sledováno" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Testovatelné" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Objednávka nevyřízená" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Přiděleno" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Spotřebováno" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Dostupné" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Na objednávku" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Výrobní příkaz" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Lokace" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Výstup" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filtrovat podle ID výstupní položky zásoby. Použijte 'null' pro nalezení odinstalovaných položek sestavení." -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Výrobní příkazy" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Kusovník sestavy ještě nebyl schválen" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Výrobní příkaz nesmí být vytvořen pro neaktivní díl" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Výrobní příkaz nemůže být vytvořen pro odemčený díl" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Výrobní příkaz může být externě splněn pouze pro nakupovatelné díly" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Musí být specifikován odpovědný uživatel nebo skupina" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Díl výrobního příkazu nelze změnit" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Cílové datum musí být po datu zahájení" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Referenční číslo výrobního příkazu" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Referenční číslo výrobního příkazu" msgid "Reference" msgstr "Reference" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Stručný popis sestavení (nepovinné)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Výrobní příkaz, kterému je tento výrobní příkaz přidělen" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "Výrobní příkaz, kterému je tato stavba přiřazena" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Vyber téma, které chceš stavět" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referenční číslo prodejní objednávky" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Prodejní objednávka, které je tento výrobní příkaz přidělen" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "Prodejní objednávka, které je tato stavba přiřazena" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Zdrojové umístění" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Vyberte lokaci, ze které chcete brát zásoby pro sestavu (nechte prázdné, chcete-li brát zásoby z libovolné lokace)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "Externí sestavení" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Tento výrobní příkaz je plněn externě" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Cílová lokace" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Vyberte lokaci, kde budou dokončené položky uloženy" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Množství sestav" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Počet skladových položek k sestavení" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Dokončené položky" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Počet skladových položek, které byly dokončeny" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Stav sestavení" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Stavový kód sestavení" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Kód dávky" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Dávkový kód pro tento výstup sestavení" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Datum vytvoření" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "Datum zahájení sestavení" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Plánované datum zahájení této objednávky" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Cílové datum dokončení" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Cílové datum dokončení sestavení. Sestavení bude po tomto datu v prodlení." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Datum dokončení" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "dokončil" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Vystavil" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Uživatel, který vystavil tento výrobní příkaz" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odpovědný" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Uživatel nebo skupina odpovědná za tento výrobní příkaz" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Externí odkaz" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Odkaz na externí URL" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Priorita sestavení" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Priorita tohoto výrobního příkazu" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Kód projektu" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Kód projektu pro tento výrobní příkaz" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Nelze dokončit výrobní příkaz s otevřenými podobjednávkami" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Nelze dokončit výrobní příkaz s neúplnými výstupy" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Nepodařilo se uvolnit úlohu pro dokončení přidělení sestavy" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Výrobní příkaz {build} byl dokončen" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Výrobní příkaz byl dokončen" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "U sledovatelných dílů musí být uvedena sériová čísla" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nebyl specifikováno žádný výstup sestavení" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Výstup sestavení je již dokončen" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Výstup neodpovídá výrobnímu příkazu" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Množství musí být vyšší než nula" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Množství nemůže být větší než výstupní množství" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "Výstup výroby neprošel všemi požadovanými testy" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Výstup sestavy {serial} neprošel všemi požadavky" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "Přiřazené skladové položky jsou stále ve výrobě" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "Nelze částečně dokončit výrobní příkaz s přiřazenými položkami" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Řádková položka výrobního příkazu" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Vytvořit objekt" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Vytvořit objekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Množství" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Vyžadované množství pro výrobní příkaz" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Množství spotřebovaných zásob" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Položka sestavení musí specifikovat výstup sestavení, protože hlavní díl je označen jako sledovatelný" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "Vybraná skladová položka neodpovídá řádku kusovníku" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "Přiřazené množství musí být vyšší než nula" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Množství musí být 1 pro zřetězený sklad" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Zabrané množství ({q}) nesmí překročit dostupné skladové množství ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Skladová položka je nadměrně zabrána" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Zabrané množství musí být větší než nula" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Množství musí být 1 pro zřetězený sklad" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "Vybraná skladová položka neodpovídá řádku kusovníku" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "Přidělené množství přesahuje dostupné množství na skladě" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Skladové položky" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Zdrojová skladová položka" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Skladové množství pro sestavení" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Instalovat do" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Cílová skladová položka" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Úroveň sestavení" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Název dílu" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Popisek kódu projektu" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Vytvořit výstup" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Vytvořený výstup neodpovídá nadřazenému sestavení" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Výstupní díl se neshoduje s dílem výrobního příkazu" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Výstup sestavení je již dokončen" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Tento stavební výstup není plně přiřazen" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Zadejte množství pro výstup sestavení" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Celé množství požadované pro sledovatelné díly" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Je vyžadována celočíselná hodnota množství, protože kusovník obsahuje sledovatelné díly" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Sériová čísla" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Zadejte sériová čísla pro sestavení výstupů" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Skladové umístění pro výstup sestavy" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Automaticky zvolit sériová čísla" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automaticky přidělit požadované položky s odpovídajícími sériovými čísly" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Následující sériová čísla již existují nebo jsou neplatná" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Musí být uveden seznam výstupů sestavy" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Skladové umístění pro sešrotované výstupy" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Zahodit alokace" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Vyřadit všechny přidělené zásoby pro vyřazené výstupy" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Důvod vyřazení výstupu(ů) sestavy" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Umístění dokončených výstupů sestavy" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Přijmout neúplné přidělení" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Dokončit výstupy pokud zásoby nebyly plně přiděleny" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Spotřebovat přidělené zásoby" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Spotřebovat všechny zásoby, které již byly přiděleny této sestavě" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Odstranit neúplné výstupy" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Odstranit všechny výstupy sestavy, které nebyly dokončeny" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Není povoleno" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Přijmout jako spotřebované tímto výrobním příkazem" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Uvolnit před dokončením tohoto výrobního příkazu" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Nadměrně přidělené zásoby" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Jak chcete zacházet s extra skladovými položkami přiřazenými k tomuto výrobnímu příkazu" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Některé skladové položky byly nadměrně přiděleny" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Přijmout nepřidělené" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Přijmout, že skladové položky nebyly plně přiřazeny k tomuto výrobnímu příkazu" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Požadované zásoby nebyly plně přiděleny" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Přijmout neúplné" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Přijmout, že nebyl dokončen požadovaný počet výstupů sestavy" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Požadované množství sestavy nebylo dokončeno" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Výrobní příkaz má otevřené podpříkazy" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Výrobní příkaz musí být ve stavu produkce" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Výrobní příkaz má neúplné výstupy" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Linka sestavy" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Výstup sestavy" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Výstup sestavy musí odkazovat na stejnou sestavu" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Řádková položka sestavy" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part musí ukazovat na stejný díl jako výrobní příkaz" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "Položka musí být skladem" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupné množství ({q}) překročeno" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Pro přidělení sledovaných dílů musí být zadán výstup sestavy" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Výstup sestavy nelze zadat pro přidělení nesledovaných dílů" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Položky přidělení musí být poskytnuty" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Skladové místo, odkud se mají díly odebírat (ponechte prázdné, pokud chcete odebírat z libovolného místa)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Vynechat lokace" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Vyloučit skladové položky z tohoto vybraného umístění" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Zaměnitelné zásoby" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Skladové položky na více místech lze používat zaměnitelně" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Náhradní zásoby" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Povolit přidělování náhradních dílů" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Volitelné položky" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Přiřazení volitelných položek kusovníku k objednávce sestavy" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Nepodařilo se spustit úlohu automatického přidělování" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "Všechny položky" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "Nesledované položky" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "Sledované položky" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "Typ položky" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "Vyberte typ položky pro automatické přiřazení" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Reference v kusovníku" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID dílu kusovníku" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Název dílu kusovníku" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "Informace instalace" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Sestavení" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Díl dodavatele" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Přidělené množství" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Reference sestavení" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Název kategorie dílů" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Sledovatelné" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Zděděno" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Povolit varianty" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Položka kusovníku" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Ve výrobě" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Naplánováno na sestavení" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Externí zásoby" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Dostupné zásoby" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Dostupné náhradní zásoby" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Dostupná varianta skladu" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "Spotřebované množství přesahuje přidělené množství" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Nepovinné poznámky ke spotřebě zásob" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "Sestavení položky musí odkazovat na správný výrobní příkaz" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Duplikovat přidělení položky sestavení" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "Výrobní linka musí odkazovat na správný výrobní příkaz" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Duplikovat přiřazení výrobní linky" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Musí být poskytnuta alespoň jedna linka nebo předmět" @@ -1474,67 +1478,71 @@ msgstr "Pozastaveno" msgid "Cancelled" msgstr "Zrušeno" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Hotovo" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Zásoby potřebné pro výrobní příkaz" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Výrobní příkaz {build} vyžaduje další zásoby" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Opožděný výrobní příkaz" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Objednávka sestavy {bo} je nyní opožděná" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "Je odkaz" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "Je soubor" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Uživatel nemá oprávnění k odstranění těchto příloh" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Uživatel nemá oprávnění k odstranění této přílohy" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Neplatný kód měny" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Duplicitní kód měny" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Nejsou uvedeny žádné platné kódy měn" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Žádný plugin" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Popisek kódu projektu" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Aktualizováno" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Časové razítko poslední aktualizace" @@ -1546,778 +1554,778 @@ msgstr "Aktualizoval/a" msgid "User who last updated this object" msgstr "Uživatel, který naposledy aktualizoval tento objekt" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Jedinečný kód projektu" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Popis projektu" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Uživatel nebo skupina odpovědná za tento projekt" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Tlačítko nastavení" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Hodnota nastavení" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Zvolená hodnota není platnou možností" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Hodnota musí být logická hodnota" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Hodnota musí být celé číslo" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "Hodnota musí být platné číslo" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "Hodnota neprošla kontrolou platnosti" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Klíčový text musí být jedinečný" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Uživatel" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Množství cenové slevy" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Cena" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Jednotková cena při stanoveném množství" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Koncový bod" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Koncový bod, ve kterém je tento webhook přijímán" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Název tohoto webhooku" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktivní" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Je tento webhook aktivní" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Token pro přístup" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Tajný klíč" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Sdílený tajný klíč pro HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "ID zprávy" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Unikátní identifikátor pro tuto zprávu" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Hostitel" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Hostitel, od kterého byla tato zpráva přijata" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Záhlaví" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Záhlaví této zprávy" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Tělo" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Tělo zprávy" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Koncový bod, na kterém byla zpráva přijata" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Pracoval na" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Byla práce na této zprávě dokončena?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "ID" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Název" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Odkaz" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Zveřejněno" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Autor" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Souhrn" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Přečteno" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Byla tato novinka přečtena?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Soubor obrázku" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "Cílový typ modelu pro tento obrázek" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "Cílové ID modelu pro tento obrázek" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Vlastní jednotka" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "Symbol jednotky musí být unikátní" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Název jednotky musí být platný identifikátor" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Název jednotky" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Volitelný symbol jednotky" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definice" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Definice jednotky" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Příloha" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Chybějící soubor" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Chybějící externí odkaz" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Typ modelu" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "Cílový typ modelu pro obrázek" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Vyberte soubor k přiložení" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Komentář" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Komentář přílohy" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Datum nahrání" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Datum, kdy byl soubor nahrán" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Velikost souboru" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Velikost souboru v bytech" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Uveden neplatný typ modelu pro přílohu" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "Vlastní stav" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "Vlastní stavy" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "Nastavení referenčního stavu" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "Stav nastavený, který je prodloužen tímto vlastním stavem" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logický klíč" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "Logický klíč statusu, který je rovný tomuto vlastnímu statusu v podnikové logice" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Hodnota" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "Číselná hodnota, která bude uložena v databázi modelů" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Název stavu" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Popisek" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Štítek, který bude zobrazen na webu" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Barva" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Barva, která bude zobrazena ve frontendu" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Model" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "Model, ke kterému je tento stav přiřazen" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "Musí být vybrán model" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "Musí být vybrán klíč" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "Musí být vybrán logický klíč" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "Klíč se musí lišit od logického klíče" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "Musí být uvedena platná referenční třída statusu" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "Klíč se musí lišit od logických klíčů referenčního statusu" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "Název se musí lišit od názvů referenčního statusu" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Výběrové pole" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Výběrová pole" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Název výběrového pole" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Popis výběrového pole" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Uzamčeno" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "Je tento seznam výběrů uzamčen?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "Může být tento seznam výběru použit?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Zdrojový plugin" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Plugin, který poskytuje seznam výběru" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Zdrojový řetězec" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Volitelný řetězec identifikující zdroj použitý pro tento seznam" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Výchozí položka" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Výchozí položka pro tento seznam výběru" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Vytvořeno" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Datum a čas vytvoření výběrového seznamu" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Poslední aktualizace" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "Datum a čas poslední aktualizace výběrového seznamu" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Položka seznamu výběrů" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Položky seznamu výběrů" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Seznam výběru, do kterého tato položka patří" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Název výběrového seznamu" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Popisek pro výběr seznamu" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Popis vstupu výběrového seznamu" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "Je tento výběr výběrového listu aktivní?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Šablona parametru" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "Šablona parametru" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "Parametry zaškrtávacího pole nemohou mít jednotky" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "Parametry zaškrtávacího pole nemohou mít výběr" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "Volby musí být jedinečné" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "Název šablony parametru musí být jedinečný" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "Cílový typ modelu pro šablonu tohoto parametru" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Název parametru" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Jednotky" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Fyzické jednotky pro tento parametr" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Popis parametru" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Zaškrtávací políčko" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Je tento parametr zaškrtávací políčko?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Volby" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Platné volby pro tento parametr (oddělené čárkami)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "Seznam výběru pro tento parametr" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Povoleno" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "Je šablona tohoto parametru povolena?" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "Parametr" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "Parametry" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Neplatná volba pro hodnotu parametru" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "Neplatný typ modelu pro daný parametr" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "ID modelu" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "ID cílového modelu pro tento parametr" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Šablona" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "Šablona parametru" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Data" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Hodnota parametru" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Poznámka" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Volitelné pole pro poznámku" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Sken čárového kódu" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Data čárového kódu" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Uživatel, který naskenoval čárový kód" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Časová značka" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Datum a čas skenování čárového kódu" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "Koncový bod URL, který zpracoval čárový kód" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Kontext" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Kontextová data pro skenov čárového kódu" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Odpověď" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Data z odezvy z čárového kódu" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Výsledek" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "Bylo skenování čárového kódu úspěšné?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "Vyskytla se chyba" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Odstranení Emailového logu je chráněno. Nastavte INVENTREE_PROTECT_EMAIL_LOG na False pro užmožnění odstranění." -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "E-mailová zpráva" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "E-mailové zprávy" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "Oznámeno" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "Odesláno" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "Selhalo" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "Doručeno" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "Potvrzeno" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "Příchozí" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "Odchozí" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "Bez odpovědi" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "Sledovat doručení" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "Sledovat přečtení" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "Sledovat kliknutí" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "Globální ID" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identifikátor pro tuto zprávu (může být poskytnut externím systémem)" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "ID vlákna" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identifikátor pro toto vlákno (může být poskytnut externím systémem)" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "Vlákno" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "Vlákno propojeno k této zprávě" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "Priorita" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "Emailové vlákno" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "Emailové vlákna" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Klíč" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "Unikátní klíč pro toto vlákno (použitý k identifikaci vlákna)" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "Unikátní identifikátor pro toto vlákno" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "Začato interně" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "Bylo toto vlákno započato interně?" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "Datum a čas kdy bylo vlákno vytvořeno" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "Datum a čas kdy bylo vlákno naposledy aktualizováno" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} zrušeno" msgid "A order that is assigned to you was canceled" msgstr "Objednávka, která je vám přidělena, byla zrušena" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Přijaté položky" @@ -2351,93 +2359,101 @@ msgstr "Položky byly obdrženy proti objednávce" msgid "Items have been received against a return order" msgstr "Položky byly obdrženy proti vratce" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "Označuje, zda změna tohoto nastavení vyžaduje potvrzení" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "Toto nastavení vyžaduje potvrzení před změnou. Prosím potvrďte změnu." + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "Indikuje zdali bylo nastavení přepsáno proměnou prostředí" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "Přepsat" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Je spuštěné" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Čekající úkoly" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Naplánované úlohy" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Neúspěšné úlohy" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID úlohy" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Unikátní ID úlohy" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Zamknout" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Čas uzamčení" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Jméno úkolu" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Funkce" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Název funkce" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumenty" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumenty úlohy" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Argumenty klíčových slov" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Argumenty klíčových slov úlohy" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Název souboru" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Typ modelu" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Uživatel nemá oprávnění k vytváření nebo úpravám příloh pro tento model" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "Uživatel nemá práva vytvářet nebo upravovat parametry pro tento model" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Tento výběr je uzamčen" @@ -2445,1128 +2461,1157 @@ msgstr "Tento výběr je uzamčen" msgid "No group" msgstr "Žádná skupina" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "Adresa URL webu je uzamčena konfigurací" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Je vyžadován restart" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Bylo změněno nastavení, které vyžaduje restart serveru" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Nevyřízené migrace" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Počet nevyřízených migrací databáze" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "Aktivní varovací kódy" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "Seznam aktivních varovacích kódů" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "ID instance" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "Unikátní identifikátor pro tuto InvenTree instanci" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "ID oznámení" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Oznámit ID instance pro server na server status infu (nepřihlášeno)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Název instance serveru" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Textový popisovač pro instanci serveru" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Použít název instance" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Použít název instance v liště" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Omezit zobrazování `o aplikaci`" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Zobrazovat okno `o aplikaci` pouze superuživatelům" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Jméno společnosti" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Interní název společnosti" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "Základní URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "Základní URL pro instanci serveru" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Výchozí měna" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Vyberte základní měnu pro cenové kalkulace" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Podporované měny" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Seznam podporovaných kódů měn" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Interval aktualizace měny" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Jak často aktualizovat směnné kurzy (pro vypnutí nastavte na nulu)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "dny" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Plugin aktualizace měny" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Plugin pro aktualizaci měn k použití" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Stáhnout z URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Povolit stahování vzdálených obrázků a souborů z externích URL" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Limit velikosti stahování" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Maximální povolená velikost stahování vzdáleného obrázku" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "User-agent použitý ke stažení z adresy URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Povolit přepsání user-agenta používaného ke stahování obrázků a souborů z externí adresy URL (ponechte prázdné pro výchozí)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Přísná validace URL" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Vyžadovat specifikaci schématu při ověřování adres URL" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Interval kontroly aktualizací" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Jak často kontrolovat aktualizace (nastavte na nulu pro vypnutí)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Automatické Zálohování" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Povolit automatické zálohování databáze a mediálních souborů" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Interval automatického zálohování" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Zadejte počet dní mezi automatickými zálohovými událostmi" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Interval mazání úloh" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Výsledky úloh na pozadí budou odstraněny po zadaném počtu dní" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Interval odstranění protokolu chyb" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Záznamy chyb budou odstraněny po zadaném počtu dní" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Interval pro odstranění oznámení" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Uživatelská oznámení budou smazána po zadaném počtu dní" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "Interval mazání emailů" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "Emailové zprávy budou odstraněny po specifikovaném počtu dní" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "Chránit Email log" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "Zabránit odstranění vstupů email logů" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Podpora čárových kódů" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Povolit podporu pro skenování čárových kódů ve webovém rozhraní" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "Ukládat výsledky čárových kódů" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "Ukládat výsledky skenování čárových kódů v databázi" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "Maximální počet naskenovaných čárových kódů" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "Maximální počet uložených výsledků skenování čárových kódů" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Zpoždění vstupu čárového kódu" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Doba zpoždění zpracování vstupu čárového kódu" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Podpora webové kamery pro čárové kódy" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Povolit skenování čárových kódů přes webovou kameru v prohlížeči" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "Zobrazovat data čárových kódů" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Zobrazovat data čárových kódů v prohlížeči jako text" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Plugin pro generování čárových kódů" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Plugin na použití pro interní generaci čárových kódů" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Revize dílu" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Povolit pole revize pro díl" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "Revize pouze pro sestavy" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "Povolit revize pouze pro sestavy" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Povolit odstranění ze sestavy" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Povolit odstranění dílů, které jsou použity v sestavě" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulární vzorec výrazu pro odpovídající IPN dílu" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Povolit duplicitní IPN" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Povolit více dílům sdílet stejný IPN" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Povolit editaci IPN" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Povolit změnu IPN při úpravách dílu" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Kopírovat data BOM dílu" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopírovat data BOM ve výchozím nastavení při duplikování dílu" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Kopírovat data parametrů dílu" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopírovat data parametrů ve výchozím nastavení při duplikování dílu" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Kopírovat zkušební data dílu" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Kopírovat testovací data ve výchozím nastavení při duplikování dílu" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Kopírovat šablony parametrů kategorie" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Kopírování šablon parametrů kategorie při vytváření dílu" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Díly jsou ve výchozím nastavení šablony" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Díly lze ve výchozím nastavení sestavit z jiných komponentů" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Díly lze ve výchozím nastavení použít jako dílčí komponenty" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Možné zakoupit" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Díly jsou zakoupitelné ve výchozím nastavení" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Prodejné" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Díly jsou prodejné ve výchozím nastavení" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Díly jsou sledovatelné ve výchozím nastavení" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Nehmotné (virtuální)" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Díly jsou nehmotné (virtuální) ve výchozím nastavení" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Zobrazit související díly" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Zobrazit související díly pro díl" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Počáteční údaje zásob" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Povolit vytvoření počátečního skladu při přidání nové části" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Počáteční údaje dodavatele" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Povolit vytvoření počátečních dat dodavatele při přidávání nového dílu" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Formát zobrazení jména dílu" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Formát pro zobrazení názvu dílu" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Výchozí ikona kategorie dílu" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Výchozí ikona kategorie dílu (prázdné znamená bez ikony)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Minimální počet desetinných míst u cen" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimální počet desetinných míst k zobrazení u cenových údajů" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Maximální počet desetinných míst u cen" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximální počet desetinných míst k zobrazení u cenových údajů" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Použít ceny dodavatele" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Zahrnout cenová zvýhodnění dodavatelů do celkových cenových kalkulací" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Přepsání historie nákupu" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historické ceny nákupních objednávek mají přednost před cenovými zvýhodněními dodavatele" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Použít ceny skladových položek" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Použít ceny z ručně zadaných skladových údajů pro cenové kalkulace" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Stáří cen skladových položek" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Vyloučit skladové položky starší než tento počet dní z cenových kalkulací" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Použít cenu varianty" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Zahrnutí cen variant do celkových cenových kalkulací" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Pouze aktivní varianty" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Pro výpočet ceny varianty použijte pouze aktivní díly varianty" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "Automatická aktualizace cen" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "Automaticky aktualizovat cenu dílu když se změní interní data" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Interval přestavby cen" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Počet dní před automatickou aktualizací cen dílů" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Interní ceny" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Povolit interní ceny pro díly" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Přepis interní ceny" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Pokud jsou k dispozici, interní ceny mají přednost před výpočty cenového rozpětí" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "Povolit nulovou hodnotu kusovníku" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "Přijmout nulové množství pro položku kusovníku. Umožňuje použít nastavení množství pro definování množství požadovaného pro sestavení, nezávisle na počtu staveb" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Povolit tisk štítků" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Povolit tisk štítků z webového rozhraní" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "DPI rozlišení štítků" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Rozlišení DPI při generování obrazových souborů, které se dodávají do zásuvných modulů pro tisk štítků" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Povolit reporty" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Povolit generování reportů" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Režim ladění chyb" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Generovat reporty v režimu ladění (HTML výstup)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Zaznamenávat chyby reportů" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Zaznamenávat chyby, které se vyskytnou při vytváření reportů" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Velikost stránky" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Výchozí velikost stránky pro PDF reporty" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Vynutit jednotky parametru" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Pokud jsou uvedeny jednotky, musí hodnoty parametrů odpovídat zadaným jednotkám" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Globálně unikátní sériová čísla" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Sériová čísla pro skladové položky musí být globálně unikátní" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Odstranit vyčerpané zásoby" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Určuje výchozí chování při vyčerpání zásoby položky" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Šablona kódu dávky" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Šablona pro generování výchozích kódů dávky pro skladové položky" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Expirace zásob" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Povolit funkci expirace zásob" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Prodat prošlé zásoby" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Povolit prodej prošlých zásob" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Čas stáří zásob" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Počet dnů, po které jsou skladové položky považovány za nevyužité před uplynutím doby expirace" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Sestavit prošlé zásoby" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Povolit sestavování s prošlými zásobami" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Kontrola vlastnictví zásob" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Umožnit kontrolu vlastnictví nad skladovými místy a položkami" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Výchozí ikona umístění zásob" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Výchozí ikona umístění zásob (prázdné znamená bez ikony)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Zobrazit nainstalované skladové položky" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Zobrazit nainstalované skladové položky ve skladových tabulkách" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Zkontrolovat BOM při instalaci položek" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Nainstalované skladové položky musí existovat v BOM pro nadřazený díl" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Povolit převod mimo sklad" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Umožnit přesun skladových položek, které nejsou na skladě, mezi skladovými místy" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Referenční vzor objednávky sestavy" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Požadovaný vzor pro generování referenčního pole Objednávka sestavy" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Vyžadovat odpovědného vlastníka" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Ke každé objednávce musí být přiřazen odpovědný vlastník" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "Vyžadovat aktivní díl" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "Zabránit vytváření výrobních příkazů pro neaktivní díly" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Vyžadovat uzamčený díl" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "Zabránit vytváření výrobních příkazů pro odemčené díly" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "Vyžadovat schválený kusovník" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "Zabránit vytváření výrobních příkazů, dokud není schválen kusovník" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "Vyžadovat uzavření podobjednávek" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "Zabránit dokončení výrobního příkazu dokud nebudou uzavřeny všechny podpříkazy" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "Externí výrobní příkazy" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "Povolit funkcionalitu externích výrobních příkazů" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Blokovat, dokud testy neprojdou" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Zabránit dokončení výstupů sestavy, dokud neprojdou všechny požadované testy" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Povolit vracení objednávek" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Povolit funkci vrácení objednávky v uživatelském rozhraní" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Referenční vzor návratové objednávky" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Požadovaný vzor pro vygenerování referenčního pole Návratová objednávka" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Úprava dokončených návratových objednávek" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Umožnit úpravu návratových objednávek po jejich dokončení" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Referenční vzor prodejní objednávky" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Požadovaný vzor pro generování referenčního pole prodejní objednávky" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Výchozí přeprava prodejní objednávky" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Povolit vytvoření výchozí přepravy s prodejními objednávkami" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Úprava dokončených prodejních objednávek" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Umožnit úpravy prodejních objednávek po jejich odeslání nebo dokončení" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "Zásilka vyžaduje kontrolu" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "Zabránit dokončení zásilek dokud nebudou zkontrolovány položky" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Označit odeslané objednávky jako dokončené" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Prodejní objednávky označené jako odeslané se automaticky dokončí a obejdou stav „odesláno“" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Referenční vzor nákupní objednávky" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Požadovaný vzor pro generování referenčního pole nákupní objednávky" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Úprava dokončených nákupních objednávek" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Umožnit úpravy nákupních objednávek po jejich odeslání nebo dokončení" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "Převést měnu" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "Převést hodnotu předmětu na základní měnu při příjmu zásob" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Automatické dokončování nákupních objednávek" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automaticky označit nákupní objednávky jako kompletní, jakmile jsou přijaty všechny řádkové položky" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Povolit pole zapomenutého hesla" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Povolení funkce zapomenutého hesla na přihlašovacích stránkách" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Povolit registrace" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Povolit samoregistraci uživatelů na přihlašovacích stránkách" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Povolit SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Povolit SSO na přihlašovacích stránkách" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Povolit SSO registraci" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Povolit samoregistraci uživatelů prostřednictvím SSO na přihlašovacích stránkách" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "Povolit synchronizaci SSO skupin" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Povolit synchronizaci InvenTree skupin se skupinami poskytnutými IdP" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "klíč SSO skupiny" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Název deklarace skupinového atributu poskytnutého IdP" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "mapa SSO skupiny" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Mapování ze skupin SSO do místních InvenTree skupin. Pokud místní skupina neexistuje, bude vytvořena." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "Odstranit skupiny mimo SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Zdali mají být skupiny přiřazené uživateli odstraněny pokud nemají backend of IdP. Vypnutí tohoto nastavení můžu způsobit problémy se zabezpečením" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Vyžadován e-mail" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Požadovat, aby uživatel při registraci zadal e-mail" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Automaticky vyplnit SSO uživatele" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automaticky vyplnit údaje o uživateli z údajů o účtu SSO" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Mail dvakrát" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Při registraci dvakrát požádat uživatele o zadání e-mailu" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Heslo dvakrát" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Při registraci dvakrát požádat uživatele o heslo" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Povolené domény" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Omezit registraci na určité domény (oddělené čárkou a začínající @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Skupina při registraci" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Skupina do které jsou nový uživatelé přiřazeni při registraci. Pokud je povolena synchronizace SSO skupin, tato skupina lze přiřadit pouze pokud nezle přiřadit skupinu od IdP." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Vynutit MFA" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Uživatelé musí používat vícefaktorové zabezpečení." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "Povolení tohoto nastavení bude vyžadovat více fázové ověření u všech uživatelů. Všechny relace budou okamžitě ukončeny." + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Zkontrolovat pluginy při spuštění" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Zkontrolujte, zda jsou při spuštění nainstalovány všechny pluginy - povolit v kontejnerových prostředích" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Zkontrolovat aktualizace pluginů" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Povolit pravidelné kontroly aktualizací nainstalovaných pluginů" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Povolit integraci URL" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Povolit plug-inům přidávat trasy URL" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Povolit integraci navigace" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Povolit integrování pluginů do navigace" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Povolit integraci aplikací" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Povolit pluginům přidávát aplikace" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Povolit integraci plánu" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Povolit pluginům spouštění naplánovaných úloh" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Povolit integraci událostí" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Povolit pluginům reagovat na interní události" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Povolit rozhraní intergace" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Povolit integrování pluginů do uživatelského rozhraní" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "Povolit integraci emailu" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Povolit pluginům zpracování odchozích/příchozích emailů" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "Povolit projektové kódy" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "Povolit projektové kódy pro sledování projektů" -#: common/setting/system.py:1083 -msgid "Enable Stock History" -msgstr "Povolit historii zásob" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" +msgstr "Povolit inventuru" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "Povolit funkcionalitu pro zaznamenávání historických stavů zásob a hodnoty" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Vyloučit externí umístění" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" -msgstr "Vyloučit skladové položky v externích lokací z výpočtu historie zásob" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "Vyloučit skladové položky z externích lokací z inventury" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Perioda automatické inventury" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" -msgstr "Počet dní mezi automatickým záznamem historie zásob" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" +msgstr "Počet dní mezi automatickým záznamem inventury" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "Odstranit starých záznamů historie zásob" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" +msgstr "Odstranit staré záznamy inventur" -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "Odstranit historii zásob starší než zadaný počet dní" +#: common/setting/system.py:1135 +msgid "Delete stocktake entries older than the specified number of days" +msgstr "Odstranit záznamy inventur starší než zadaný počet dní" -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "Interval odstranení historie zásob" +#: common/setting/system.py:1141 +msgid "Stocktake Deletion Interval" +msgstr "Interval odstranění inventury" -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "Historie zásob vstupu bude odstraněna po zadaném počtu dní" +#: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "Záznamy inventur budou odstraněny po zadaném počtu dní" -#: common/setting/system.py:1123 +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "Odstranit staré záznamy sledování zásob" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "Odstranit staré záznamy sledování zásob starší než zadaný počet dní" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "Interval odstranění sledování zásob" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "Záznamy sledování zásob budou odstraněny po zadaném počtu dní" + +#: common/setting/system.py:1167 msgid "Display Users full names" msgstr "Zobrazit celá jména uživatelů" -#: common/setting/system.py:1124 +#: common/setting/system.py:1168 msgid "Display Users full names instead of usernames" msgstr "Zobrazit plná jména uživatelů namísto uživatelských jmen" -#: common/setting/system.py:1129 +#: common/setting/system.py:1173 msgid "Display User Profiles" msgstr "Zobrazit uživatelské profily" -#: common/setting/system.py:1130 +#: common/setting/system.py:1174 msgid "Display Users Profiles on their profile page" msgstr "Zobrazit profily uživatelů na jejich profilové stránce" -#: common/setting/system.py:1135 +#: common/setting/system.py:1179 msgid "Enable Test Station Data" msgstr "Povolit data zkušební stanice" -#: common/setting/system.py:1136 +#: common/setting/system.py:1180 msgid "Enable test station data collection for test results" msgstr "Povolit sběr dat ze zkušební stanice pro výsledky testů" -#: common/setting/system.py:1141 +#: common/setting/system.py:1185 msgid "Enable Machine Ping" msgstr "Povolit ping stroje" -#: common/setting/system.py:1143 +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Povolit pravidelný úkol pingu registrovaných strojů pro kontrolu jejich stavu" @@ -3596,11 +3641,11 @@ msgstr "Zobrazit reporty PDF v prohlížeči namísto stahování jako soubor" #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "Skener čárových kódů v polích formuláře" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "Povolit zadávání čárového kódu v polích formuláře" #: common/setting/user.py:51 msgid "Search Parts" @@ -3911,366 +3956,370 @@ msgstr "Díl je aktivní" msgid "Manufacturer is Active" msgstr "Výrobce je aktivní" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "Díl dodavatele je aktivní" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "Primární díl dodavatele" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "Interní díl je aktivní" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "Dodavatel je aktivní" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Výrobce" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Společnost" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "Má zásoby" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Společnosti" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Popis společnosti" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Popis společnosti" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Webová stránka" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "Webové stránky společnosti" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Telefonní číslo" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Kontaktní telefonní číslo" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontaktní e-mailová adresa" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakt" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Kontaktní místo" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Odkaz na externí informace o společnosti" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "Je tato společnost aktivní?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "Je zákazník" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Prodáváte zboží této společnosti?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "Je dodavatel" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Zakupujete zboží od této společnosti?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Je výrobce" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Vyrábí tato společnost díly?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Výchozí měna používaná pro tuto společnost" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "DIČ" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "DIČ společnosti" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Adresa" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Adresy" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Vyberte společnost" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Název adresy" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Název popisující záznam adresy" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Primární adresa" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Nastavit jako primární adresu" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Řádek 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "1. řádek adresy" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Řádek 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "2. řádek adresy" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "PSČ" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Město/Region" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "PSČ město/region" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Stát/kraj" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Stát nebo provincie" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Země" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Adresovaná země" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Doručovací poznámky pro kurýra" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Poznámky pro kurýra" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Interní přepravní poznámky" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Doručovací poznámky pro interní použití" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Odkaz na informace o adrese (externí)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Výrobce dílu" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Základní díl" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Zvolte díl" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Vyberte výrobce" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Číslo dílu výrobce" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL pro odkaz na díl externího výrobce" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Popis dílu výrobce" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Jednotky balení musí být kompatibilní s jednotkami základních dílů" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Jednotky balení musí být větší než nula" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Odkazovaný díl výrobce musí odkazovat na stejný základní díl" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Dodavatel" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Vyberte dodavatele" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Skladová evidence dodavatele" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Je tento díl dodavatele aktivní?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "Primární" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "Je tento primární díl dodavatele připojen k dílu?" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Vyberte díl výrobce" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "Adresa URL pro odkaz na externí díl dodavatele" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Popis dílu dodavatele" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "základní cena" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimální poplatek (např. poplatek za skladování)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Balení" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Balení dílu" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Počet kusů v balení" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Celkové množství dodávané v jednom balení. Pro jednotlivé položky ponechte prázdné." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "více" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Objednat více" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Množství dostupné od dodavatele" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Dostupnost aktualizována" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Datum poslední aktualizace údajů o dostupnosti" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Cenová sleva dodavatele" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "Hlavní adresa" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "Vrátí reprezentaci řetězce pro primární adresu. Tato vlastnost existuje pro zpětnou kompatibilitu." - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Výchozí měna používaná pro tohoto dodavatele" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Jméno společnosti" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "Skladem" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "Množstevní sleva" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Při exportu dat došlo k chybě" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "Plugin pro export dat vrátil nesprávný formát dat" @@ -4318,119 +4367,119 @@ msgstr "Umístěno" msgid "Invalid status code" msgstr "Neplatný kód statusu" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Datový soubor" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "Datový soubor k importu" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Sloupce" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "Cílový typ modelu pro tuto relaci importu" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "Stav importu" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Výchozí Hodnoty" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "Přepsání Pole" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Filtry pole" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "Aktualizovat existující záznamy" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "Pokud je povoleno, existující záznamy budou aktualizovány s novými daty" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "Některá povinná pole nebyla namapována" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "ID" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "Existující databázový identifikátor pro tento záznam" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "Sloupec je již napamován k poli databáze" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "Pole je již namapováno do datového sloupce" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "Mapování sloupců musí být připojeno k platné relaci importu" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "Sloupec neexistuje v datovém souboru" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "Pole neexistuje v cílovém modelu" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "Vybrané pole je pouze pro čtení" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Importovací relace" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Pole" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Sloupec" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Index řádku" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "Původní data řádku" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Chyby" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Platné" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "ID je vyžadováno pro aktualizaci existujících záznamů." -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Žádný záznam nalezen pro zadané ID" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Poskytnut neplatný formát ID" @@ -4530,7 +4579,7 @@ msgstr "Počet kopií, které se mají tisknout pro každý štítek" msgid "Connected" msgstr "Připojeno" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Neznámý" @@ -4658,105 +4707,117 @@ msgstr "Maximální pokrok" msgid "Maximum value for progress type, required if type=progress" msgstr "Maximální hodnota pro pokrok typu, vyžadováno pokud typ=pokrok" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Označení objednávky" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "Vynikající" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "Má projektový kód" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Vytvořil(a)" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "Vytvořeno před" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Vytvořeno po" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "Má počáteční datum" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "Datum začátku před" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "Datum začátku po" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "Má cílové datum" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "Cílové datum před" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "Cílové datum po" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "Aktualizováno před" + +#: order/api.py:233 +msgid "Updated After" +msgstr "Aktualizováno po" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Má cenu" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "Dokončeno před" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "Dokončeno po" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "Externí výrobní příkaz" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Objednávka" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "Objednávka byla dokončena" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Interní díl" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Objednávka čeká na vyřízení" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Dokončeno" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "Má zásilku" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Nákupní objednávka" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Nákupní objednávka" msgid "Sales Order" msgstr "Prodejní objednávka" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Celková cena" msgid "Total price for this order" msgstr "Celková cena za tuto objednávku" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Měna objednávky" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Měna pro tuto objednávku (nechte prázdné pro použití výchozí hodnoty společnosti)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "Tato objednávka je uzamčena a nelze ji upravit" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Kontakt nesouhlasí s vybranou společností" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Datum zahájení musí být před cílovým datem" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "Adresa nesouhlasí s vybranou společností" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Popis objednávky (volitelné)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Vyberte kód projektu pro tuto objednávku" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Odkaz na externí stránku" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "Datum zahájení" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Plánované datum zahájení této objednávky" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Cílené datum" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Očekávané datum doručení objednávky. Objednávka bude po tomto datu splatná." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Datum vystavení" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Datum vystavení objednávky" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "Aktualizováno v" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Uživatel nebo skupina odpovědná za tuto objednávku" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Kontaktní bod pro tuto objednávku" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Adresa společnosti pro tuto objednávku" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Číslo objednávky" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Stav" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Stav objednávky" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Společnost, od které se položky objednávají" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Reference dodavatele" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Referenční kód objednávky dodavatele" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "přijal" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Datum dokončení objednávky" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Místo určení" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "Cílové místo pro přijaté položky" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Dodavatel dílu se musí shodovat s dodavatelem PO" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Řádková položka neodpovídá nákupní objednávce" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Řádkové položce chybí propojený díl" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Množství musí být kladné" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Zákazník" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Společnost, jíž se položky prodávají" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "Stav prodejní objednávky" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Reference zákazníka " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Referenční kód objednávky zákazníka" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Datum odeslání" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "odesláno společností" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "Objednávka je již dokončena" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "Objednávka je již zrušena" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Pouze otevřená objednávka může být označena jako kompletní" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Objednávku nelze dokončit, protože dodávky jsou nekompletní" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Objednávka nemůže být dokončena, protože jsou neúplné přiřazení" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "Objednávka nemůže být dokončena, protože jsou neúplné řádkové položky" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "Objednávka je uzamčena a nelze ji upravit" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Množství položky" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Označení řádkové položky" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Poznámky k řádkovým položkám" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Cílové datum pro tuto řádkovou položku (pro použití cílového data z objednávky ponechte prázdné)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Popis řádkové položky (nepovinné)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Dodatečný kontext pro tento řádek" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Cena za jednotku" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "Řádková položka nákupní objednávky" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "Dodavatelský díl musí odpovídat dodavateli" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "Objednávka sestavení musí být označená jako externí" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "Objednávka sestavení může být propojena pouze s montážními díly" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "Výrobní příkaz musí odpovídat lince předmětu dílu" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Díl dodavatele" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Doručeno" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Počet přijatých položek" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Nákupní cena" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Jednotková nákupní cena" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "Externí výrobní příkaz který má být splněn touto linkovou položkou" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "Nákupní příkaz extra linka" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "Řádková položka prodejní objednávky" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "K prodejní objednávce lze přiřadit pouze prodejné díly" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Prodejní cena" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Jednotková prodejní cena" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Odesláno" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Odeslané množství" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "Zásilka prodejní objednávky" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "Adresa zásilky musí odpovídat adrese zákazníka" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "Dodací adresa pro tuto zásilku" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Datum odeslání" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Datum doručení" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Datum doručení zásilky" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Kontroloval(a)" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Uživatel, který zkontroloval tuto zásilku" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Doprava" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Číslo zásilky" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Sledovací číslo" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Informace o sledování zásilky" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Číslo faktury" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Referenční číslo přiřazené faktury" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "Zásilka již byla odeslána" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "Zásilka nemá žádné přidělené skladové položky" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "Zásilka musí být zkontrolována než může být dokončená" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "Prodejní příkaz extra linka" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "Přidělení prodejní objednávky" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "Skladová položka nebyla přiřazena" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "Nelze přidělit skladovou položku na řádek s jiným dílem" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "Nelze přidělit skladovou položku na řádek bez dílu" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Přidělené množství nesmí překročit množství zásob" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Zabrané množství musí být větší než nula" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "Množství musí být 1 pro serializovanou skladovou položku" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "Prodejní objednávka neodpovídá zásilce" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Zásilka neodpovídá prodejní objednávce" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Řádek" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Odkaz na zásilku z prodejní objednávky" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Položka" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Vyberte skladovou položku pro přidělení" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Zadejte množství pro přidělení zásob" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Reference návratové objednávky" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Společnost, od které se vrací položky" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Stav návratové objednávky" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "Linkový předmět vratky" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "Zásobní položka musí být specifikována" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "Množství vratky přesahuje množstvní zásob" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "Množstvní vratky musí být více než nula" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "Neplatné množství pro sériovou skladovou položku" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Vyberte položku pro vrácení od zákazníka" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Datum přijetí" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "Datum přijetí této vrácené položky" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "Datum příjetí této vratky" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Výsledek" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Výsledky pro tuto položku" -#: order/models.py:3045 +#: order/models.py:3061 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:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "Vratka extra linka" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID objednávky" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID objednávky k duplikaci" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Kopírovat řádky" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Kopírovat řádkové položky z původní objednávky" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Kopírovat extra řádky" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Kopírovat extra řádkové položky z původní objednávky" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopírovat parametry" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "Kopírovat parametry objednávky z původní objednávky" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Řádkové položky" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Dokončené řádky" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Duplikovat objednávku" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Specifikujte možnosti pro duplikaci této objednávky" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Neplatné ID objednávky" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Název dodavatele" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "Objednávku nelze zrušit" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Povolit uzavření objednávky s neúplnými řádkovými položkami" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "Objednávka má nedokončené řádkové položky" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "Objednávka není otevřena" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "Automatická cena" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Automaticky vypočítat nákupní cenu na základě údajů o dílech dodavatele" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Měna nákupní ceny" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Sloučit položky" -#: order/serializers.py:731 +#: order/serializers.py:689 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:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "Číslo zboží (SKU)" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Interní číslo dílu" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "Interní název dílu" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "Musí být uveden díl dodavatele" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "Objednávka musí být zadána" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "Dodavatel musí odpovídat objednávce" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "Objednávka musí odpovídat dodavateli" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Řádková položka" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Vyberte cílové umístění pro přijaté položky" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Zadat kód šarže pro příchozí skladové položky" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Datum expirace" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "Zadejte datum expirace pro příchozí skladové položky" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Zadat sériová čísla pro příchozí skladové položky" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "Přepsat informace o obalu pro příchozí skladové položky" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "Dodatečná poznámka pro příchozí skladové položky" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Čárový kód" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Naskenovaný čárový kód" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Tento čárový kód se již používá" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Musí být uvedeny řádkové položky" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "Místo určení musí být specifikováno" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Hodnoty dodaných čárových kódů musí být unikátní" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "Zásilky" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Dokončené zásilky" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "Přidělené řádky" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Měna prodejní ceny" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "Přidělené položky" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Nebyly poskytnuty žádné údaje o zásilce" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "Řádková položka není přiřazena k této objednávce" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "Množství musí být kladné" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Zadejte sériová čísla pro přidělení" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "Zásilka již byla odeslána" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "Zásilka není spojena s touto objednávkou" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "Nebyla nalezena žádná shoda pro následující sériová čísla" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "Následující sériová čísla nejsou k dispozici" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Řádkový předmět vratky" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "Řádková položka neodpovídá vratce" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "Řádková položka již byla přijata" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "Položky lze přijímat pouze proti objednávkám, které probíhají" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "Množství k vrácení" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Měna ceny řádku" @@ -5532,1174 +5613,1226 @@ msgstr "Vrácení peněz" msgid "Reject" msgstr "Odmítnout" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Objednávka po splatnosti" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Nákupní objednávka {po} je nyní opožděná" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Opožděná prodejní objednávka" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Prodejní objednávka {so} je nyní opožděná" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Vratka po termínu vrácení" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "Vratka {ro} je nyní opožděná" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Označené" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Filtrovat podle kategorií s hvězdičkou" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Hloubka" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtrovat podle hloubky kategorie" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Nejvyšší úroveň" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtrovat podle nejvyšších kategorií" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Kaskáda" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Zahrnout podkategorie do filtrovaných výsledků" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Předek" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Filtrovat podle nadřazené kategorie" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Vyloučit podkategorie v zadané kategorii" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Má výsledky" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Je varianta" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Je revizí" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Má revize" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "Kusovník schválen" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "Kaskádové kategorie" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "Pokud je pravda, zahrne položky z podkategorií dané kategorie" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtrovat podle numerického ID kategorie nebo doslovného 'null'" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "Sestavený díl je aktivní" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "Sestavený díl je sledovatelný" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Sestavený díl je testovatelný" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "Kompotenta je aktivní" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "Komponenta je sledovatelná" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "Díl komponenty je testovatelný" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "Komponenta je část sestavy" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "Komponenta je virtuální" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "Má dostupné zásoby" + +#: part/api.py:1370 msgid "Uses" msgstr "Využití" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Kategorie dílu" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Kategorie dílů" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Výchozí umístění" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Výchozí umístění dílů v této kategorii" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Strukturální" -#: part/models.py:120 +#: part/models.py:119 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 strukturální kategorie, ale mohou být zařazeny do jejích podkategorií." -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Výchozí klíčová slova" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Výchozí klíčová slova pro díly v této kategorii" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Ikona" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikona (volitelná)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "Nemůžete tuto kategorii označit jako strukturální, protože má již přiřazené díly!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "Šablona parametru kategorie dílu" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Výchozí hodnota" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Výchozí hodnota parametru" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Díly" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "Nelze odstranit parametry zamčeného dílu" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "Nelze upravit parametry zamčeného dílu" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "Tento díl nelze smazat, protože je uzamčen" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "Tento díl nelze odstanit, protože je stále aktivní" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "Tento díl nelze odstranit, protože je použit v sestavě" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Díl '{self}' nelze použít v kusovníku '{parent}' (rekurzivní)" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Díl '{parent}' je využit v kusovníku '{self}' (rekurzivní)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN musí odpovídat regex vzoru {pattern}" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "Díl nemůže být revize same sebe" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "Nelze udělat revizi dílu, který už je revize" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "Kód revize musí být uveden" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "Revize jsou povoleny pouze pro sestavy" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "Nelze provést revizi šablony" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "Nadřazený díl musí odkazovat na stejnou šablonu" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Skladová položka s tímto sériovým číslem již existuje" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplicitní IPN není povoleno v nastavení dílu" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Duplicitní díl revize již existuje." -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Díl s tímto názvem, IPN a revizí již existuje." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Díly nemohou být přiřazeny do strukturálních kategorií!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Název dílu" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Je šablonou" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Je tento díl šablona?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Je tento díl varianta jiného dílu?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Varianta" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Popis dílu (nepovinné)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Klíčová slova" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Klíčová slova dílu pro zlepšení vyhledávání" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Kategorie dílu" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interní číslo dílu (IPN)" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Číslo revize nebo verze dílu" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Revize" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Je tento díl revizí jiného dílu?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "Revize" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Kde je tato položka obvykle skladněna?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Výchozí dodavatel" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Výchozí díl dodavatele" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Výchozí expirace" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Expirační čas (ve dnech) pro zásoby tohoto dílu" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimální zásoby na skladě" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Minimální povolená úroveň zásob" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Měrné jednotky pro tento díl" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Lze tento díl sestavit z jiných dílů?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "Lze tento díl použít k sestavení jiných dílů?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "Lze u tohoto dílu sledovat jednotlivé položky?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "Může mít tento díl zaznamenány výsledky testu?" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "Může být tento díl zakoupen od externích dodavatelů?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "Lze tento díl prodávat zákazníkům?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Je tento díl aktivní?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "Uzamčené díly nelze upravit" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "Je to virtuální díl, například softwarový produkt nebo licence?" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "Kusovník ověřen" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "Je kusovník pro tuto část platný?" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Kontrolní součet kusovníku" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Uložený kontrolní součet kusovníku" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "Kusovník zkontroloval" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "Datum kontroly kusovníku" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Vytváření uživatele" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Vlastník odpovědný za tento díl" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Prodat více" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Měna použitá pro výpočet cen v mezipaměti" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Minimální cena kusovníku" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Minimální cena komponent dílu" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Maximální cena kusovníku" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Maximální cena komponent dílu" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Minimální nákupní cena" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Minimální historická nákupní cena" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Maximální nákupní cena" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Maximální historická nákupní cena" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Minimální interní cena" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Minimální cena závislá na množstevní slevě" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Maximální interní cena" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Maximální cena závislá na množstevní slevě" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Minimální cena dodavatele" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Minimální cena dílu od externích dodavatelů" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Maximální cena dodavatele" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Maximální cena dílu od externích dodavatelů" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Minimální cena variant" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Vypočítané minimální náklady na varianty dílů" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Maximální cena variant" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Vypočítané maximální náklady na varianty dílů" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Minimální cena" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Přepsat minimální náklady" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Maximální cena" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Přepsat maximální náklady" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Vypočítané minimální celkové náklady" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Vypočítané maximální celkové náklady" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Minimální prodejní cena" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Minimální prodejní cena na základě cenových zvýhodnění" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Maximální prodejní cena" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Maximální prodejní cena na základě cenových zvýhodnění" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Minimální prodejní cena" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Minimální historická prodejní cena" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Maximální prodejní cena" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Maximální historická prodejní cena" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Díl na inventuru" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Počet položek" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "Počet jednotlivých položek zásob v době inventury" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "Celkové dostupné zásoby v době inventury" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Datum" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Datum provedení inventury" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Minimální cena zásob" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Odhadovaná minimální cena zásob k dispozici" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Maximální cena zásob" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "Odhadovaná maximální cena zásob k dispozici" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "Částeční sleva v ceně" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "Šablona testu položky" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Neplatný název šablony - musí obsahovat alespoň jeden alfanumerický znak" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Zkušební šablony lze vytvořit pouze pro testovatelné části" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "Testovací šablona se stejným klíčem již existuje pro díl" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Název testu" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Zadejte název testu" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "Testovací klíč" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "Zjednodušený klíč pro testování" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Popis testu" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Zadejte popis pro tento test" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "Je tento test povolen?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Požadováno" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Je tato zkouška vyžadována k projití?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Požadovaná hodnota" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "Vyžaduje tato zkouška hodnotu při výpočtu výsledku zkoušky?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Vyžaduje přílohu" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "Vyžaduje tato zkouška soubor při přidání výsledku testu?" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "Platné volby pro tento test (oddělené čárkami)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "Položku kusovníku nelze změnit - sestava je uzamčena" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Položku kusovníku nelze změnit - varianta montáže je uzamčena" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Vyberte nadřazený díl" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Poddílec" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Vyberte díl které bude použit v kusovníku" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "Kusovníkové množství pro tuto kusovníkovou položku" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Tato položka kusovníku je nepovinná" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Tento předmět kusovníku je spotřebovatelný (není sledován v objednávkách stavby)" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "Nastavit množství" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Dodatečné množství potřebné pro sestavení k vyúčtování ztráty nastavení" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "Přirozené ztráty" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Odhadované přirozené ztráty pro stavbu, vyjádřeno v procentech (0-100)" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "Zaokrouhlení více" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Zaokrouhlit požadované množství produkce na nejbližší násobek této hodnoty" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Reference položky kusovníku" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Poznámky k položce kusovníku" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Kontrolní součet" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "Kontrolní součet řádku kusovníku" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Schváleno" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Tato položka kusovníku ještě nebyla schválena" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Se zdědí" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Tento kusovník se zdědí kusovníky pro varianty dílů" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Skladové položky pro varianty dílu lze použít pro tuto položku kusovníku" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Množství musí být celé číslo pro sledovatelné díly" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Poddíl musí být specifikován" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "Náhradní položka kusovníku" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "Náhradní díl nemůže být stejný jako hlavní díl" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Nadřazená položka kusovníku" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Náhradní díl" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Díl 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Díl 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Vyberte související díl" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "Poznámka pro tento vztah" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "Část vztahu nemůže být vytvořena mezi dílem samotným" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "Duplicitní vztah již existuje" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Nadřazená kategorie" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Nadřazená kategorie dílu" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "Výsledky" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Počet výsledků zaznamenaných podle této šablony" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Nákupní měna této skladové položky" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Soubor není obrázek" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Původní díl" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Vyberte původní díl, který má být duplikován" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopírovat obrázek" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Kopírovat obrázek z původního dílu" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Kopírovat kusovník" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Kopírovat kusovník z původního dílu" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Kopírovat parametry" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Kopírovat data parametrů z původního dílu" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Kopírovat poznámky" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Kopírovat poznámky z původního dílu" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Kopírovat testy" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Kopírovat testovací šablony z původního dílu" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Počáteční skladové množství" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Zadejte počáteční skladové množství pro tuto část. Pokud je množství nulové, není přidáno žádné." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Počáteční skladové místo" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Zadejte počáteční skladové místo pro tento díl" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Vyberte dodavatele (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Vyberte výrobce (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Číslo dílu výrobce" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Vybraná společnost není platný dodavatel" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Vybraná společnost není platný výrobce" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Výrobce dílu se stejným MPN již existuje" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Dodavatelský díl s tímto SKU již existuje" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Název kategorie" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Budova" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Množství tohoto dílu, které je v současné době ve výrobě" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Zbývající množství tohoto dílu, které má být postaveno" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Skladové položky" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "Revize" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Dodavatelé" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Celkem skladem" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Nezařazené zásoby" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Skladové varianty" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Duplikovat díl" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Kopírovat počáteční data z jiného dílu" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Počáteční zásoby" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Vytvořit díl s počátečním množstvím zásob" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Informace o dodavateli" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Přidat počáteční informace dodavatele pro tento díl" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kopírovat parametry kategorie" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Kopírovat šablony parametrů z vybrané kategorie dilu" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Stávající obrázek" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Název souboru existujícího obrázku dílu" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Obrázek neexistuje" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Schválit celý kusovník" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Lze postavit" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Vyžadováno pro výrobní objednávku" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Přířazeno výrobním objednávkám" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Vyžadováno pro prodejní objednávky" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Přiřazeno prodejním objednávkám" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "IPN dílu" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "Popis dílu" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "Vyberte díl u kterého chce vytvořit informace inventury (i pro jeho varianty)" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "Vyberte kategorii pro obsažení všech dílů v dané kategorii (a podkategoriích)" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "Vyberte lokaci pro obsažení všech dílů se zásobami na dané lokaci (včetně pod-lokací)" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "Generovat vstupy inventury" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "Uložit vstupy inventury pro vybrané díly" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "Generovat report" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "Generovat report inventury pro vybrané díly" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minimální cena" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Přespat vypočítanou hodnotu pro minimální cenu" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Měna minimální ceny" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Maximální cena" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Přespat vypočítanou hodnotu pro maximální cenu" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Měna maximální ceny" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Aktualizovat" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Aktualizovat cenu pro díl" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nelze převést z poskytnutých měn na {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Minimální cena musí být vyšší než maximální cena" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Maximální cena nesmí být nížší než minimální cena" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "Množství musí být větší nebo rovno nule" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Vybrat nadřazenou sestavu" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Vyberte komponentu dílu" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Vyberte díl pro kopírování kusovníku z" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Odstranit existující data" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Odstranit existující položky kusovníku před kopírováním" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Zahrnout zděděné" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Zahrnout položky kusovníku které jsou zdědené z šablonových dílů" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Přeskočit neplatné řádky" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Povolte tuto možnost pro přeskočení neplatných řádků" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Kopírovat náhradní díly" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopírovat náhradní díly při duplikaci položek kusovníku" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Oznámení o nízkých zásobách" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Dostupné zásoby pro {part.name} klesly pod nastavenou minimální úroveň" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Oznámení o zastaralých zásobách" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "Máte 1 skladovou položku blížící se k datu expirace" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "Máte skladem {item_count} položek, jejichž data expirace se blíží" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Bez data expirace" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "Expirovalo před {abs(days_diff)} dny" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Expiruje dnes" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} dní" @@ -6732,108 +6865,108 @@ msgstr "Činnost nebyla specifikována" msgid "No matching action found" msgstr "Nebyla nalezena odpovídající činnost" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Pro data čárového kódu nebyla nalezena shoda" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Pro data čárového kódu byla nalezena shoda" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "Model není podporován" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "Instance modelu nebyla nalezena" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Čárový kód odpovídá existující položce" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "Žádné odpovídající data nebyla nalezena" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "Žádné odpovídající díly dodavatelů nebyly nalezeny" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "Vícero odpovídajících dílů dodavatelů bylo nalezeno" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "Žádný odpovídající plugin pro čárové kódy nebyl nalezen" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Odpovídající díl dodavatele" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "Položka již byla obdržena" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "Žádný plugin neodpovídá čárový kód dodavatele" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "Vícero odpovídajících řádkových položek bylo nalezeno" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "Žádná odpovídající řádková položka nebyla nalezena" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "Žádná prodejní objednávka nebyla poskytnuta" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "Čárový kód neodpovídá žádné existující skladové položce" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "Skladová položka se neshoduje s řádkovou položkou" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Nedostatečný počet zásob" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "Skladová položka byla přidělena prodejní objednávce" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Nedostatek informací" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "Nalezena odpovídající položka" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "Dodavatelská položka se neshoduje s řádkovou položkou" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "Řádková položka je již dokončena" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "Další informace potřebné k přijetí položky" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Obdržené položky objednávky" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "Nepodařilo se přijmout řádkovou položku" @@ -6972,7 +7105,7 @@ msgstr "Poskytuje nativní podporu pro čárové kódy" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "Zadat zpětnou objednávku" msgid "Automatically issue orders that are backdated" msgstr "Automaticky zadávat objednávky které jsou zadany zpětně" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "Úrovně" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "Počet úrovní pro export - dejte nula pro exportování všech BOM úrovní" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "Celkové množství" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "Zahrnout celkové množství každé části kusovníku" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "Skladová data" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "Zahrnout údaje o zásobách" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "Cenová data" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "Zahrnout cenová data" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "Dodavatelská data" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "Zahrnout dodavatelská data" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "Data výrobce" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "Zahrnout data výrobce" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "Náhradní data" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "Zahrnout náhradní data" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "Data parametru" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "Zahrnout data paramentru" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "Exportér více-úrovňových kusovníků" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "Poskytuje podoru pro exportování více úrovní kusovníků" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "Úroveň kusovníku" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "Náhrada {n}" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "Dodavatel {n}" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "SKU dodavatele {n}" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "MPN dodavatele {n}" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "Výrobce {n}" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "MPN výrobce {n}" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "Integrovaná metoda notifikace Slack" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "Slack příchozí webhook url" +msgid "Slack incoming webhook URL" +msgstr "URL příchozího Slack Webhooku" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "InvenTree tiskárna strojových štítků" msgid "Provides support for printing using a machine" msgstr "Poskytuje podporu pro tisk pomocí stroje" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "naposledy použito" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "Možnosti" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Klíč pluginu" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "Název pluginu" +msgid "Name of the plugin" +msgstr "Název Pluginu" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "Balíčkový plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Nebyl nalezen žádný autor" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Plugin '{p}' není kompatibilní s aktuální verzí InvenTree {v}" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Plugin vyžaduje alespoň verzi {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Plugin vyžaduje nanejvýš verzi {v}" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "Instalace nebyla potvrzena" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "Musí být uveden název balíčku nebo URL" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "Celkem" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Sériové číslo" @@ -8097,7 +8230,7 @@ msgstr "Report o testu skladové položky" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Instalované položky" @@ -8130,495 +8263,519 @@ msgstr "Žádný výsledek (povinný)" msgid "No result" msgstr "Žádný výsledek" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Soubor aktiva neexistuje" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "Soubor obrázku nebyl nalezen" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "part_image tag vyžaduje instanci dílu" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "company_image tag vyžaduje intanci společnosti" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Filtrovat dle hloubky lokace" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Filtrovat dle nejvyšší lokace" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Zahrnout pod-lokace ve filtrovaných výsledcích" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "Nadřazená místo" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtrovat podle nadřazené lokace" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Název dílu (citlivost písmen na malá a velká písmena)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Název dílu obsahuje (citlivost písmen na malá a velká písmena)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Název dílu (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "IPN dílu (citlivost písmen na malá a velká písmena)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "IPN dílu obsahuje (citlivost písmen na malá a velká písmena)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "IPN dílu (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Minimální zásoby" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Maximální zásoby" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Kód stavu" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Externí umístění" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Spotřebováno výrobním příkazem" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Nainstalováno v jiné skladové položce" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Strom dílů" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Aktualizováno před" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Aktualizováno po" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Inventura před" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Inventura po" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Datum expirace ped" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Datum expirace po" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Zastaralé" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Zadejte PK skladové položky, abyste vyloučili danou položku a všechny její potomky" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "Umístění kaskády" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "Pokud je pravda, uveďte předměty v podružených místech dané lokace" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Filtrovat podle numberické ID lokace nebo doslovného 'null'" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Množství je povinné" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Platný díl musí být dodán" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Daný dodavatelský díl neexistuje" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Dodavatelský díl na nastavenou velikost balení, ale znak use_pack_size není nastaven" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Sériové čísla nemohou být zadána pro díl bez sledovanosti" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "Zahrnout nainstalované" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "Pokud je pravda, zahrne výslekdy testů pro předměty nainstalované pod danou skladovou položku" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "Filtrovat podle číselného ID položky skladu" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "Skladová položka s ID {id} neexistuje" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "Zahrnout varianty" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "Datum po" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "Datum před" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "Typ skladového umístění" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "Typy skladových umístění" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "Výchozí ikona pro všechny lokace které nemají ikonu nastavenou (volitelné)" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Skladové umístění" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Skladová umístění" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Správce" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Vybrat vlastníka" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Skladové položky nelze umístit přímo do strukturálních skladových umístění, ale lze je umístit do podřízených skladových umístění." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Externí" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Toto je externí skladové umístění" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Typ umístění" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "Typ tohoto skladového umístění" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Toto skladové umístění nemůžete označit jako strukturální, protože již obsahuje skladové položky!" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "{field} neexistuje" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Díl musí být zadán" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Skladové položky nelze umístit do strukturálních skladových umístění!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "Nelze vytvořit skladovou položku pro virtuální díl" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Typ dílu ('{self.supplier_part.part}') musí být {self.part}" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Množství musí být 1 pro položku se sériovým číslem" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Sériové číslo nemůže být nastaveno, když množství je více než 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Položka nemůže patřit sama sobě" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Předmět musí mít stavební referenci pokud is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Stavební reference neukazuje na stejný objekt dílu" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Nadřazená skladová položka" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Základní díl" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Vyberte odpovídající díl dodavatele pro tuto skladovou položku" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Kde se tato skladová položka nachází?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "Balení, ve kterém je tato skladová položka uložena" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Instalováno v" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Je tato položka nainstalována v jiné položce?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Sériové číslo pro tuto položku" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Kód šarže pro tuto skladovou položku" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Mnižství" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Zdrojová sestavení" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Postavit pro tuto skladovou položku" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Použito v" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Výrobní příkaz, který spotřeboval tuto skladovou položku" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Zdrojová nákupní objednávka" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Nákupní objednávka pro tuto skladovou položku" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Cílová prodejní objednávka" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Datum expirace pro skladovou položku. Po tomto datu bude položka brána jako expirovaná" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Odstranit po vyčerpání" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Odstranit tuto skladovou položku po vyčerpání zásob" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Jednotková kupní cena v okamžiku nákupu" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Převedeno na díl" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "Množství přesahuje dostupné zásoby" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Díl není nastaven jako sledovatelný" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Množstvní musí být celé číslo" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Množství nesmí překročit dostupné množství zásob ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Sériové čísla musí být poskytnuta jako seznam" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Množství neodpovídá sériovým číslům" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "Nelze přiřadit zásoby ke strukturálnímu umístění" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Testovací šablona neexistuje" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Skladová položka byla přidělena prodejní objednávce" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Skladová položka je nainstalována v jiné položce" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Skladová položka obsahuje jiné položky" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Skladová položka byla přidělena zákazníkovi" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Skladová položka je ve výrobě" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Serializované zásoby nelze sloučit" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Duplicitní skladové položky" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Skladové položky musí odkazovat na stejný díl" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Skladové položky musí odkazovat na stejný díl dodavatele" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Kódy stavu zásob se musí shodovat" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Zásobová položka nemůže být přesunuta, protože není skladem" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Sledování skladových položek" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Poznámky k záznamu" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Výsledek testu skladové položky" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Pro tuto zkoušku musí být uvedena hodnota" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Pro tento test musí být nahrána příloha" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Neplatná hodnota pro tento test" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Výsledek testu" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Výstupní hodnota testu" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Příloha výsledků testu" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Poznámky testu" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "Testovací stanice" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "Identifikátor testovací stanice kde byl test proveden" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "Začátek" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Čas začátku testu" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "Ukončeno" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Čas dokončení testu" @@ -8662,246 +8819,246 @@ msgstr "Vyberte díl, pro který se má vygenerovat sériové číslo" msgid "Quantity of serial numbers to generate" msgstr "Množství sériových čísel k vygenerování" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "Testovací šablona pro tento výsledek" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "Pro tento díl nebyl nalezen žádný odpovídající test" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "ID šablony nebo název testu musí být uveden" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "Čas ukončení testu nesmí být dřívější než čas zahájení testu" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Nadřazená položka" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "Nadřazená skladová položka" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Použít velikost balení při přidání: definované množství je počet v balení" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "Použít velikost balení" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Zadejte sériová čísla pro nové položky" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Číslo dílu dodavatele" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Expirováno" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Podřízené položky" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "Sledování položky" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "Nákupní cena této skladové položky za jednotku nebo balení" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Zadejte počet skladových položek k serializaci" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "Nebyla poskytnuta žádná skladová položka" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Množství nesmí překročit dostupné skladové množství ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Cílové skladové umístění" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "K tomuto dílu nelze přiřadit sériová čísla" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Sériová čísla již existují" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Vyberte skladovou položku k instalaci" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "Množství k instalaci" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "Zadejte množství položek k instalaci" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Přidat poznámku o transakci (volitelné)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "Množství k instalaci musí být alespoň 1" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "Skladová položka je nedostupná" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "Vybraný díl není v kusovníku" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "Množství k instalaci nesmí překročit dostupné množství" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Cílové umístění pro odinstalovanou položku" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "Vyberte díl pro převedení do skladové položky" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "Vybraný díl není platnou volbou pro převod" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Nelze převést skladovou položku s přiřazeným dílem dodavetele" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "Stavový kód skladové položky" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "Vybrat skladové položky pro změnu stavu" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "Nejsou vybrány žádné skladové položky" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Podumístění" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "Nadřazené skladové umístění" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "Díl musí být prodejný" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "Položka je přidělena prodejní objednávce" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "Položka je přidělena výrobnímu příkazu" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Zákazník, kterému mají být přiděleny skladové položky" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "Vybraná společnost není zákazník" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Poznámky ke skladové položce" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "Musí být poskytnut seznam skladových položek" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Poznámky ke sloučení skladových položek" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Povolit neodpovídající dodavatele" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "Povolit sloučení skladových položek s různými díly dodavatele" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Povolit neodpovídající stav" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "Povolit sloučení skladových položek s různými stavovými kódy" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Musí být poskytnuty alespoň dvě skladové položky" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Beze změny" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Hodnota primárního klíče skladové položky" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "Skladová položka není skladem" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "Skladová položka je již na skladě" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "Množství nesmí být záporné" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Poznámky ke skladovací transakci" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "Sloučit do existující zásoby" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "Sloučit vrácené položky do existujích položek, pokud je to možné" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "Další sériové číslo" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "Předchozí sériové číslo" @@ -9383,83 +9540,83 @@ msgstr "Prodejní objednávky" msgid "Return Orders" msgstr "Návratové objednávky" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Uživatelské jméno" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Křestní jméno" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Křestní jméno uživatele" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Příjmení" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Příjmení uživatele" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Emailová adresa uživatele" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Personál" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Má tento uživatel oprávnění personálu" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Super-uživatel" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Je tento uživatel superuživatel" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Je tento uživatelský účet aktivní" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "Pouze superuživatel může toto pole upravit" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "Heslo" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "Heslo uživatele" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "Přepsat varování" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "Přepsat varování o pravidlech pro heslo" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "Nemáte oprávnění k vytváření uživatelů" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Váš účet byl vytvořen." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Pro přihlášení použijte funkci obnovení hesla" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Vítejte v InvenTree" diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po index a0cdf6435b..f9ab53884a 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API endpoint ikke fundet" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" -msgstr "" +msgstr "Elementer skal angives som en liste" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" +#: InvenTree/api.py:458 +msgid "All filter must only be used with true" +msgstr "Alle filtre må kun bruges med sand" #: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 -msgid "All filter must only be used with true" -msgstr "" - -#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" -msgstr "" +msgstr "Ingen data angivet" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "Dette felt skal være unikt." -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Bruger har ikke tilladelse til at se denne model" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "E-mail (igen)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Bekræftelse af e-mailadresse" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Du skal indtaste den samme e-mail hver gang." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Den indtastede email adresse er ikke gyldig." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Det angivne e-mail domæne er ikke godkendt." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Kunne ikke konvertere {original} til {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Ugyldigt antal angivet" @@ -110,15 +102,15 @@ msgstr "Angiv dato" #: InvenTree/fields.py:169 msgid "Invalid decimal value" -msgstr "" +msgstr "Ugyldig decimalværdi" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Bemærkninger" @@ -131,87 +123,87 @@ msgstr "Værdi '{name}' vises ikke i mønsterformat" msgid "Provided value does not match required pattern: " msgstr "Den angivne værdi matcher ikke det påkrævede mønster: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" -msgstr "" +msgstr "Kan ikke serialisere mere end 1000 elementer på én gang" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Serienummer streng er tom" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplikeret serienummer" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" -msgstr "" +msgstr "Ugyldig gruppe: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Ingen serienumre fundet" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" -msgstr "" +msgstr "Antal unikke serienumre ({n}) skal matche antal ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Fjern HTML-tags fra denne værdi" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" -msgstr "" +msgstr "Data indeholder forbudt markdown indhold" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Forbindelsesfejl" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Serveren svarede med ugyldig statuskode" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Der opstod en fejl" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarede med ugyldig Content-Length værdi" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Billedstørrelsen er for stor" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Billeddownload overskred maksimumstørrelsen" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Fjernserver returnerede tomt svar" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Angivet URL er ikke en gyldig billedfil" #: InvenTree/magic_login.py:31 msgid "Log in to the app" -msgstr "" +msgstr "Log ind på appen" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,139 +247,130 @@ msgstr "Reference skal matche det påkrævede mønster" msgid "Reference number is too large" msgstr "Referencenummer er for stort" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Ugyldigt valg" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Beskrivelse" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Beskrivelse (valgfri)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Sti" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Markdown noter (valgfri)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Stregkode Data" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Tredjeparts stregkode data" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Stregkode Hash" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Unik hash af stregkode data" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Eksisterende stregkode fundet" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serverfejl" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "En fejl blev logget af serveren." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" -msgstr "" +msgstr "Billede" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Skal være et gyldigt tal" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Vælg valuta fra tilgængelige muligheder" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "Dette felt kan ikke være tomt." -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Ugyldig værdi" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Eksternt billede" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL til ekstern billedfil" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Download af billeder fra ekstern URL er ikke aktiveret" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" #: InvenTree/setting/locales.py:20 msgid "Arabic" -msgstr "" +msgstr "Arabisk" #: InvenTree/setting/locales.py:21 msgid "Bulgarian" @@ -423,7 +406,7 @@ msgstr "Spansk (Mexikansk)" #: InvenTree/setting/locales.py:29 msgid "Estonian" -msgstr "" +msgstr "Estisk" #: InvenTree/setting/locales.py:30 msgid "Farsi / Persian" @@ -443,7 +426,7 @@ msgstr "Hebraisk" #: InvenTree/setting/locales.py:34 msgid "Hindi" -msgstr "" +msgstr "Hindi" #: InvenTree/setting/locales.py:35 msgid "Hungarian" @@ -463,11 +446,11 @@ msgstr "Koreansk" #: InvenTree/setting/locales.py:39 msgid "Lithuanian" -msgstr "" +msgstr "Litauisk" #: InvenTree/setting/locales.py:40 msgid "Latvian" -msgstr "" +msgstr "Lettisk" #: InvenTree/setting/locales.py:41 msgid "Dutch" @@ -491,7 +474,7 @@ msgstr "Portugisisk (Brasilien)" #: InvenTree/setting/locales.py:46 msgid "Romanian" -msgstr "" +msgstr "Rumænsk" #: InvenTree/setting/locales.py:47 msgid "Russian" @@ -499,7 +482,7 @@ msgstr "Russisk" #: InvenTree/setting/locales.py:48 msgid "Slovak" -msgstr "" +msgstr "Slovakisk" #: InvenTree/setting/locales.py:49 msgid "Slovenian" @@ -523,7 +506,7 @@ msgstr "Tyrkisk" #: InvenTree/setting/locales.py:54 msgid "Ukrainian" -msgstr "" +msgstr "Ukrainsk" #: InvenTree/setting/locales.py:55 msgid "Vietnamese" @@ -537,13 +520,13 @@ msgstr "Kinesisk (forenklet)" msgid "Chinese (Traditional)" msgstr "Kinesisk (traditionelt)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" -msgstr "" +msgstr "Opdatering tilgængelig" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" -msgstr "" +msgstr "En opdatering til InvenTree er tilgængelig" #: InvenTree/validators.py:28 msgid "Invalid physical unit" @@ -553,30 +536,30 @@ msgstr "Ugyldig fysisk enhed" msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" -msgstr "" +msgstr "Ordre status" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Overordnet produktion" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,423 +579,432 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" -msgstr "" +msgstr "Kategori" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" -msgstr "" +msgstr "Tildelt til Mig" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" -msgstr "" +msgstr "Tildelt Til" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" -msgstr "" +msgstr "Oprettet før" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" -msgstr "" +msgstr "Oprettet efter" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" -msgstr "" +msgstr "Har startdato" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" -msgstr "" +msgstr "Start dato før" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" -msgstr "" +msgstr "Start dato efter" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Produktion skal anulleres, før den kan slettes" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Forbrugsvare" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Valgfri" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Sporet" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" -msgstr "" +msgstr "Ordre Udestående" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Allokeret" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tilgængelig" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Produktionsordre" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" -msgstr "" +msgstr "Lokation" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Produktionsordrer" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" -msgstr "" +msgstr "Monteringens stykliste er ikke blevet valideret" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" -msgstr "" +msgstr "Ansvarlig bruger eller gruppe skal specificeres" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Byggeordre enhed kan ikke ændres" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Produktionsordre reference" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 #: report/templates/report/inventree_sales_order_report.html:28 msgid "Reference" -msgstr "" +msgstr "Reference" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Produktionsordre som er tildelt denne produktion" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Vælg dele til produktion" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Salgsordrereference" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Salgsordre, som er tildelt denne produktion" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Kilde Lokation" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Vælg lokation for lager, som skal benyttes til denne produktion (lad feltet stå tomt for at benytte vilkårligt lager)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" -msgstr "" +msgstr "Ekstern Byg" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" -msgstr "" +msgstr "Denne byggeordre er gennemført eksternt" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Destinations Placering" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Vælg placering, hvor de færdige elementer vil blive gemt" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Produktions antal" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Antal lagervarer som skal produceres" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Afsluttede elementer" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Antal lagervarer som er færdiggjort" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Produktions Status" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Produktions statuskode" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Batch Kode" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Batch kode til dette produktions output" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Oprettelsesdato" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" -msgstr "" +msgstr "Planlagt startdato for denne byggeordre" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Projekteret afslutningsdato" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Dato for afslutning" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "udført af" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Udstedt af" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Bruger som udstedte denne byggeordre" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Bruger eller gruppe ansvarlig for denne byggeordre" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Ekstern link" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link til ekstern URL" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Bygge Prioritet" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioritet af denne byggeordre" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" -msgstr "" +msgstr "Projektkode" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" -msgstr "" +msgstr "Projektkode for denne byggeordre" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bygningsordre {build} er fuldført" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "En byggeordre er fuldført" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" -msgstr "" +msgstr "Antal" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" -msgstr "" +msgstr "Lagervarer" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" -msgstr "" +msgstr "Kilde lagervare" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" -msgstr "" +msgstr "Del Navn" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" -msgstr "" +msgstr "Serienummer" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" -msgstr "" +msgstr "Indtast serienumre for bygge output" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" -msgstr "" +msgstr "Automatisk alloker serienumre" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" -msgstr "" +msgstr "Følgende serienumre findes allerede eller er ugyldige" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Ikke tilladt" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Accepter som forbrugt af denne byggeordre" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Accepter Ikke tildelt" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accepter at lagervarer ikke er fuldt tildelt til denne byggeordre" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Accepter ufuldført" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Bygge linje" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" -msgstr "" +msgstr "Varen skal være på lager" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" -msgstr "" +msgstr "Tilgængeligt antal ({q}) overskredet" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" -msgstr "" +msgstr "Stykliste Reference" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" -msgstr "" +msgstr "Stykliste del ID" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" +msgstr "Stykliste Del Navn" + +#: build/serializers.py:1242 +msgid "Install Into" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" -msgstr "" +msgstr "Byg" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" -msgstr "" +msgstr "Leverandør Del" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" -msgstr "" +msgstr "Tildelt Antal" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" -msgstr "" +msgstr "Stykliste Del" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" -msgstr "" +msgstr "I Produktion" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" -msgstr "" +msgstr "Ekstern Lager" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" -msgstr "" +msgstr "Tilgængelig Lager" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1467,74 +1471,78 @@ msgstr "Produktion" #: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51 #: order/status_codes.py:81 msgid "On Hold" -msgstr "" +msgstr "På Hold" #: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53 #: order/status_codes.py:84 msgid "Cancelled" msgstr "Annulleret" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Fuldført" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" -msgstr "" +msgstr "Ingen plugin" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Projekt Kode Label" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" -msgstr "" +msgstr "Opdateret" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" -msgstr "" +msgstr "Unik projekt kode" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" -msgstr "" +msgstr "Projektbeskrivelse" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" -msgstr "" +msgstr "Værdien skal være en boolsk værdi" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" -msgstr "" +msgstr "Værdi skal være et heltalsværdi" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" -msgstr "" +msgstr "Skal være et gyldigt tal" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" -msgstr "" +msgstr "Værdien består ikke valideringskontrol" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" -msgstr "" +msgstr "Nøglestrengen skal være unik" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Bruger" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" -msgstr "" +msgstr "Pris" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" -msgstr "" +msgstr "Aktiv" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" -msgstr "" +msgstr "Token" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" -msgstr "" +msgstr "Token for adgang" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" -msgstr "" +msgstr "Hemmelighed" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" -msgstr "" +msgstr "Besked ID" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 -msgid "Host" -msgstr "" - -#: common/models.py:1563 -msgid "Host from which this message was received" -msgstr "" - -#: common/models.py:1571 -msgid "Header" -msgstr "" - -#: common/models.py:1572 -msgid "Header of this message" -msgstr "" - #: common/models.py:1579 +msgid "Host" +msgstr "Vært" + +#: common/models.py:1580 +msgid "Host from which this message was received" +msgstr "Vært, hvorfra denne meddelelse blev modtaget" + +#: common/models.py:1588 +msgid "Header" +msgstr "Overskrift" + +#: common/models.py:1589 +msgid "Header of this message" +msgstr "Overskrift for denne besked" + +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" -msgstr "" +msgstr "Id" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" -msgstr "" +msgstr "Titel" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" -msgstr "" +msgstr "Tilknytning" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" -msgstr "" +msgstr "Publiceret" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" -msgstr "" +msgstr "Forfatter" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" -msgstr "" +msgstr "Opsummering" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" -msgstr "" - -#: common/models.py:1735 -msgid "Was this news item read?" -msgstr "" +msgstr "Læs" #: common/models.py:1752 -msgid "Image file" -msgstr "" +msgid "Was this news item read?" +msgstr "Blev dette nyhedselement læst?" -#: common/models.py:1764 +#: common/models.py:1769 +msgid "Image file" +msgstr "Billedfil" + +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" -msgstr "" +msgstr "Symbol" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Vedhæftning" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Manglende fil" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Manglende eksternt link" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Vælg fil, der skal vedhæftes" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Kommentar" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" -msgstr "" +msgstr "Filstørrelse" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" -msgstr "" +msgstr "Filstørrelse i bytes" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" -msgstr "" +msgstr "Værdi" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" -msgstr "" +msgstr "Numerisk værdi, der vil blive gemt i modeldatabasen" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" -msgstr "" +msgstr "Label" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" -msgstr "" +msgstr "Farve" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" -msgstr "" +msgstr "Farve der vil blive vist på frontend" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" -msgstr "" +msgstr "Model" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" -msgstr "" +msgstr "Låst" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" -msgstr "" +msgstr "Parameter skabelon navn skal være unikt" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" -msgstr "" +msgstr "Stregkode Scan" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" -msgstr "" +msgstr "Stregkode data" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 -msgid "Sent" -msgstr "" - -#: common/models.py:3000 -msgid "Failed" -msgstr "" - -#: common/models.py:3003 -msgid "Delivered" -msgstr "" - -#: common/models.py:3011 -msgid "Confirmed" -msgstr "" - -#: common/models.py:3017 -msgid "Inbound" -msgstr "" - #: common/models.py:3018 +msgid "Sent" +msgstr "Sendt" + +#: common/models.py:3019 +msgid "Failed" +msgstr "Fejlede" + +#: common/models.py:3022 +msgid "Delivered" +msgstr "Leveret" + +#: common/models.py:3030 +msgid "Confirmed" +msgstr "Bekræftet" + +#: common/models.py:3036 +msgid "Inbound" +msgstr "Indkommende" + +#: common/models.py:3037 msgid "Outbound" -msgstr "" - -#: common/models.py:3023 -msgid "No Reply" -msgstr "" - -#: common/models.py:3024 -msgid "Track Delivery" -msgstr "" - -#: common/models.py:3025 -msgid "Track Read" -msgstr "" - -#: common/models.py:3026 -msgid "Track Click" -msgstr "" - -#: common/models.py:3029 common/models.py:3132 -msgid "Global ID" -msgstr "" +msgstr "Udgående" #: common/models.py:3042 +msgid "No Reply" +msgstr "Intet Svar" + +#: common/models.py:3043 +msgid "Track Delivery" +msgstr "Spor Levering" + +#: common/models.py:3044 +msgid "Track Read" +msgstr "Spor Læst" + +#: common/models.py:3045 +msgid "Track Click" +msgstr "Spor Klik" + +#: common/models.py:3048 common/models.py:3151 +msgid "Global ID" +msgstr "Global ID" + +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" -msgstr "" +msgstr "Identifikator for denne meddelelse (leveres muligvis af et eksternt system)" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" -msgstr "" +msgstr "Tråd ID" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" -msgstr "" +msgstr "E-mail Tråd" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" -msgstr "" +msgstr "E-mail Tråde" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" -msgstr "" +msgstr "Nøgle" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Filnavn" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" -msgstr "" +msgstr "Firmanavn" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" -msgstr "" +msgstr "Standardvaluta" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" -msgstr "" +msgstr "Liste over understøttede valutakoder" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" -msgstr "" +msgstr "Valuta Opdaterings Interval" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" -msgstr "" +msgstr "Maksimum tilladte downloadstørrelse for fjernbillede" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "Placeret" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Datafil" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Afsendt" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "Refusion" msgid "Reject" msgstr "Afvis" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7253,19 +7386,19 @@ msgstr "" #: plugin/builtin/integration/core_notifications.py:67 msgid "InvenTree Email Notifications" -msgstr "" +msgstr "InvenTree E-Mail Notifikationer" #: plugin/builtin/integration/core_notifications.py:70 msgid "Integrated email notification methods" -msgstr "" +msgstr "Integrerede E-mail notifikations metoder" #: plugin/builtin/integration/core_notifications.py:75 msgid "Allow email notifications" -msgstr "" +msgstr "Tillad E-mail notifikationer" #: plugin/builtin/integration/core_notifications.py:76 msgid "Allow email notifications to be sent to this user" -msgstr "" +msgstr "Tillad at E-mail notifikationer sendes til denne bruger" #: plugin/builtin/integration/core_notifications.py:123 msgid "InvenTree Slack Notifications" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" -msgstr "" +msgstr "Fornavn på brugeren" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" -msgstr "" +msgstr "Efternavn" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" -msgstr "" +msgstr "Efternavn på brugeren" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" -msgstr "" +msgstr "Email adresse på brugeren" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" -msgstr "" +msgstr "Personale" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" -msgstr "" +msgstr "Har denne bruger personale tilladelser" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" -msgstr "" +msgstr "Superbruger" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" -msgstr "" +msgstr "Er denne bruger en superbruger" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" -msgstr "" +msgstr "Er denne brugerkonto aktiv" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" -msgstr "" +msgstr "Kun en superbruger kan justere dette felt" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" -msgstr "" +msgstr "Adgangskode" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" -msgstr "" +msgstr "Brugers adgangskode" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" -msgstr "" +msgstr "Tilsidesæt advarsel" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" -msgstr "" +msgstr "Tilsidesæt advarslen om adgangskode regler" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" -msgstr "" +msgstr "Du har ikke tilladelse til at oprette brugere" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." -msgstr "" +msgstr "Din konto er oprettet." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" -msgstr "" +msgstr "Benyt funktionen til nulstilling af adgangskode til at logge ind" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" -msgstr "" +msgstr "Velkommen til InvenTree" diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po index c89044ca68..ce34f54156 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API-Endpunkt nicht gefunden" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" -msgstr "" +msgstr "Elemente müssen als Liste angegeben werden" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Ungültige Artikelliste angegeben" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Filter müssen als Dict gegeben sein" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Ungültige Filter angegeben" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Alle Filter dürfen nur mit true verwendet werden" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Keine Gegenstände erfüllen die vorgegebenen Kriterien" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Keine Daten verfügbar" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "Dieses Feld muss eindeutig sein." -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Benutzer hat keine Berechtigung, dieses Modell anzuzeigen" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "E-Mail (nochmal)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Bestätigung der E-Mail Adresse" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "E-Mail Adressen müssen übereinstimmen." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Die angegebene primäre E-Mail-Adresse ist ungültig." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Die angegebene E-Mail-Domain ist nicht freigegeben." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Konnte {original} nicht in {unit} umwandeln" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" @@ -112,13 +104,13 @@ msgstr "Datum eingeben" msgid "Invalid decimal value" msgstr "Ungültiger Dezimalwert" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Notizen" @@ -131,75 +123,75 @@ msgstr "Wert '{name}' hält das Musterformat nicht ein" msgid "Provided value does not match required pattern: " msgstr "Angegebener Wert entspricht nicht dem benötigten Muster: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Kann nicht mehr als 1000 Elemente auf einmal serialisieren" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Keine Seriennummer angegeben" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplizierter Seriennummer" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Ungültige Gruppe: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, 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:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Keine Seriennummern gefunden" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" -msgstr "" +msgstr "Anzahl der eindeutigen Seriennummern ({n}) muss mit der Anzahl ({q}) übereinstimmen" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Entferne HTML-Tags von diesem Wert" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Daten enthalten verbotene Markdown-Inhalte" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Verbindungsfehler" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Server antwortete mit ungültigem Statuscode" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Ausnahme aufgetreten" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Server antwortete mit ungültigem Wert für die Inhaltslänge" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Bild ist zu groß" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Bilddownload überschreitet maximale Größe" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Remote-Server gab leere Antwort zurück" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Angegebene URL ist kein gültiges Bild" @@ -207,11 +199,11 @@ msgstr "Angegebene URL ist kein gültiges Bild" msgid "Log in to the app" msgstr "Bei der App anmelden" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Sie müssen die Zwei-Faktor-Authentifizierung aktivieren, bevor Sie etwas tun können." @@ -255,135 +247,126 @@ msgstr "Referenz muss erforderlichem Muster entsprechen" msgid "Reference number is too large" msgstr "Referenznummer ist zu groß" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Ungültige Auswahl" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Name" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Beschreibung" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Beschreibung (optional)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Pfad" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Doppelte Namen können nicht unter dem selben Elternteil existieren" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Markdown Notizen (optional)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Barcode-Daten" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Drittanbieter-Barcode-Daten" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Barcode-Hash" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Eindeutiger Hash der Barcode-Daten" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Bestehender Barcode gefunden" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Aufgabe fehlgeschlagen" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Hintergrundarbeiteraufgabe '{f}' fehlgeschlagen nach {n} Versuchen" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serverfehler" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Ein Fehler wurde vom Server protokolliert." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Bild" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Währung" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Währung aus verfügbaren Optionen auswählen" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "Dieses Feld darf nicht leer sein." -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Ungültiger Wert" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Grafiken aus externen Quellen" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL der Remote-Bilddatei" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Das Herunterladen von Bildern von Remote-URLs ist nicht aktiviert" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Fehler beim Herunterladen des Bildes von entfernter URL" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "Content type stimmt nicht mit der benötigten Mixin-Klasse überein" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -537,11 +520,11 @@ msgstr "Chinesisch (Vereinfacht)" msgid "Chinese (Traditional)" msgstr "Chinesisch (Traditionell)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "Update verfügbar" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "Ein Update für InvenTree ist verfügbar" @@ -553,30 +536,30 @@ msgstr "Ungültige physikalische Einheit" msgid "Not a valid currency code" msgstr "Kein gültiger Währungscode" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Bestellstatus" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Eltern-Bauauftrag" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Varianten einschließen" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Varianten einschließen" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Varianten einschließen" msgid "Part" msgstr "Teil" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategorie" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Vorgänger-Build" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Mir zugewiesen" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Zugewiesen zu" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Erstellt vor" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Erstellt nach" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Hat Startdatum" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Gültigkeitsdauer vor" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Gültigkeitsdauer nach" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "geplantes Bestelldatum" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Zieldatum vor" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Zieldatum nach" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Abgeschlossen vor" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Abgeschlossen nach" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Baum ausschließen" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Verbrauchsmaterial" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Optional" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Baugruppe" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Nachverfolgt" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Prüfbar" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Offene Bestellung" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Zugeordnet" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Verbraucht" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Verfügbar" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Bestellt" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Bauauftrag" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Lagerort" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Bauprodukt" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Bauaufträge" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Die Stückliste wurde noch nicht kontrolliert" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Baureihenfolge kann nicht für ein inaktives Teil erstellt werden" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Baureihenfolge kann nicht für ein inaktives Teil erstellt werden" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Verantwortlicher Benutzer oder Gruppe muss angegeben werden" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Teil in Bauauftrag kann nicht geändert werden" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Zieldatum muss nach dem Startdatum liegen" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Bauauftragsreferenz" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Bauauftragsreferenz" msgid "Reference" msgstr "Referenz" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Kurze Beschreibung des Baus (optional)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Bauauftrag, zu dem dieser Bauauftrag zugwiesen ist" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Teil für den Bauauftrag wählen" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Auftrag Referenz" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Bestellung, die diesem Bauauftrag zugewiesen ist" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Quell-Lagerort" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Entnahme-Lagerort für diesen Bauauftrag wählen (oder leer lassen für einen beliebigen Lagerort)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Ziel-Lagerort" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Lagerort an dem fertige Objekte gelagert werden auswählen" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Bau-Anzahl" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Anzahl der zu bauenden Lagerartikel" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Fertiggestellte Teile" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Anzahl der fertigen Lagerartikel" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Bauauftrags-Status" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Losnummer" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Erstelldatum" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "Startdatum des Bauauftrags" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Geplantes Startdatum des Bauauftrags" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "geplantes Fertigstellungsdatum" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Fertigstellungsdatum" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "Fertiggestellt von" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Aufgegeben von" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Verantwortlicher Benutzer" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Benutzer oder Gruppe verantwortlich für diesen Bauauftrag" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Externer Link" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link zu einer externen URL" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Bauauftrags-Priorität" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Priorität dieses Bauauftrags" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Projektcode" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Projektcode für diesen Auftrag" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Fehler beim Abladen der Aufgabe, um die Build-Allokation abzuschließen" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Bauauftrag {build} wurde fertiggestellt" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Ein Bauauftrag wurde fertiggestellt" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Seriennummern müssen für nachverfolgbare Teile angegeben werden" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "kein Endprodukt angegeben" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Endprodukt bereits hergstellt" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Menge kann nicht größer als die Ausgangsmenge sein" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Build Ausgabe {serial} hat nicht alle erforderlichen Tests bestanden" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Bauauftragsposition" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Objekt bauen" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,435 +1016,447 @@ msgstr "Objekt bauen" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Anzahl" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Erforderliche Menge für Auftrag" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Bauauftragsposition muss ein Endprodukt festlegen, da der übergeordnete Teil verfolgbar ist" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Zugewiesene Menge ({q}) darf nicht verfügbare Menge ({a}) übersteigen" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Reserviermenge muss größer null sein" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Lagerartikel" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Quell-Lagerartikel" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Installiere in" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Ziel-Lagerartikel" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Name des Teils" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Endprodukt" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Endprodukt stimmt nicht mit übergeordnetem Bauauftrag überein" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Endprodukt entspricht nicht dem Teil des Bauauftrags" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Dieses Endprodukt wurde bereits fertiggestellt" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Dieses Endprodukt ist nicht vollständig zugewiesen" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Menge der Endprodukte angeben" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Ganzzahl für verfolgbare Teile erforderlich" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ganzzahl erforderlich da die Stückliste nachverfolgbare Teile enthält" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Seriennummer" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Seriennummer für dieses Endprodukt eingeben" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Lagerort für Bauprodukt" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Seriennummern automatisch zuweisen" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Eine Liste von Endprodukten muss angegeben werden" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Lagerort für ausgemusterte Ausgänge" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Zuteilungen verwerfen" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Bestandszuteilung für ausgemusterte Endprodukte verwerfen" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Grund für das Verwerfen des Bauauftrages/der Bauaufträge" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Lagerort für fertige Endprodukte" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Unvollständige Zuweisung akzeptieren" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Endprodukte fertigstellen, auch wenn Bestand nicht fertig zugewiesen wurde" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Zugewiesen Bestand verbrauchen" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Verbrauche alle Bestände, die diesem Bauauftrag bereits zugewiesen wurden" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Unfertige Endprodukte entfernen" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Lösche alle noch nicht abgeschlossenen Endprodukte" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Nicht erlaubt" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Als von diesem Bauauftrag verbraucht setzen" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Bestandszuordnung vor dem Abschluss dieses Bauauftrags freigeben" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Überbelegter Lagerbestand" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Wie sollen zusätzliche Lagerbestandteile, die dem Bauauftrag zugewiesen wurden, behandelt werden" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Der Bestand einiger Lagerartikel ist überbelegt" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Nicht zugewiesene akzeptieren" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Akzeptieren, dass Lagerartikel diesem Bauauftrag nicht vollständig zugewiesen wurden" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Unvollständig Zuweisung akzeptieren" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Akzeptieren, dass die erforderliche Anzahl der Bauaufträge nicht abgeschlossen ist" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Benötigte Teil-Anzahl wurde noch nicht fertiggestellt" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Bauauftrag hat unvollständige Aufbauten" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Bauauftragsposition" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Endprodukt" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Endprodukt muss auf den gleichen Bauauftrag verweisen" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Bauauftragspositionsartikel" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part muss auf dasselbe Teil verweisen wie der Bauauftrag" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Für Zuweisung von verfolgten Teilen muss ein Endprodukt angegeben sein" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Endprodukt kann bei Zuweisung nicht-verfolgter Teile nicht angegeben werden" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lagerort, von dem Teile bezogen werden sollen (leer lassen, um sie von jedem Lagerort zu nehmen)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Lagerort ausschließen" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Lagerartikel vom ausgewählten Ort ausschließen" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Wechselbares Lagerbestand" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagerartikel an mehreren Standorten können austauschbar verwendet werden" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Ersatzbestand" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Zuordnung von Ersatzteilen erlauben" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Optionale Positionen" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Optionale Stücklisten-Positionen dem Bauauftrag hinzufügen" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Fehler beim Starten der automatischen Zuweisung" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "Alle Artikel" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "Unverfolgte Artikel" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "Verfolgte Artikel" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "Item-Typ" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "Elementtyp zur automatischen Zuweisung auswählen" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Stücklisten-Referenz" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" -msgstr "" +msgstr "Stückliste Teil-ID" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" +msgstr "Stückliste Teil-Name" + +#: build/serializers.py:1242 +msgid "Install Into" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Zusammenbau" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Zuliefererteil" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Zugewiesene Menge" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" -msgstr "" +msgstr "Teilkategorienname" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Nachverfolgbar" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Vererbt" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Varianten zulassen" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "In Produktion" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" -msgstr "" +msgstr "Geplant zum Erstellen" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Externes Lager" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Verfügbarer Bestand" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Verfügbares Ersatzmaterial" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" -msgstr "" +msgstr "Verfügbarer Varianten Lagerbestand" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" -msgstr "" +msgstr "Verbrauchsmenge überschreitet die zugewiesene Menge" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" -msgstr "" +msgstr "Optionale Notizen für den Bestandsverbrauch" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" -msgstr "" +msgstr "Dupliziere Bauauftrag Artikelzuordnung" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" -msgstr "" +msgstr "Mindestens ein Element oder eine Zeile muss angegeben werden" #: build/status_codes.py:11 generic/states/tests.py:21 #: generic/states/tests.py:131 order/status_codes.py:12 @@ -1467,74 +1471,78 @@ msgstr "in Arbeit" #: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51 #: order/status_codes.py:81 msgid "On Hold" -msgstr "" +msgstr "Pausiert" #: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53 #: order/status_codes.py:84 msgid "Cancelled" msgstr "Storniert" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Fertig" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Bestand für Bauauftrag erforderlich" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" -msgstr "" +msgstr "Bauauftrag {build} erfordert zusätzlichen Bestand" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Überfälliger Bauauftrag" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Bauauftrag {bo} ist jetzt überfällig" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "Link" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "Datei" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" -msgstr "" +msgstr "Benutzer hat keine Berechtigung zum Löschen der Anhänge" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Benutzer hat keine Berechtigung zum Löschen des Anhangs" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Ungültiges Währungskürzel" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Doppeltes Währungskürzel" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Kein Plugin" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Aktualisiert" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Zeitstempel der letzten Aktualisierung" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Eindeutiger Projektcode" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Projektbeschreibung" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Benutzer oder Gruppe verantwortlich für dieses Projekt" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Einstellungs-Wert" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Wert ist keine gültige Option" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Wahrheitswert erforderlich" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Nur Ganzzahl eingeben" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Benutzer" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Preis" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Stückpreis für die angegebene Anzahl" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Endpunkt" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Endpunkt, an dem dieser Webhook empfangen wird" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Name für diesen Webhook" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktiv" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Ist dieser Webhook aktiv" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Token für Zugang" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Geheimnis" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Shared Secret für HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "Nachrichten-ID" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Eindeutige Kennung für diese Nachricht" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Host" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Host von dem diese Nachricht empfangen wurde" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Kopfzeile" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Header dieser Nachricht" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Body" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Body dieser Nachricht" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Endpunkt, über den diese Nachricht empfangen wurde" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Bearbeitet" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Wurde die Arbeit an dieser Nachricht abgeschlossen?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "ID" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Titel" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Veröffentlicht" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Autor" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Zusammenfassung" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Gelesen" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Wurde diese Nachricht gelesen?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Bilddatei" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Benutzerdefinierte Einheit" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "Einheitensymbol muss eindeutig sein" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Einheitsname muss eine gültige Kennung sein" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Einheitsname" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Optionales Einheitssymbol" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definition" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Einheitsdefinition" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Anhang" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Fehlende Datei" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Fehlender externer Link" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Modelltyp" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Datei zum Anhängen auswählen" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Kommentar" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Upload Datum" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Datum der hochgeladenen Datei" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Dateigröße" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Dateigröße in Bytes" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Ungültiger Modelltyp für Anhang angegeben" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Wert" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Name des Bundeslandes" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Bezeichnung" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Bezeichnung, die im Frontend angezeigt wird" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Farbe" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Farbe, die im Frontend angezeigt wird" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "Name muss sich von den Namen des Referenzstatus unterscheiden" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Auswahlliste" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Auswahllisten" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Name der Auswahlliste" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Beschreibung der Auswahlliste" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Gesperrt" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "Ist diese Auswahlliste gesperrt?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "Kann diese Auswahlliste benutzt werden?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Standardeintrag" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Erstellt" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Zuletzt aktualisiert" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "Checkbox-Parameter können keine Einheiten haben" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox-Parameter können keine Auswahl haben" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "Auswahl muss einzigartig sein" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Name des Parameters" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Einheiten" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Physikalische Einheiten für diesen Parameter" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Parameter-Beschreibung" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Checkbox" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Ist dieser Parameter eine Checkbox?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Auswahlmöglichkeiten" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gültige Optionen für diesen Parameter (durch Kommas getrennt)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Aktiviert" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Ungültige Auswahl für Parameterwert" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Vorlage" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Wert" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Parameter Wert" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Notiz" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Optionales Notizfeld" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" -msgstr "Barcodescan" +msgstr "Barcode Scan" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Zeitstempel" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Kontext" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Ergebnis" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "Angekündigt" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "Gesendet" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "Fehlgeschlagen" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "Zugestellt" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "Bestätigt" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "Eingehend" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "Ausgehend" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "Keine Rückmeldung" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Schlüssel" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} storniert" msgid "A order that is assigned to you was canceled" msgstr "Eine Bestellung, die Ihnen zugewiesen war, wurde storniert" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Artikel erhalten" @@ -2351,93 +2359,101 @@ msgstr "Artikel wurden aus einer Bestellung erhalten" msgid "Items have been received against a return order" msgstr "Artikel wurden aus einer Rücksendung erhalten" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Wird ausgeführt" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Anstehende Aufgaben" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Geplante Aufgaben" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Fehlgeschlagene Aufgaben" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "Aufgabe-ID" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Eindeutige Aufgaben-ID" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Sperren" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Sperrzeit" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Aufgabenname" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Funktion" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Funktionsname" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Parameter" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Aufgaben-Parameter" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Schlüsselwort Parameter" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Schlüsselwort Parameter für Aufgaben" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Dateiname" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Modelltyp" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Benutzer hat keine Berechtigung, Anhänge für dieses Modell zu erstellen oder zu bearbeiten" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "Keine Gruppe" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "Seiten-URL ist durch die Konfiguration gesperrt" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Neustart erforderlich" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Eine Einstellung wurde geändert, die einen Neustart des Servers erfordert" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Ausstehende Migrationen" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Anzahl der ausstehenden Datenbankmigrationen" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Name der Serverinstanz" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Kurze Beschreibung der Instanz" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Name der Instanz verwenden" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Den Namen der Instanz in der Titelleiste verwenden" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Anzeige von `Über` einschränken" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Zeige das `Über` Fenster nur Administratoren" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Firmenname" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "interner Firmenname" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "Basis-URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "Basis-URL für dieses Instanz" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Standardwährung" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Wählen Sie die Basiswährung für Preisberechnungen aus" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Verfügbare Währungen" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Liste der unterstützten Währungskürzel" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Währungsaktualisierungsintervall" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Wie oft Wechselkurse aktualisiert werden sollen (auf Null zum Deaktivieren setzen)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "Tage" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Währungs-Aktualisierungs-Plugin" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Zu verwendendes Währungs-Aktualisierungs-Plugin" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Von URL herunterladen" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Herunterladen von externen Bildern und Dateien von URLs erlaubt" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Download-Größenlimit" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Maximal zulässige Größe für heruntergeladene Bilder" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "Benutzer-Agent zum Herunterladen von Daten" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Überschreiben des Benutzer-Agenten, der verwendet wird, um Bilder und Dateien von externer Servern herunterzuladen (leer für die Standardeinstellung)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Strenge URL-Prüfung" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Erfordert die Schema-Spezifikation bei der Validierung von URLs" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Prüfungsintervall aktualisieren" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Wie oft soll nach Updates gesucht werden? (auf 0 setzen zum Deaktivieren)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Automatische Sicherung" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Automatische Sicherung der Datenbank- und Mediendateien aktivieren" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Intervall für automatische Sicherung" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Anzahl der Tage zwischen automatischen Sicherungen" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Aufgabenlöschinterval" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Ergebnisse der Hintergrundaufgabe werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Löschintervall für Fehlerprotokolle" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Fehlerprotokolle werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Löschintervall für Benachrichtigungen" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Benutzerbenachrichtigungen werden nach der angegebenen Anzahl von Tagen gelöscht" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Bacode-Feature verwenden" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Barcode-Scanner Unterstützung im Webinterface aktivieren" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Barcode-Eingabeverzögerung" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Verzögerungszeit bei Barcode-Eingabe" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Barcode Webcam-Unterstützung" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode-Scannen über Webcam im Browser erlauben" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Artikelrevisionen" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Revisions-Feld für Artikel aktivieren" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Löschen aus Baugruppe erlauben" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Erlaube das Löschen von Teilen, die in einer Baugruppe verwendet werden" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "RegEx Muster für die Zuordnung von Teil-IPN" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Ändern von IPN erlaubt" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Ändern der IPN während des Bearbeiten eines Teils erlaubt" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Teil-Stückliste kopieren" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Stückliste von Teil kopieren wenn das Teil dupliziert wird " -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Teil-Parameter kopieren" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Parameter-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Teil-Testdaten kopieren" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Test-Daten für dieses Teil kopieren wenn das Teil dupliziert wird" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Kategorie-Parametervorlage kopieren" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Teile können standardmäßig aus anderen Teilen angefertigt werden" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponente" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Kaufbar" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Verkäuflich" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Artikel sind grundsätzlich verkaufbar" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Artikel sind grundsätzlich verfolgbar" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtuell" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Teile sind grundsätzlich virtuell" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Verwandte Teile anzeigen" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Verwandte Teile eines Teils anzeigen" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Initialer Lagerbestand" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Erstellen von Lagerbestand beim Hinzufügen eines neuen Teils erlauben" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Initiale Lieferantendaten" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Erstellen von Lieferantendaten beim Hinzufügen eines neuen Teils erlauben" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Anzeigeformat für Teilenamen" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Format für den Namen eines Teiles" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Standardsymbol der Teilkategorie" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Standardsymbol der Teilkategorie (leer bedeutet kein Symbol)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Dezimalstellen für minimalen Preis" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Mindestanzahl der Dezimalstellen bei der Darstellung der Preisdaten" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Dezimalstellen für maximalen Preis" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximale Anzahl der Dezimalstellen bei der Darstellung der Preisdaten" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Zulieferer-Preise verwenden" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Lieferanten-Staffelpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Kaufverlauf überschreiben" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische Bestellungspreise überschreiben die Lieferanten-Staffelpreise" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Lagerartikel-Preis verwenden" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Preise aus manuell eingegebenen Lagerdaten für Preisberechnungen verwenden" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Lagerartikelpreis Alter" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Lagerartikel, die älter als diese Anzahl an Tagen sind, von der Preisberechnung ausschließen" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Variantenpreise verwenden" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Nur aktive Varianten" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Nur aktive Variantenteile zur Berechnung der Variantenbepreisung verwenden" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Intervall für Neuberechnung von Preisen" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Anzahl der Tage bis die Teile-Preisberechnungen automatisch aktualisiert werden" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Interne Preise" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Interne Preise für Teile aktivieren" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Interne Preisüberschreibung" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Falls verfügbar, überschreiben interne Preise Preispannenberechnungen" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Labeldruck aktivieren" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Labeldruck über die Website aktivieren" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "Label Bild DPI" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI-Auflösung bei der Erstellung von Bilddateien für Etikettendruck-Plugins" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Berichte aktivieren" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Berichterstellung aktivieren" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Entwickler-Modus" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Berichte im Entwickler-Modus generieren (als HTML)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Berichtsfehler protokollieren" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Fehler, die beim Erstellen von Berichten auftreten, protokollieren" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Seitengröße" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Standardseitenformat für PDF-Bericht" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Parameter Einheiten durchsetzen" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Wenn Einheiten angegeben werden, müssen die Parameterwerte mit den angegebenen Einheiten übereinstimmen" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Global einzigartige Seriennummern" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Seriennummern für Lagerartikel müssen global eindeutig sein" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Erschöpften Lagerartikel löschen" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Legt das Standardverhalten fest, wenn ein Lagerartikel aufgebraucht ist" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Losnummer Vorlage" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Vorlage für die Generierung von Standard-Losnummern für Lagerbestände" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Bestands-Ablauf" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Ablaufen von Bestand ermöglichen" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Abgelaufenen Bestand verkaufen" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Verkauf von abgelaufenem Bestand erlaubt" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Bestands-Stehzeit" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Anzahl an Tagen, an denen Bestand als abgestanden markiert wird, bevor sie ablaufen" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Abgelaufenen Bestand verbauen" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Verbauen von abgelaufenen Bestand erlaubt" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Bestands-Eigentümerkontrolle" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Eigentümerkontrolle für Lagerorte und Teile aktivieren" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Standardsymbol für Lagerort" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Standardsymbol für Lagerstandort (leer bedeutet kein Symbol)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Zeige installierte Lagerartikel" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Anzeige der installierten Lagerartikel in Bestandstabellen" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Prüfe BOM bei der Installation von Elementen" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Installierte Lagerbestandteile müssen im BOM für den übergeordneten Teil vorhanden sein" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Erlaube Verschieben von \"nicht auf Lager\" Bestand" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Lagerartikel, die nicht auf Lager sind, können zwischen Lagerstandorten übertragen werden" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Bauauftragsreferenz-Muster" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Bauaufträge" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Verantwortlicher Besitzer erforderlich" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Jeder Bestellung muss ein verantwortlicher Besitzer zugewiesen werden" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Blockieren bis Test bestanden" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Verhindert die Fertigstellung bis alle erforderlichen Tests bestanden sind" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Rücksendungen aktivieren" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Aktivieren der Rücksendung-Funktion in der Benutzeroberfläche" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Referenz Muster für Rücksendungen" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Rücksendungen" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Abgeschlossene Rücksendungen bearbeiten" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Bearbeitung von Rücksendungen nach Abschluss erlauben" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Auftragsreferenz-Muster" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Aufträge" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Auftrag Standardsendung" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Erstelle eine Standardsendung für Aufträge" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Abgeschlossene Aufträge bearbeiten" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Bearbeitung von Aufträgen nach Versand oder Abschluss erlauben" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Versendete Bestellungen als abgeschlossen markieren" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Als versendet markierte Aufträge werden automatisch abgeschlossen und überspringen den Status \"Versandt\"" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Bestellungsreferenz-Muster" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Benötigtes Muster für die Generierung des Referenzfeldes für Bestellungen" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Abgeschlossene Einkaufsaufträge bearbeiten" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Bearbeitung von Einkaufsaufträgen nach Versand oder Abschluss erlauben" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Bestellungen automatisch abschließen" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Bestellung automatisch als abgeschlossen markieren, wenn der Empfang aller Artikel bestätigt wurde" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Passwort vergessen aktivieren" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Passwort-vergessen-Funktion auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Registrierung erlauben" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Selbstregistrierung für Benutzer auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "SSO aktivieren" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "SSO auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "SSO Selbstregistrierung aktivieren" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Selbstregistrierung über SSO für Benutzer auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "SSO Gruppensynchronisation aktivieren" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "SSO Gruppenschlüssel" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Email-Adresse erforderlich" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Benutzer müssen bei der Registrierung eine E-Mail angeben" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "SSO-Benutzer automatisch ausfüllen" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Benutzer-Details automatisch aus SSO-Konto ausfüllen" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "E-Mail zweimal" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Bei der Registrierung den Benutzer zweimal nach der E-Mail-Adresse fragen" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Passwort zweimal" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Bei der Registrierung den Benutzer zweimal nach dem Passwort fragen" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Erlaubte Domains" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Anmeldung auf bestimmte Domänen beschränken (kommagetrennt, beginnend mit @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Gruppe bei Registrierung" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "MFA erzwingen" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Benutzer müssen Multifaktor-Authentifizierung verwenden." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Plugins beim Start prüfen" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Beim Start überprüfen, ob alle Plugins installiert sind - Für Container aktivieren" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Nach Plugin-Aktualisierungen suchen" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Periodische Überprüfungen auf Updates für installierte Plugins aktivieren" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "URL-Integration aktivieren" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Plugins zum Hinzufügen von URLs aktivieren" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Navigations-Integration aktivieren" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Plugins zur Integration in die Navigation aktivieren" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "App-Integration aktivieren" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Plugins zum Hinzufügen von Apps aktivieren" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Terminplan-Integration aktivieren" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Geplante Aufgaben aktivieren" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Ereignis-Integration aktivieren" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Plugins ermöglichen auf interne Ereignisse zu reagieren" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Externe Standorte ausschließen" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Automatische Inventur-Periode" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "Vollständige Namen von Benutzern anzeigen" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "Vollständigen Namen von Benutzern anstatt Benutzername anzeigen" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "Teststation-Daten aktivieren" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" -msgstr "Teststation-Datenerfassung für Testergebnisse aktivieren" +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "Vollständige Namen von Benutzern anzeigen" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Vollständigen Namen von Benutzern anstatt Benutzername anzeigen" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "Teststation-Daten aktivieren" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "Teststation-Datenerfassung für Testergebnisse aktivieren" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "Teil ist aktiv" msgid "Manufacturer is Active" msgstr "Hersteller ist aktiv" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "Lieferantenteil ist aktiv" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "Internes Teil ist aktiv" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "Lieferant ist aktiv" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Hersteller" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Firma" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Firmen" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Firmenbeschreibung" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Firmenbeschreibung" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Webseite" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "Firmenwebsite Adresse/URL" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Kontakt-Tel." -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Kontakt-Telefon" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontakt-Email" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakt" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Anlaufstelle" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link auf externe Firmeninformation" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "Ist dieses Unternehmen aktiv?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "Ist Kunde" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Verkaufen Sie Teile an diese Firma?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "Ist Zulieferer" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Kaufen Sie Teile von dieser Firma?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Ist Hersteller" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Produziert diese Firma Teile?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Standard-Währung für diese Firma" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Adresse" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Adressen" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Firma auswählen" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Adresstitel" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Titel zur Beschreibung des Adresseintrages" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Primäre Adresse" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Als primäre Adresse festlegen" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Linie 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Adresszeile 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Linie 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Adresszeile 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Postleitzahl" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Stadt/Region" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Postleitzahl Stadt/Region" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Staat/Provinz" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Bundesland" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Land" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Adresse Land" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Versandnotizen" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notizen für Versandkurier" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Interne Versandnotizen" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Versandnotizen für interne Verwendung" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Link zu Adressinformationen (extern)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Herstellerteil" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Basisteil" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Teil auswählen" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Hersteller auswählen" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Hersteller-Teilenummer" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "Externe URL für das Herstellerteil" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Teilbeschreibung des Herstellers" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Packeinheiten müssen mit den Basisteileinheiten kompatibel sein" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Packeinheiten müssen größer als Null sein" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Zulieferer" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Lagerbestandseinheit (SKU) des Zulieferers" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Ist dieser Lieferantenteil aktiv?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Herstellerteil auswählen" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "Teil-URL des Zulieferers" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "Basiskosten" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Verpackungen" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Teile-Verpackungen" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Packmenge" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Gesamtmenge, die in einer einzelnen Packung geliefert wird. Für Einzelstücke leer lassen." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "Vielfache" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Mehrere bestellen" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Verfügbare Menge von Lieferanten" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Verfügbarkeit aktualisiert" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Datum des letzten Updates der Verfügbarkeitsdaten" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Standard-Währung für diesen Zulieferer" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Firmenname" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "Auf Lager" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "Platziert" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Datendatei" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "Zu importierende Datei" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Spalten" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "Importstatus" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Standardwerte" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" -msgstr "" +msgstr "Feld" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" -msgstr "" +msgstr "Spalte" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Fehler" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Gültig" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "Anzahl der zu druckenden Kopien für jedes Label" msgid "Connected" msgstr "Verbunden" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Unbekannt" @@ -4540,7 +4589,7 @@ msgstr "Drucken" #: machine/machine_types/label_printer.py:234 msgid "Warning" -msgstr "" +msgstr "Warnung" #: machine/machine_types/label_printer.py:235 msgid "No media" @@ -4548,7 +4597,7 @@ msgstr "Keine Medien" #: machine/machine_types/label_printer.py:236 msgid "Paper jam" -msgstr "" +msgstr "Papierstau" #: machine/machine_types/label_printer.py:237 msgid "Disconnected" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Bestellreferenz" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "Ausstehend" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Erstellt von" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Hat Preise" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Bestellung" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "Bestellung abgeschlossen" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Internes Teil" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Bestellung ausstehend" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Fertig" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Bestellung" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Bestellung" msgid "Sales Order" msgstr "Auftrag" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Gesamtpreis" msgid "Total price for this order" msgstr "Gesamtpreis für diese Bestellung" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Auftragswährung" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Währung für diesen Auftrag (leer lassen, um Firmenstandard zu verwenden)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Kontakt stimmt nicht mit der ausgewählten Firma überein" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Auftragsbeschreibung (optional)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Projektcode für diesen Auftrag auswählen" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Link auf externe Seite" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Zieldatum" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Geplantes Lieferdatum für Auftrag." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Aufgabedatum" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Datum an dem die Bestellung aufgegeben wurde" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Nutzer oder Gruppe der/die für diesen Auftrag zuständig ist/sind" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Ansprechpartner für diesen Auftrag" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Firmenadresse für diesen Auftrag" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Bestell-Referenz" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Bestellungs-Status" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Firma bei der die Teile bestellt werden" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Zulieferer-Referenz" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Zulieferer Bestellreferenz" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "Empfangen von" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Ziel-Lager" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Teile-Zulieferer muss dem Zulieferer der Bestellung entsprechen" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Position stimmt nicht mit Kaufauftrag überein" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Anzahl muss eine positive Zahl sein" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Kunde" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Firma an die die Teile verkauft werden" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Kundenreferenz" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Bestellreferenz" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Versanddatum" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "Versand von" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "Bestellung ist bereits abgeschlossen" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "Bestellung ist bereits storniert" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Nur ein offener Auftrag kann als abgeschlossen markiert werden" -#: order/models.py:1425 +#: order/models.py:1440 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:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 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:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Anzahl" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Position - Referenz" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Position - Notizen" -#: order/models.py:1797 +#: order/models.py:1812 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:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Positionsbeschreibung (optional)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Zusätzlicher Kontext für diese Zeile" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Stückpreis" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "Lieferantenteil muss mit Lieferant übereinstimmen" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Zuliefererteil" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Empfangen" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Preis" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Preis pro Einheit" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "Nur verkaufbare Teile können einem Auftrag zugewiesen werden" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Verkaufspreis" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Stückverkaufspreis" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Versendet" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Versendete Menge" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Versanddatum" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Lieferdatum" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Versanddatum" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Kontrolliert von" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Sendung" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Sendungsnummer" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Sendungsverfolgungsnummer" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Informationen zur Sendungsverfolgung" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Rechnungsnummer" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Referenznummer für zugehörige Rechnung" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "Sendung wurde bereits versandt" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "Sendung hat keine zugewiesene Lagerartikel" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "Lagerartikel wurde nicht zugewiesen" -#: order/models.py:2528 +#: order/models.py:2537 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:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "Kann Lagerartikel keiner Zeile ohne Teil hinzufügen" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Reserviermenge muss größer null sein" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "Auftrag gehört nicht zu Sendung" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Sendung gehört nicht zu Auftrag" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Position" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Sendungsnummer-Referenz" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Position" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Lagerartikel für Zuordnung auswählen" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Rücksendungsreferenz" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Firma von der die Artikel zurückgeschickt werden" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Status der Rücksendung" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Artikel zur Rücksendung auswählen" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Empfangsdatum" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "Das Datum des Empfangs dieses Rücksendeartikels" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Ergebnis" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Ergebnis für dieses Zeilenelement" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Kosten für die Rückgabe oder Reparatur dieses Objektes" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Parameter kopieren" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Positionen" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Abgeschlossene Positionen" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Lieferant" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Erlaube das Schließen des Auftrags mit unvollständigen Positionen" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "Auftrag hat unvollständige Positionen" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "Der Auftrag ist nicht offen" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "Automatische Preisgestaltung" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Kaufpreis automatisch basierend auf Lieferantenbestandsdaten berechnen" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Elemente zusammenfügen" -#: order/serializers.py:731 +#: order/serializers.py:689 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:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "Lieferanten-Teilenummer" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Interne Teilenummer" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "Zuliefererteil muss ausgewählt werden" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "Bestellung muss angegeben sein" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "Lieferant muss mit der Bestellung übereinstimmen" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "Die Bestellung muss mit dem Lieferant übereinstimmen" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Position" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Zielort für empfangene Teile auswählen" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Losnummer für eingehende Lagerartikel" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ablaufdatum" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Seriennummern für eingehende Lagerartikel" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Gescannter Barcode" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Barcode ist bereits in Verwendung" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Abgeschlossene Sendungen" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "Position ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "Sendung ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Artikel der Bestellzeile zurücksenden" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "Artikel entspricht nicht der Rücksendeschrift" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "Artikel wurde bereits erhalten" -#: order/serializers.py:2076 +#: order/serializers.py:2040 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:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Verkaufspreis-Währung" @@ -5532,1174 +5613,1226 @@ msgstr "Rückerstattung" msgid "Reject" msgstr "Ablehnen" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Überfällige Bestellung" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Bestellung {po} ist jetzt überfällig" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Überfälliger Auftrag" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Auftrag {so} ist jetzt überfällig" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Markiert" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Nach markierten Kategorien filtern" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Ebenen" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filter nach Kategorietiefe" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Oberste Ebene" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Mehrstufig" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Unterkategorien in gefilterte Ergebnisse einbeziehen" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Übergeordnetes" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Nach übergeordneter Kategorie filtern" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Unterkategorien in der angegebenen Kategorie ausschließen" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Ergebnisse" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "Verwendet" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Teil-Kategorie" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Teil-Kategorien" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Standard-Lagerort" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Standard-Lagerort für Teile dieser Kategorie" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Strukturell" -#: part/models.py:120 +#: part/models.py:119 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:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Standard Stichwörter" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Standard-Stichworte für Teile dieser Kategorie" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Symbol" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Symbol (optional)" -#: part/models.py:182 +#: part/models.py:181 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:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Standard-Wert" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Teile" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "Dieses Teil kann nicht gelöscht werden, da es noch aktiv ist" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "Dieses Teil kann nicht gelöscht werden, da es in einem Bauauftrag verwendet wird" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, 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:723 +#: part/models.py:701 #, 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:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN muss mit Regex-Muster {pattern} übereinstimmen" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Ein Lagerartikel mit dieser Seriennummer existiert bereits" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Doppelte IPN in den Teil-Einstellungen nicht erlaubt" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Teil mit diesem Namen, IPN und Revision existiert bereits." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Strukturellen Teilekategorien können keine Teile zugewiesen werden!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Name des Teils" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Ist eine Vorlage" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Ist dieses Teil eine Vorlage?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Ist dieses Teil eine Variante eines anderen Teils?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante von" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Artikelbeschreibung (optional)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Schlüsselwörter" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Interne Produktnummer)" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Version" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" -msgstr "" +msgstr "Revision von" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Standard Zulieferer" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Standard Zuliefererteil" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Standard Ablaufzeit" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimaler Bestand" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Bestand" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Maßeinheit für diesen Teil" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "Kann dieses Teil zum Bauauftrag von anderen genutzt werden?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "Hat dieses Teil Tracking für einzelne Objekte?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Ist dieses Teil aktiv?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 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:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "Stückliste kontrolliert von" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "BOM Kontrolldatum" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Erstellungs-Nutzer" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Verantwortlicher Besitzer für dieses Teil" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Mehrere verkaufen" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Währung für die Berechnung der Preise im Cache" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Minimale Stücklisten Kosten" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Minimale Kosten für Teile" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Maximale Stücklisten Kosten" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Maximale Kosten für Teile" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Minimale Einkaufskosten" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Minimale historische Kaufkosten" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Maximale Einkaufskosten" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Maximale historische Einkaufskosten" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Minimaler interner Preis" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Minimale Kosten basierend auf den internen Staffelpreisen" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Maximaler interner Preis" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Maximale Kosten basierend auf internen Preisstaffeln" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Minimaler Lieferantenpreis" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Mindestpreis für Teil von externen Lieferanten" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Maximaler Lieferantenpreis" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Maximaler Preis für Teil von externen Lieferanten" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Minimale Variantenkosten" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Berechnete minimale Kosten für Variantenteile" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Maximale Variantenkosten" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Berechnete maximale Kosten für Variantenteile" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Minimale Kosten" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Mindestkosten überschreiben" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Maximale Kosten" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Maximale Kosten überschreiben" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Berechnete Mindestkosten" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Berechnete Maximalkosten" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Mindestverkaufspreis" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Mindestverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Maximaler Verkaufspreis" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Maximalverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Mindestverkaufskosten" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Minimaler historischer Verkaufspreis" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Maximale Verkaufskosten" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Maximaler historischer Verkaufspreis" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Teil für die Inventur" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Stückzahl" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "Anzahl einzelner Bestandseinträge zum Zeitpunkt der Inventur" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "Insgesamt verfügbarer Lagerbestand zum Zeitpunkt der Inventur" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Datum" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Datum der Inventur" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Mindestbestandswert" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Geschätzter Mindestwert des vorhandenen Bestands" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Maximaler Bestandswert" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "Geschätzter Maximalwert des vorhandenen Bestands" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 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:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 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:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "Testschlüssel" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "Vereinfachter Schlüssel zum Test" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "Ist dieser Test aktiviert?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Benötigt" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Erfordert Wert" -#: part/models.py:3781 +#: part/models.py:3747 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:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:3788 +#: part/models.py:3754 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:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "Gültige Optionen für diesen Test (durch Komma getrennt)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:4028 +#: part/models.py:4006 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:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "überprüft" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Diese Stücklistenposition wurde validiert" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Wird vererbt" -#: part/models.py:4095 +#: part/models.py:4073 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:4101 +#: part/models.py:4079 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:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Zuliefererteil muss festgelegt sein" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "Stücklisten Ersatzteile" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Übergeordnete Stücklisten Position" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Ersatzteil" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 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:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Übergeordnete Kategorie" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Übergeordnete Teilkategorie" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Unter-Kategorien" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "Ergebnisse" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Anzahl der Ergebnisse, die in dieser Vorlage aufgezeichnet wurden" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Kaufwährung dieses Lagerartikels" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Originalteil" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Originalteil zum Duplizieren auswählen" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Bild kopieren" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Bild vom Originalteil kopieren" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Stückliste vom Originalteil kopieren" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Parameter kopieren" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Parameterdaten vom Originalteil kopieren" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Anmerkungen kopieren" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Notizen aus Originalteil kopieren" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Start-Bestandsmenge" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Initiale Lagermenge für dieses Teil. Wenn die Menge null ist, wird kein Lagerbestand hinzugefügt." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Initialer Lagerort" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Lagerstandort für dieses Teil angeben" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Ausgewählte Firma ist kein gültiger Lieferant" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Ausgewählte Firma ist kein gültiger Hersteller" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Herstellerteil mit dieser MPN existiert bereits" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Lieferantenteil mit dieser SKU existiert bereits" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategoriename" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Im Bau" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Lagerartikel" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Zulieferer" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Gesamtbestand" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Nicht zugewiesenes Lager" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Alternatives Lager" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Teil duplizieren" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Initiale Daten von anderem Teil kopieren" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Initialer Lagerbestand" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Erstelle Teil mit Ausgangsbestand" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Lieferanteninformationen" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Lieferanteninformationen zu diesem Teil hinzufügen" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kategorieparameter kopieren" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Vorhandenes Bild" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Dateiname eines vorhandenen Teilbildes" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Bilddatei existiert nicht" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Gesamte Stückliste validieren" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Herstellbar" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Niedrigster Preis" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Berechneten Wert für Mindestpreis überschreiben" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Mindestpreis Währung" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Höchster Preis" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Berechneten Wert für maximalen Preis überschreiben" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Maximalpreis Währung" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Aktualisieren" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Preis für dieses Teil aktualisieren" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Konnte nicht von den angegebenen Währungen in {default_currency} umrechnen" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Mindestpreis darf nicht größer als der Maximalpreis sein" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Der Maximalpreis darf nicht kleiner als der Mindestpreis sein" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Teil auswählen, von dem Stückliste kopiert wird" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Bestehende Daten entfernen" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Vererbtes einschließen" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Ungültige Zeilen überspringen" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Ersatzteile kopieren" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Benachrichtigungen über geringen Bestand" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Der verfügbare Bestand für {part.name} ist unter das konfigurierte Mindestniveau gefallen" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "Keine Aktion angegeben" msgid "No matching action found" msgstr "Keine passende Aktion gefunden" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Keine Treffer für Barcode" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Treffer für Barcode gefunden" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Barcode entspricht einem bereits vorhandenen Artikel" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "Keine passenden Teiledaten gefunden" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "Keine passenden Zulieferteile gefunden" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "Mehrere passende Zulieferteile gefunden" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Zulieferteil zugeordnet" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "Artikel wurde bereits erhalten" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "Mehrere passende Elemente gefunden" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "Kein passendes Element gefunden" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "Barcode stimmt nicht mit einem vorhandenen Lagerartikel überein" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "Lagerartikel stimmt nicht mit dem Element überein" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Unzureichender Bestand verfügbar" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "Lagerartikel der Bestellung zugeordnet" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Nicht genügend Informationen" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "Weitere Informationen zum Empfang des Zeilenelements erforderlich" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Erhaltene Bestellartikel" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "Bietet native Unterstützung für Barcodes" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "Eingehender Webhook-URL für Slack" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "InvenTree Maschinen-Etikettendrucker" msgid "Provides support for printing using a machine" msgstr "Unterstützt das Drucken mit einer Maschine" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "Zuletzt benutzt" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "Optionen" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Schlüssel des Plugins" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "Name des Plugins" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "Paket-Plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Kein Autor gefunden" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, 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:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Plugin benötigt mindestens Version {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Plugin benötigt maximal Version {v}" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "Installation nicht bestätigt" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "Entweder Paketname oder URL muss angegeben werden" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8072,7 +8205,7 @@ msgstr "Summe" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Seriennummer" @@ -8097,7 +8230,7 @@ msgstr "Lagerartikel Test-Bericht" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Verbaute Objekte" @@ -8130,495 +8263,519 @@ msgstr "Kein Ergebnis (erforderlich)" msgid "No result" msgstr "Kein Ergebnis" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Die Bestandsdatei ist nicht vorhanden" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "Bilddatei nicht gefunden" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "part_image tag benötigt eine Bauteilinstanz" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "company_image tag erfordert eine Firmeninstanz" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Filtern nach Standorttiefe" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Unterorte in gefilterte Ergebnisse einbeziehen" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "Übergeordneter Ort" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtern nach übergeordnetem Ort" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Statuscode" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Externer Standort" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Teile-Baum" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Gültigkeitsdauer vor" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Gültigkeitsdauer nach" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "überfällig" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Menge ist erforderlich" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Gültiges Teil muss angegeben werden" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Der angegebene Lieferantenartikel existiert nicht" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Das Zulieferteil hat eine Packungsgröße definiert, aber das Kennzeichen use_pack_size ist nicht gesetzt" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Seriennummern können für nicht verfolgbare Teile nicht angegeben werden" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "Lagerstandort Typ" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "Lagerstandorte Typen" -#: stock/models.py:98 +#: stock/models.py:100 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:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Bestand-Lagerort" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Bestand-Lagerorte" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Besitzer" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Besitzer auswählen" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Lagerartikel können nicht direkt an einen strukturellen Lagerort verlegt werden, können aber an einen untergeordneten Lagerort verlegt werden." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Extern" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Dies ist ein externer Lagerort" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Standorttyp" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "Standortart dieses Standortes" -#: stock/models.py:308 +#: stock/models.py:296 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:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagerartikel können nicht in strukturelle Lagerorte abgelegt werden!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "Für virtuelle Teile können keine Lagerartikel erstellt werden" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Artikeltyp ('{self.supplier_part.part}') muss {self.part} sein" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Anzahl muss für Objekte mit Seriennummer 1 sein" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Seriennummer kann nicht gesetzt werden wenn die Anzahl größer als 1 ist" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Teil kann nicht zu sich selbst gehören" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Teil muss eine Referenz haben wenn is_building wahr ist" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Referenz verweist nicht auf das gleiche Teil" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Eltern-Lagerartikel" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Basis-Teil" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "Verpackung, in der dieser Lagerartikel gelagert ist" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "verbaut in" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Bestand" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Quellbau" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Bauauftrag für diesen Lagerartikel" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Verbraucht von" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Bauauftrag der diesen Lagerartikel verbrauchte" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Quelle Bestellung" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Bestellung für diesen Lagerartikel" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Ablaufdatum für Lagerartikel. Bestand wird danach als abgelaufen gekennzeichnet" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Löschen wenn leer" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Diesen Lagerartikel löschen wenn der Bestand aufgebraucht ist" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Preis für eine Einheit bei Einkauf" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "In Teil umgewandelt" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Menge darf die verfügbare Lagermenge ({self.quantity}) nicht überschreiten" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Testvorlage existiert nicht" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Artikel wurde einem Kundenauftrag zugewiesen" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Lagerartikel ist in anderem Element verbaut" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Lagerartikel enthält andere Artikel" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Artikel wurde einem Kunden zugewiesen" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Lagerartikel wird aktuell produziert" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Nachverfolgbare Lagerartikel können nicht zusammengeführt werden" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Artikel duplizeren" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Lagerartikel müssen auf dasselbe Teil verweisen" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Lagerartikel müssen auf dasselbe Lieferantenteil verweisen" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Status-Codes müssen zusammenpassen" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Lagerartikel kann nicht bewegt werden, da kein Bestand vorhanden ist" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Test Notizen" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "Teststation" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "Der Bezeichner der Teststation, in der der Test durchgeführt wurde" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "Gestartet" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Der Zeitstempel des Teststarts" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "Fertiggestellt" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Der Zeitstempel der Test-Beendigung" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "Testvorlage für dieses Ergebnis" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "Vorlagen-ID oder Testname muss angegeben werden" -#: stock/serializers.py:292 +#: stock/serializers.py:294 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:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Elternposition" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 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:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Seriennummern für neue Teile eingeben" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "abgelaufen" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Untergeordnete Objekte" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "Einkaufspreis dieses Lagerartikels, pro Einheit oder Verpackungseinheit" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Anzahl der zu serialisierenden Lagerartikel eingeben" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, 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:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Ziel-Bestand" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "Seriennummern können diesem Teil nicht zugewiesen werden" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Seriennummern existieren bereits" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Lagerartikel für Installation auswählen" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "Zu installierende Menge" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "Anzahl der zu verwendenden Artikel eingeben" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr " Transaktionsnotizen hinzufügen (optional)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "Die zu verwendende Menge muss mindestens 1 sein" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "Lagerartikel ist nicht verfügbar" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "Ausgewähltes Teil ist nicht in der Stückliste" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "Die zu verwendende Menge darf die verfügbare Menge nicht überschreiten" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Ziel Lagerort für unverbautes Objekt" -#: stock/serializers.py:927 +#: stock/serializers.py:933 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:940 +#: stock/serializers.py:946 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:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Lagerartikel konnte nicht mit Zulieferteil zugewiesen werden" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "Lagerartikel Status-Code" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "Lagerartikel auswählen, um den Status zu ändern" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "Keine Lagerartikel ausgewählt" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Unter-Lagerorte" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "Übergeordneter Lagerort" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "Teil muss verkaufbar sein" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "Artikel ist einem Kundenauftrag zugeordnet" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "Artikel ist einem Fertigungsauftrag zugeordnet" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Kunde zum Zuweisen von Lagerartikel" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "Ausgewählte Firma ist kein Kunde" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Notizen zur Lagerzuordnung" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "Eine Liste der Lagerbestände muss angegeben werden" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Notizen zur Lagerartikelzusammenführung" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Unterschiedliche Lieferanten erlauben" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Lieferanten erlauben" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Unterschiedliche Status erlauben" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "Zusammenführen von Lagerartikeln mit unterschiedlichen Status-Codes erlauben" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Mindestens zwei Lagerartikel müssen angegeben werden" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Keine Änderung" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Primärschlüssel Lagerelement" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Bestandsbewegungsnotizen" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "Nächste Seriennummer" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "Vorherige Seriennummer" @@ -9281,7 +9438,7 @@ msgstr "" #: users/models.py:496 msgid "Internal" -msgstr "Intern" +msgstr "Interne" #: users/models.py:498 msgid "Guest" @@ -9313,7 +9470,7 @@ msgstr "" #: users/models.py:528 msgid "Display Name" -msgstr "Anzeigename" +msgstr "Name anzeigen" #: users/models.py:529 msgid "Chosen display name for the user" @@ -9383,83 +9540,83 @@ msgstr "Aufträge" msgid "Return Orders" msgstr "Rücksendeaufträge" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Benutzername" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Vorname" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Vorname des Benutzers" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Nachname" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Nachname des Benutzers" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "E-Mailadresse des Benutzers" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Mitarbeiter" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Hat der Benutzer die Mitarbeiter Berechtigung" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Administrator" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Ist dieser Benutzer ein Administrator" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Ist dieses Benutzerkonto aktiv" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "Passwort" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Ihr Konto wurde erstellt." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Bitte benutzen Sie die Passwort-zurücksetzen-Funktion, um sich anzumelden" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Willkommen bei InvenTree" diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po index 4504cc029b..bac561a6cb 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "Το API endpoint δε βρέθηκε" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Πρέπει να παρέχεται λίστα Προϊόντων ή φίλτρων για μαζική ενέργεια" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Τα Προϊόντα πρέπει να δοθούν ως λίστα" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Η λίστα Προϊόντων που δόθηκε δεν είναι έγκυρη" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Τα φίλτρα πρέπει να δοθούν ως λεξικό" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Τα φίλτρα που δόθηκαν δεν είναι έγκυρα" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Το φίλτρο all πρέπει να χρησιμοποιείται μόνο με τιμή true" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Κανένα Aντικείμενο δεν ταιριάζει στα κριτήρια που δόθηκαν" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Δεν δόθηκαν δεδομένα" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Αυτό το πεδίο πρέπει να είναι μοναδικό." -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Δεν έχετε δικαιώματα να το δείτε αυτό" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "E-mail (ξανά)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Επιβεβαίωση διεύθυνσης email" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Πρέπει να πληκτρολογήσετε το ίδιο email κάθε φορά." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Η παρεχόμενη κύρια διεύθυνση ηλεκτρονικού ταχυδρομείου δεν είναι έγκυρη." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Ο παρεχόμενος τομέας ηλεκτρονικού ταχυδρομείου δεν έχει εγκριθεί." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Δεν ήταν δυνατή η μετατροπή από {original} σε {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Μη έγκυρη ποσότητα" @@ -112,13 +104,13 @@ msgstr "Εισάγετε ημερομηνία" msgid "Invalid decimal value" msgstr "Μη έγκυρη δεκαδική τιμή" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Σημειώσεις" @@ -131,75 +123,75 @@ msgstr "Η τιμή '{name}' δεν εμφανίζεται σε μορφή μο msgid "Provided value does not match required pattern: " msgstr "Η παρεχόμενη τιμή δεν ταιριάζει με το απαιτούμενο απαραραίητη μοτίβο: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Δεν είναι δυνατή η σειριοποίηση περισσότερων από 1000 Προϊόντων ταυτόχρονα" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Κενό σειριακό αριθμό συμβολοσειράς" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Διπλότυπο ArialTTumblr" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Μη έγκυρη ομάδα: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Το εύρος της ομάδας {group} υπερβαίνει την επιτρεπόμενη ποσότητα ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Δεν βρέθηκαν σειριακοί αριθμοί" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Ο αριθμός μοναδικών σειριακών αριθμών ({n}) πρέπει να αντιστοιχεί στην ποσότητα ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Αφαιρέστε τα HTML tags από την τιμή που εισάγατε" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Τα δεδομένα περιέχουν απαγορευμένο περιεχόμενο markdown" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Σφάλμα σύνδεσης" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Ο διακομιστής απάντησε με μη έγκυρο κωδικό κατάστασης" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Προέκυψε σφάλμα" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Ο διακομιστής ανταποκρίθηκε με \"Invalid Content-Length value\"" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Η εικόνα είναι πολύ μεγάλη σε μέγεθος" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Η λήψη εικόνας ξεπέρασε το μέγιστο μέγεθος" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Ο διακομιστής επέστρεψε σφάλμα %1$d %2$s" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Το URL δεν είναι έγκυρο αρχείο εικόνας" @@ -207,11 +199,11 @@ msgstr "Το URL δεν είναι έγκυρο αρχείο εικόνας" msgid "Log in to the app" msgstr "Σύνδεση στην εφαρμογή" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Πρέπει να ενεργοποιήσετε τον έλεγχο ταυτότητας δύο παραγόντων πριν κάνετε οτιδήποτε άλλο." @@ -255,133 +247,124 @@ msgstr "Η αναφορά πρέπει να ταιριάζει με το απα msgid "Reference number is too large" msgstr "Ο αριθμός αναφοράς είναι πολύ μεγάλος" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Μη έγκυρη επιλογή" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Όνομα" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Περιγραφή" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Περιγραφή (προαιρετική)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Μονοπάτι" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Διπλότυπα ονόματα δεν μπορούν να υπάρχουν στον ίδιο γονέα" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Σημειώσεις Markdown (προαιρετικό)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Στοιχεία Barcode" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Δεδομένα barcode τρίτων" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Hash barcode" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Μοναδικό hash δεδομένων barcode" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Βρέθηκε υπάρχων barcode" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Αποτυχία εργασίας" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Η εργασία background worker '{f}' απέτυχε μετά από {n} προσπάθειες" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Σφάλμα διακομιστή" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Ένα σφάλμα έχει καταγραφεί από το διακομιστή." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Εικόνα" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Πρέπει να είναι αριθμός" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Νόμισμα" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Επιλέξτε νόμισμα από τις διαθέσιμες επιλογές" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Μη έγκυρη τιμή" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Απομακρυσμένες Εικόνες" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "Διεύθυνση URL του αρχείου απομακρυσμένης εικόνας" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Η λήψη εικόνων από απομακρυσμένο URL δεν είναι ενεργοποιημένη" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Αποτυχία λήψης εικόνας από απομακρυσμένο URL" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Κινέζικα (απλοποιημένα)" msgid "Chinese (Traditional)" msgstr "Κινέζικα (Παραδοσιακά)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "Διαθέσιμη ενημέρωση" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "Μια ενημέρωση για το InvenTree είναι διαθέσιμη" @@ -553,30 +536,30 @@ msgstr "Μη έγκυρη φυσική μονάδα" msgid "Not a valid currency code" msgstr "Μη έγκυρος κωδικός συναλλάγματος" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Κατάσταση παραγγελίας" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Γονική Κατασκευή" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Συμπερίληψη παραλλαγών" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Συμπερίληψη παραλλαγών" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Συμπερίληψη παραλλαγών" msgid "Part" msgstr "Εξάρτημα" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Κατηγορία" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Πρόγονος κατασκευής" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Ανατεθειμένες σε εμένα" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Ανατεθεί σε" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Δημιουργήθηκε πριν από" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Δημιουργήθηκε μετά από" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Με ημερομηνία έναρξης" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Ημερομηνία έναρξης πριν από" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Ημερομηνία έναρξης μετά από" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Με ημερομηνία στόχο" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Ημερομηνία στόχος πριν από" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Ημερομηνία στόχος μετά από" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Ολοκληρώθηκε πριν από" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Ολοκληρώθηκε μετά από" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "Ελάχιστη ημερομηνία" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "Μέγιστη ημερομηνία" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Εξαίρεση δέντρου" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Αναλώσιμο" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Προαιρετικό" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Συναρμολόγηση" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Υπό παρακολούθηση" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Υπό δοκιμή" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Εκκρεμής παραγγελία" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Κατανεμημένο" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Καταναλωμένο" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Διαθέσιμο" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Σε παραγγελία" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Σειρά Κατασκευής" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Τοποθεσία" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Έξοδος" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Φιλτράρισμα με βάση το ID του αποθέματος εξόδου. Χρησιμοποιήστε 'null' για να βρείτε μη εγκατεστημένα στοιχεία κατασκευής" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Δημιουργία Παραγγελιών" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Το BOM της συναρμολόγησης δεν έχει επικυρωθεί" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Δεν μπορεί να δημιουργηθεί εντολή κατασκευής για ανενεργό Aντικειμένου" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Δεν μπορεί να δημιουργηθεί εντολή κατασκευής για μη κλειδωμένο Aντικειμένου" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Οι εντολές κατασκευής μπορούν να εκτελεστούν εξωτερικά μόνο για Προϊόντα που μπορούν να αγοραστούν" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Πρέπει να οριστεί υπεύθυνος χρήστης ή ομάδα" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Εξάρτημα από εντολή κατασκευής δεν μπορεί να αλλάξει" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Η ημερομηνία στόχος πρέπει να είναι μετά την ημερομηνία έναρξης" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Αναφορά Παραγγελίας Κατασκευής" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Αναφορά Παραγγελίας Κατασκευής" msgid "Reference" msgstr "Αναφορά" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Σύντομη περιγραφή της κατασκευής (προαιρετικό)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "BuildOrder στην οποία έχει δοθεί αυτή η κατασκευή" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Επιλέξτε τμήμα για κατασκευή" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Κωδικός Παραγγελίας Πωλήσεων" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "SalesOrder στην οποία έχει διατεθεί αυτό το build" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Τοποθεσία Προέλευσης" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Επιλέξτε τοποθεσία από την οποία θα γίνει απόθεμα, για αυτή την κατασκευή (αφήστε κενό για να πάρετε από οποιαδήποτε θέση αποθήκευσης)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "Εξωτερική κατασκευή" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Αυτή η εντολή κατασκευής εκτελείται εξωτερικά" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Τοποθεσία Προορισμού" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Επιλέξτε την τοποθεσία όπου θα αποθηκευτούν τα ολοκληρωμένα στοιχεία" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Ποσότητα Κατασκευής" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Αριθμός αντικειμένων για κατασκευή" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Ολοκληρωμένα αντικείμενα" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Αριθμός αντικειμένων αποθέματος που έχουν ολοκληρωθεί" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Κατάσταση Κατασκευής" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Κωδικός Παρτίδας" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Κωδικός παρτίδας για αυτήν την κατασκευή" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Ημερομηνία Δημιουργίας" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "Ημερομηνία έναρξης κατασκευής" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Προγραμματισμένη ημερομηνία έναρξης για αυτή την εντολή κατασκευής" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Ημερομηνία ολοκλήρωσης στόχου" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ημερομηνία ολοκλήρωσης της κατασκευής. Η κατασκευή θα καθυστερήσει μετά από αυτή την ημερομηνία." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Ημερομηνία ολοκλήρωσης" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "ολοκληρώθηκε από" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Εκδόθηκε από" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Χρήστης που εξέδωσε αυτήν την παραγγελία κατασκευής" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Υπεύθυνος" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την εντολή κατασκευής" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Εξωτερικοί σύνδεσμοι" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Προτεραιότητα Κατασκευής" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Προτεραιότητα αυτής της εντολής κατασκευής" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Κωδικός Έργου" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Κωδικός έργου για αυτήν την εντολή κατασκευής" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Δεν είναι δυνατή η ολοκλήρωση της εντολής κατασκευής με ανοιχτές θυγατρικές κατασκευές" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Δεν είναι δυνατή η ολοκλήρωση της εντολής κατασκευής με μη ολοκληρωμένα προϊόντα" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Αποτυχία εκχώρησης εργασίας για την ολοκλήρωση των κατανομών κατασκευής" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Η παραγγελία κατασκευής {build} έχει ολοκληρωθεί" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Πρέπει να δοθούν σειριακοί αριθμοί για τα ανιχνεύσιμα Προϊόντα" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Δεν καθορίστηκε έξοδος κατασκευής" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "Η έξοδος κατασκευής δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "Δεν είναι δυνατή η μερική ολοκλήρωση προϊόντος κατασκευής με δεσμευμένα στοιχεία" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Γραμμή εντολής κατασκευής" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Αντικείμενο κατασκευής" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Αντικείμενο κατασκευής" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Ποσότητα" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Απαιτούμενη ποσότητα για την εντολή κατασκευής" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Ποσότητα καταναλωμένου αποθέματος" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Το στοιχείο κατασκευής πρέπει να ορίζει μια έξοδο κατασκευής, καθώς το κύριο τμήμα επισημαίνεται ως ανιχνεύσιμο" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν ταιριάζει με τη γραμμή ΤΥ" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν ταιριάζει με τη γραμμή ΤΥ" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "Η δεσμευμένη ποσότητα υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Στοιχείο Αποθέματος" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Στοιχείο πηγαίου αποθέματος" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Ποσότητα αποθέματος για διάθεση για κατασκευή" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Εγκατάσταση σε" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Αποθήκη προορισμού" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Επίπεδο κατασκευής" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Όνομα Προϊόντος" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Ετικέτα κωδικού έργου" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Κατασκευή Εξόδου" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Το εξερχόμενο μέρος δεν ταιριάζει με το μέρος BuildOrder" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθεί" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Αυτή η έξοδος κατασκευής δεν έχει εκχωρηθεί πλήρως" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται για ανιχνεύσιμα μέρη" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Εισάγετε ποσότητα για την έξοδο κατασκευής" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Τοποθεσία αποθέματος για την έξοδο κατασκευής" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Πρέπει να παρέχεται μια λίστα με τα αποτελέσματα κατασκευής" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Θέση αποθέματος για απορριφθείσες παραγωγές" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Απόρριψη Κατανομών" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Απορρίψτε τυχόν κατανομές αποθέματος για παραγωγές που έχουν απορριφθεί" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Αιτία απόρριψης προϊόντων κατασκευής" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Τοποθεσία για ολοκληρωμένα προϊόντα κατασκευής" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Αποδοχή Ελλιπούς Δέσμευσης" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Ολοκλήρωσε τα προϊόντα εάν το απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Κατανάλωση δεσμευμένου αποθέματος" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Κατανάλωση οποιουδήποτε αποθέματος έχει ήδη δεσμευτεί για αυτή την κατασκευή" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Αφαίρεση Ατελείωτων Προϊόντων" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Διαγράψτε τυχόν προϊόντα κατασκευής που δεν έχουν ολοκληρωθεί" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Δεν επιτρέπεται" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Αποδοχή ως κατανάλωση για αυτή την παραγγελία κατασκευής" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Αποδέσμευση πριν από την ολοκλήρωση αυτής της παραγγελίας κατασκευής" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Υπερ-δεσμευμένο Απόθεμα" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Πώς θέλετε να χειριστείτε το επιπλέον απόθεμα που έχει δεσμευτεί στην παραγγελία κατασκευής" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Μερικά στοιχεία αποθέματος έχουν υπερ-δεσμευτεί" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Αποδοχή Μη Δεσμευμένων" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Αποδεχτείτε ότι αντικείμενα αποθέματος δεν έχουν δεσμευτεί πλήρως σε αυτή την παραγγελία κατασκευής" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Το απαιτούμενο απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Αποδοχή Μη Ολοκληρωμένων" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Αποδεχτείτε ότι ο απαιτούμενος αριθμός προϊόντων κατασκευής δεν έχει ολοκληρωθεί" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Ο απαιτούμενος αριθμός προϊόντων δεν έχει ολοκληρωθεί" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Η εντολή κατασκευής έχει ανοιχτές θυγατρικές εντολές κατασκευής" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Η εντολή κατασκευής πρέπει να βρίσκεται σε κατάσταση παραγωγής" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Η παραγγελία κατασκευής έχει ελλιπή προϊόντα" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Γραμμή Κατασκευής" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Προϊόν Κατασκευής" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Το προϊόν κατασκευής πρέπει να δείχνει στην ίδια κατασκευή" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Αντικείμενο Γραμμής Κατασκευής" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part πρέπει να δείχνει στο ίδιο εξάρτημα με τη εντολή κατασκευής" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "Το στοιχείο πρέπει να υπάρχει στο απόθεμα" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Η διαθέσιμη ποσότητα ({q}) έχει ξεπεραστεί" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Πρέπει να καθοριστεί έξοδος κατασκευής για την κατανομή ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Δεν μπορεί να καθοριστεί έξοδος κατασκευής για την κατανομή μη ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Πρέπει να δοθούν στοιχεία κατανομής" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Τοποθεσία αποθέματος από την οποία θα ληφθούν τα Προϊόντα (αφήστε κενό για λήψη από οποιαδήποτε τοποθεσία)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Εξαίρεση τοποθεσίας" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Εξαιρέστε στοιχεία αποθέματος από αυτή την επιλεγμένη τοποθεσία" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Εναλλάξιμο απόθεμα" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Στοιχεία αποθέματος σε πολλές τοποθεσίες μπορούν να χρησιμοποιηθούν εναλλάξ" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Εναλλακτικό απόθεμα" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Να επιτρέπεται η κατανομή εναλλακτικών Προϊόντων" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Προαιρετικά στοιχεία" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Κατανομή προαιρετικών στοιχείων BOM στην εντολή κατασκευής" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Αποτυχία εκκίνησης εργασίας αυτόματης κατανομής" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Αναφορά BOM" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID Προϊόντος BOM" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Όνομα Προϊόντος BOM" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Κατασκευή" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Aντικειμένου προμηθευτή" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Δεσμευμένη ποσότητα" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Αναφορά κατασκευής" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Όνομα κατηγορίας Προϊόντος" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Ανιχνεύσιμο" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Κληρονομημένο" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Να επιτρέπονται παραλλαγές" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Στοιχείο BOM" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Σε παραγωγή" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Προγραμματισμένο για κατασκευή" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Εξωτερικό απόθεμα" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Διαθέσιμο απόθεμα" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Διαθέσιμο εναλλακτικό απόθεμα" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Διαθέσιμο απόθεμα παραλλαγών" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "Η καταναλωμένη ποσότητα υπερβαίνει τη δεσμευμένη ποσότητα" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Προαιρετικές σημειώσεις για την κατανάλωση αποθέματος" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "Το στοιχείο κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Διπλή κατανομή στοιχείου κατασκευής" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "Η γραμμή κατασκευής πρέπει να αντιστοιχεί στη σωστή εντολή κατασκευής" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Διπλή κατανομή γραμμής κατασκευής" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Πρέπει να δοθεί τουλάχιστον ένα στοιχείο ή μία γραμμή" @@ -1474,67 +1478,71 @@ msgstr "Σε αναμονή" msgid "Cancelled" msgstr "Ακυρώθηκε" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Ολοκληρώθηκε" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Απαιτείται απόθεμα για την εντολή κατασκευής" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Η εντολή κατασκευής {build} απαιτεί επιπλέον απόθεμα" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Εκπρόθεσμη εντολή κατασκευής" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Η εντολή κατασκευής {bo} είναι πλέον εκπρόθεσμη" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "Είναι σύνδεσμος" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "Είναι αρχείο" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτά τα συνημμένα" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτό το συνημμένο" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Μη έγκυρος κωδικός συναλλάγματος" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Διπλός κωδικός συναλλάγματος" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Δεν δόθηκαν έγκυροι κωδικοί συναλλάγματος" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Χωρίς πρόσθετο" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Ετικέτα κωδικού έργου" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Ενημερώθηκε" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Χρονική σήμανση τελευταίας ενημέρωσης" @@ -1546,778 +1554,778 @@ msgstr "Ενημερώθηκε από" msgid "User who last updated this object" msgstr "Χρήστης που ενημέρωσε τελευταίος αυτό το Aντικειμένου" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Μοναδικός κωδικός έργου" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Περιγραφή έργου" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτό το έργο" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Κλειδί ρυθμίσεων" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Τιμή ρυθμίσεων" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Η επιλεγμένη τιμή δεν είναι έγκυρη επιλογή" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Η τιμή πρέπει να είναι boolean" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Η τιμή πρέπει να είναι ακέραιος αριθμός" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "Η τιμή πρέπει να είναι έγκυρος αριθμός" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "Η τιμή δεν περνά τους ελέγχους εγκυρότητας" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Η συμβολοσειρά κλειδιού πρέπει να είναι μοναδική" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Χρήστης" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Ποσότητα κλιμακωτής τιμής" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Τιμή" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Τιμή μονάδας στη συγκεκριμένη ποσότητα" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Endpoint" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Το endpoint στο οποίο λαμβάνεται αυτό το webhook" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Όνομα για αυτό το webhook" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Ενεργό" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Είναι αυτό το webhook ενεργό" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Token πρόσβασης" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Μυστικό" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Κοινόχρηστο μυστικό για HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "ID μηνύματος" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Μοναδικό αναγνωριστικό για αυτό το μήνυμα" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Host" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Host από τον οποίο παραλήφθηκε αυτό το μήνυμα" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Κεφαλίδα" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Κεφαλίδα αυτού του μηνύματος" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Κείμενο" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Κείμενο αυτού του μηνύματος" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Endpoint στο οποίο παραλήφθηκε αυτό το μήνυμα" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Επεξεργάστηκε" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Ολοκληρώθηκε η εργασία σε αυτό το μήνυμα;" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "ID" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Τίτλος" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Σύνδεσμος" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Δημοσιεύθηκε" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Συντάκτης" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Περίληψη" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Αναγνωσμένο" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Διαβάστηκε αυτό το νέο;" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Αρχείο εικόνας" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "Τύπος μοντέλου-στόχου για αυτή την εικόνα" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "ID μοντέλου-στόχου για αυτή την εικόνα" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Προσαρμοσμένη μονάδα" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "Το σύμβολο μονάδας πρέπει να είναι μοναδικό" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Το όνομα μονάδας πρέπει να είναι έγκυρο αναγνωριστικό" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Όνομα μονάδας" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Σύμβολο" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Προαιρετικό σύμβολο μονάδας" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Ορισμός" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Ορισμός μονάδας" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Συνημμένο" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Το αρχείο λείπει" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Λείπει ο εξωτερικός σύνδεσμος" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Τύπος μοντέλου" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "Τύπος μοντέλου-στόχου για την εικόνα" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Επιλέξτε αρχείο για επισύναψη" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Σχόλιο" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Σχόλιο συνημμένου" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Ημερομηνία μεταφόρτωσης" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Ημερομηνία μεταφόρτωσης του αρχείου" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Μέγεθος αρχείου" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Μέγεθος αρχείου σε bytes" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Μη έγκυρος τύπος μοντέλου που ορίστηκε για το συνημμένο" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "Προσαρμοσμένη κατάσταση" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "Προσαρμοσμένες καταστάσεις" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "Σετ κατάστασης αναφοράς" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "Σετ καταστάσεων που επεκτείνεται με αυτή την προσαρμοσμένη κατάσταση" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Λογικό κλειδί" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "Λογικό κλειδί κατάστασης που είναι ισοδύναμο με αυτή την προσαρμοσμένη κατάσταση στη λογική της εφαρμογής" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Τιμή" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "Αριθμητική τιμή που θα αποθηκευτεί στη βάση δεδομένων των μοντέλων" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Όνομα της κατάστασης" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Ετικέτα" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Ετικέτα που θα εμφανίζεται στο frontend" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Χρώμα" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Χρώμα που θα εμφανίζεται στο frontend" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Μοντέλο" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "Μοντέλο με το οποίο συσχετίζεται αυτή η κατάσταση" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "Πρέπει να επιλεγεί μοντέλο" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "Πρέπει να επιλεγεί κλειδί" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "Πρέπει να επιλεγεί λογικό κλειδί" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "Το κλειδί πρέπει να είναι διαφορετικό από το λογικό κλειδί" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "Πρέπει να δοθεί έγκυρη κλάση κατάστασης αναφοράς" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "Το κλειδί πρέπει να είναι διαφορετικό από τα λογικά κλειδιά της κατάστασης αναφοράς" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "Το λογικό κλειδί πρέπει να ανήκει στα λογικά κλειδιά της κατάστασης αναφοράς" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "Το όνομα πρέπει να είναι διαφορετικό από τα ονόματα της κατάστασης αναφοράς" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Λίστα επιλογών" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Λίστες επιλογών" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Όνομα της λίστας επιλογών" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Περιγραφή της λίστας επιλογών" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Κλειδωμένο" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "Είναι αυτή η λίστα επιλογών κλειδωμένη;" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "Μπορεί να χρησιμοποιηθεί αυτή η λίστα επιλογών;" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Πρόσθετο πηγής" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Πρόσθετο που παρέχει τη λίστα επιλογών" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Συμβολοσειρά πηγής" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Προαιρετική συμβολοσειρά που ταυτοποιεί την πηγή που χρησιμοποιείται για αυτή τη λίστα" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Προεπιλεγμένη καταχώρηση" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Προεπιλεγμένη καταχώρηση για αυτή τη λίστα επιλογών" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Δημιουργήθηκε" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Ημερομηνία και ώρα δημιουργίας της λίστας επιλογών" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Τελευταία ενημέρωση" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "Ημερομηνία και ώρα της τελευταίας ενημέρωσης της λίστας επιλογών" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Καταχώρηση λίστας επιλογών" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Καταχωρήσεις λίστας επιλογών" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Λίστα επιλογών στην οποία ανήκει αυτή η καταχώρηση" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Τιμή της καταχώρησης λίστας επιλογών" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Ετικέτα για την καταχώρηση λίστας επιλογών" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Περιγραφή της καταχώρησης λίστας επιλογών" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "Είναι ενεργή αυτή η καταχώρηση λίστας επιλογών;" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Πρότυπο παραμέτρου" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν μονάδες" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν επιλογές" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "Οι επιλογές πρέπει να είναι μοναδικές" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "Το όνομα προτύπου παραμέτρου πρέπει να είναι μοναδικό" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Όνομα παραμέτρου" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Μονάδες" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Φυσικές μονάδες για αυτή την παράμετρο" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Περιγραφή παραμέτρου" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Checkbox" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Είναι αυτή η παράμετρος τύπου checkbox;" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Επιλογές" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Έγκυρες επιλογές για αυτή την παράμετρο (διαχωρισμένες με κόμμα)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "Λίστα επιλογών για αυτή την παράμετρο" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Ενεργό" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Μη έγκυρη επιλογή για την τιμή παραμέτρου" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Πρότυπο" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Δεδομένα" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Τιμή παραμέτρου" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Σημείωση" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Προαιρετικό πεδίο σημείωσης" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Σάρωση barcode" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Δεδομένα barcode" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Χρήστης που σάρωσε το barcode" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Χρονική σήμανση" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Ημερομηνία και ώρα της σάρωσης barcode" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "URL endpoint που επεξεργάστηκε το barcode" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Πλαίσιο" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Δεδομένα πλαισίου για τη σάρωση barcode" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Απόκριση" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Δεδομένα απόκρισης από τη σάρωση barcode" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Αποτέλεσμα" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "Ήταν επιτυχημένη η σάρωση barcode;" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "Παρουσιάστηκε σφάλμα" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Η διαγραφή του log email προστατεύεται. Ορίστε το INVENTREE_PROTECT_EMAIL_LOG σε False για να επιτραπεί η διαγραφή." -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "Μήνυμα email" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "Μηνύματα email" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "Ανακοινώθηκε" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "Εστάλη" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "Απέτυχε" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "Παραδόθηκε" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "Επιβεβαιώθηκε" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "Εισερχόμενο" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "Εξερχόμενο" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "Χωρίς απάντηση" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "Παρακολούθηση παράδοσης" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "Παρακολούθηση ανάγνωσης" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "Παρακολούθηση κλικ" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "Αναγνωριστικό για αυτό το μήνυμα (ενδέχεται να παρέχεται από εξωτερικό σύστημα)" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "ID νήματος" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Αναγνωριστικό για αυτό το νήμα μηνυμάτων (ενδέχεται να παρέχεται από εξωτερικό σύστημα)" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "Νήμα" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "Συνδεδεμένο νήμα για αυτό το μήνυμα" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "Νήμα email" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "Νήματα email" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Κλειδί" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "Μοναδικό κλειδί για αυτό το νήμα (χρησιμοποιείται για την ταυτοποίησή του)" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "Μοναδικό αναγνωριστικό για αυτό το νήμα" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "Ξεκίνησε εσωτερικά" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "Ξεκίνησε αυτό το νήμα εσωτερικά;" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "Ημερομηνία και ώρα δημιουργίας του νήματος" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "Ημερομηνία και ώρα της τελευταίας ενημέρωσης του νήματος" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} ακυρώθηκε" msgid "A order that is assigned to you was canceled" msgstr "Μια παραγγελία που σας είχε ανατεθεί ακυρώθηκε" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Είδη που παραλήφθηκαν" @@ -2351,93 +2359,101 @@ msgstr "Είδη έχουν παραληφθεί έναντι εντολής α msgid "Items have been received against a return order" msgstr "Είδη έχουν παραληφθεί έναντι εντολής επιστροφής" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "Δείχνει αν η ρύθμιση παρακάμπτεται από μεταβλητή περιβάλλοντος" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "Παράκαμψη" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Εκτελείται" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Εργασίες σε αναμονή" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Προγραμματισμένες εργασίες" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Αποτυχημένες εργασίες" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID εργασίας" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Μοναδικό ID εργασίας" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Κλείδωμα" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Χρόνος κλειδώματος" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Όνομα εργασίας" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Συνάρτηση" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Όνομα συνάρτησης" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Ορίσματα" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Ορίσματα εργασίας" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Ορίσματα λέξεων-κλειδιών" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Ορίσματα λέξεων-κλειδιών της εργασίας" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Όνομα αρχείου" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Τύπος μοντέλου" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Ο χρήστης δεν έχει δικαίωμα να δημιουργήσει ή να επεξεργαστεί συνημμένα για αυτό το μοντέλο" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Η λίστα επιλογών είναι κλειδωμένη" @@ -2445,1128 +2461,1157 @@ msgstr "Η λίστα επιλογών είναι κλειδωμένη" msgid "No group" msgstr "Χωρίς ομάδα" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "Το URL του site είναι κλειδωμένο από τη ρύθμιση" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Απαιτείται επανεκκίνηση" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Μια ρύθμιση έχει αλλάξει και απαιτείται επανεκκίνηση του διακομιστή" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Εκκρεμείς migrations" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Αριθμός εκκρεμών μεταναστεύσεων βάσης δεδομένων" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "Ενεργοί κωδικοί προειδοποίησης" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "Λεξικό με τους ενεργούς κωδικούς προειδοποίησης" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "ID instance" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "Μοναδικό αναγνωριστικό για αυτό το instance του InvenTree" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "Δημοσίευση ID" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Δημοσίευση του instance ID του διακομιστή στις πληροφορίες κατάστασης διακομιστή (χωρίς έλεγχο ταυτότητας)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Όνομα instance διακομιστή" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Περιγραφή κειμένου για το instance του διακομιστή" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Χρήση ονόματος instance" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Χρήση του ονόματος instance στη γραμμή τίτλου" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Περιορισμός εμφάνισης `about`" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Εμφάνιση της λειτουργίας `about` μόνο σε superusers" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Επωνυμία εταιρείας" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Εσωτερική επωνυμία εταιρείας" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "Βασικό URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "Βασικό URL για το instance του διακομιστή" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Προεπιλεγμένο νόμισμα" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Επιλέξτε βασικό νόμισμα για τους υπολογισμούς τιμών" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Υποστηριζόμενα νομίσματα" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Λίστα υποστηριζόμενων κωδικών νομισμάτων" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Διάστημα ενημέρωσης νομισμάτων" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Κάθε πότε θα ενημερώνονται οι συναλλαγματικές ισοτιμίες (0 για απενεργοποίηση)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "ημέρες" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Πρόσθετο ενημέρωσης νομισμάτων" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Πρόσθετο ενημέρωσης νομισμάτων που θα χρησιμοποιηθεί" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Λήψη από URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Να επιτρέπεται η λήψη απομακρυσμένων εικόνων και αρχείων από εξωτερικό URL" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Όριο μεγέθους λήψης" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Μέγιστο επιτρεπόμενο μέγεθος λήψης για απομακρυσμένη εικόνα" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "User-agent που χρησιμοποιείται για λήψη από URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Να επιτρέπεται η αντικατάσταση του user-agent που χρησιμοποιείται για λήψη εικόνων και αρχείων από εξωτερικό URL (αφήστε κενό για το προεπιλεγμένο)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Αυστηρή επικύρωση URL" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Να απαιτείται ορισμός σχήματος κατά την επικύρωση URL" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Διάστημα ελέγχου ενημερώσεων" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Κάθε πότε θα γίνεται έλεγχος για ενημερώσεις (0 για απενεργοποίηση)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Αυτόματο αντίγραφο ασφαλείας" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Ενεργοποίηση αυτόματου backup της βάσης δεδομένων και των media αρχείων" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Διάστημα αυτόματου backup" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Ορίστε τον αριθμό ημερών μεταξύ των αυτόματων backup" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Διάστημα διαγραφής εργασιών" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Τα αποτελέσματα εργασιών παρασκηνίου θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Διάστημα διαγραφής log σφαλμάτων" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Τα log σφαλμάτων θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Διάστημα διαγραφής ειδοποιήσεων" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Οι ειδοποιήσεις χρηστών θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "Διάστημα διαγραφής email" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "Τα μηνύματα email θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "Προστασία log email" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "Αποτροπή διαγραφής εγγραφών log email" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Υποστήριξη barcode" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Ενεργοποίηση υποστήριξης σαρωτή barcode στο web interface" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "Αποθήκευση αποτελεσμάτων barcode" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "Αποθήκευση των αποτελεσμάτων σάρωσης barcode στη βάση δεδομένων" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "Μέγιστος αριθμός σαρώσεων barcode" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "Μέγιστος αριθμός αποτελεσμάτων σάρωσης barcode που θα αποθηκεύονται" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Καθυστέρηση εισόδου barcode" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Χρόνος καθυστέρησης επεξεργασίας εισόδου barcode" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Υποστήριξη barcode μέσω webcam" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Να επιτρέπεται σάρωση barcode μέσω webcam στο πρόγραμμα περιήγησης" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "Εμφάνιση δεδομένων barcode" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Εμφάνιση των δεδομένων barcode στο πρόγραμμα περιήγησης ως κείμενο" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Πρόσθετο δημιουργίας barcode" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Πρόσθετο που θα χρησιμοποιείται για εσωτερική δημιουργία δεδομένων barcode" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Εκδόσεις Προϊόντων" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Ενεργοποίηση πεδίου έκδοσης για Aντικειμένου" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "Μόνο εκδόσεις συναρμολογήσεων" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "Να επιτρέπονται εκδόσεις μόνο για Προϊόντα συναρμολόγησης" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Να επιτρέπεται διαγραφή από συναρμολόγηση" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Να επιτρέπεται η διαγραφή Προϊόντων που χρησιμοποιούνται σε συναρμολόγηση" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Πρότυπο regular expression για αντιστοίχιση IPN Προϊόντος" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Να επιτρέπονται διπλά IPN" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Να επιτρέπεται σε πολλαπλά Προϊόντα να μοιράζονται το ίδιο IPN" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Να επιτρέπεται η επεξεργασία IPN" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Να επιτρέπεται η αλλαγή της τιμής IPN κατά την επεξεργασία ενός Προϊόντος" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Αντιγραφή δεδομένων BOM Προϊόντος" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Αντιγραφή δεδομένων BOM από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Αντιγραφή δεδομένων παραμέτρων Προϊόντος" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Αντιγραφή δεδομένων παραμέτρων από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Αντιγραφή δεδομένων δοκιμών Προϊόντος" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Αντιγραφή δεδομένων δοκιμών από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Αντιγραφή προτύπων παραμέτρων κατηγορίας" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Αντιγραφή προτύπων παραμέτρων κατηγορίας κατά τη δημιουργία Προϊόντος" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Τα Προϊόντα είναι πρότυπα από προεπιλογή" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Τα Προϊόντα μπορούν να συναρμολογούνται από άλλα συστατικά από προεπιλογή" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Συστατικό" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Τα Προϊόντα μπορούν να χρησιμοποιούνται ως υποσυστατικά από προεπιλογή" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Αγοράσιμο" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Τα Προϊόντα είναι αγοράσιμα από προεπιλογή" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Πωλήσιμο" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Τα Προϊόντα είναι πωλήσιμα από προεπιλογή" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Τα Προϊόντα είναι ανιχνεύσιμα από προεπιλογή" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Εικονικό" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Τα Προϊόντα είναι εικονικά από προεπιλογή" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Εμφάνιση σχετικών Προϊόντων" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Εμφάνιση σχετικών Προϊόντων για ένα Aντικειμένου" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Αρχικά δεδομένα αποθέματος" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Να επιτρέπεται η δημιουργία αρχικού αποθέματος κατά την προσθήκη νέου Προϊόντος" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Αρχικά δεδομένα προμηθευτή" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Να επιτρέπεται η δημιουργία αρχικών δεδομένων προμηθευτή κατά την προσθήκη νέου Προϊόντος" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Μορφή εμφάνισης ονόματος Προϊόντος" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Μορφή με την οποία εμφανίζεται το όνομα του Προϊόντος" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Προεπιλεγμένο εικονίδιο κατηγορίας Προϊόντος" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Προεπιλεγμένο εικονίδιο κατηγορίας Προϊόντος (κενό σημαίνει χωρίς εικονίδιο)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Ελάχιστα δεκαδικά ψηφία τιμολόγησης" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Ελάχιστος αριθμός δεκαδικών ψηφίων που θα εμφανίζονται στα δεδομένα τιμολόγησης" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Μέγιστα δεκαδικά ψηφία τιμολόγησης" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Μέγιστος αριθμός δεκαδικών ψηφίων που θα εμφανίζονται στα δεδομένα τιμολόγησης" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Χρήση τιμών προμηθευτή" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Συμπερίληψη κλιμακωτών τιμών προμηθευτή στους συνολικούς υπολογισμούς τιμών" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Υπέρβαση μέσω ιστορικού αγορών" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Οι ιστορικές τιμές εντολών αγοράς υπερισχύουν των κλιμακωτών τιμών προμηθευτή" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Χρήση τιμολόγησης στοιχείου αποθέματος" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Χρήση τιμών από χειροκίνητα καταχωρημένα δεδομένα αποθέματος για τους υπολογισμούς τιμών" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Ηλικία τιμολόγησης στοιχείου αποθέματος" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Εξαίρεση στοιχείων αποθέματος παλαιότερων από αυτόν τον αριθμό ημερών από τους υπολογισμούς τιμών" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Χρήση τιμολόγησης παραλλαγών" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Συμπερίληψη τιμών παραλλαγών στους συνολικούς υπολογισμούς τιμών" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Μόνο ενεργές παραλλαγές" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Χρήση μόνο ενεργών Προϊόντων παραλλαγών για τον υπολογισμό τιμών παραλλαγών" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "Αυτόματη ενημέρωση τιμών" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "Αυτόματη ενημέρωση τιμών Προϊόντων όταν αλλάζουν τα εσωτερικά δεδομένα" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Διάστημα επαναυπολογισμού τιμών" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Αριθμός ημερών πριν ενημερωθούν αυτόματα οι τιμές των Προϊόντων" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Εσωτερικές τιμές" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Ενεργοποίηση εσωτερικών τιμών για Προϊόντα" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Υπέρβαση μέσω εσωτερικής τιμής" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Όταν υπάρχουν, οι εσωτερικές τιμές υπερισχύουν των υπολογισμών εύρους τιμών" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Ενεργοποίηση εκτύπωσης ετικετών" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Ενεργοποίηση εκτύπωσης ετικετών από το web interface" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "DPI εικόνας ετικέτας" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Ανάλυση DPI κατά τη δημιουργία αρχείων εικόνας για πρόσθετα εκτύπωσης ετικετών" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Ενεργοποίηση αναφορών" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Ενεργοποίηση δημιουργίας αναφορών" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Λειτουργία αποσφαλμάτωσης" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Δημιουργία αναφορών σε λειτουργία αποσφαλμάτωσης (έξοδος HTML)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Καταγραφή σφαλμάτων αναφορών" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Καταγραφή σφαλμάτων που προκύπτουν κατά τη δημιουργία αναφορών" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Μέγεθος σελίδας" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Προεπιλεγμένο μέγεθος σελίδας για PDF αναφορές" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Επιβολή μονάδων παραμέτρων" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Αν δοθούν μονάδες, οι τιμές των παραμέτρων πρέπει να αντιστοιχούν στις καθορισμένες μονάδες" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Καθολικά μοναδικοί σειριακοί αριθμοί" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Οι σειριακοί αριθμοί των στοιχείων αποθέματος πρέπει να είναι καθολικά μοναδικοί" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Διαγραφή εξαντλημένου αποθέματος" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Καθορίζει την προεπιλεγμένη συμπεριφορά όταν ένα στοιχείο αποθέματος εξαντλείται" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Πρότυπο κωδικού παρτίδας" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Πρότυπο για τη δημιουργία προεπιλεγμένων κωδικών παρτίδας για στοιχεία αποθέματος" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Λήξη αποθέματος" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Ενεργοποίηση λειτουργίας λήξης αποθέματος" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Πώληση ληγμένου αποθέματος" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Να επιτρέπεται η πώληση ληγμένου αποθέματος" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Χρόνος απαρχαίωσης αποθέματος" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Αριθμός ημερών που τα στοιχεία αποθέματος θεωρούνται παλαιωμένα πριν λήξουν" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Κατασκευή με ληγμένο απόθεμα" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Να επιτρέπεται η κατασκευή με ληγμένο απόθεμα" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Έλεγχος ιδιοκτησίας αποθέματος" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Ενεργοποίηση ελέγχου ιδιοκτησίας σε τοποθεσίες και στοιχεία αποθέματος" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Προεπιλεγμένο εικονίδιο τοποθεσίας αποθέματος" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Προεπιλεγμένο εικονίδιο τοποθεσίας αποθέματος (κενό σημαίνει χωρίς εικονίδιο)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Εμφάνιση εγκατεστημένων στοιχείων αποθέματος" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Εμφάνιση εγκατεστημένων στοιχείων αποθέματος στους πίνακες αποθέματος" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Έλεγχος BOM κατά την εγκατάσταση στοιχείων" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Τα εγκατεστημένα στοιχεία αποθέματος πρέπει να υπάρχουν στο BOM του γονικού Προϊόντος" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Να επιτρέπεται μεταφορά εκτός αποθέματος" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Να επιτρέπεται η μεταφορά στοιχείων αποθέματος που δεν είναι διαθέσιμα μεταξύ τοποθεσιών αποθέματος" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Πρότυπο αναφοράς εντολής κατασκευής" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Απαιτούμενο πρότυπο για τη δημιουργία του πεδίου αναφοράς εντολής κατασκευής" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Απαίτηση υπεύθυνου κατόχου" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Πρέπει να οριστεί υπεύθυνος ιδιοκτήτης για κάθε παραγγελία" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "Απαίτηση ενεργού προϊόντος" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "Αποτροπή δημιουργίας εντολής παραγωγής για ανενεργά προϊόντα" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Απαίτηση κλειδωμένου προϊόντος" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "Αποτροπή δημιουργίας εντολής παραγωγής για ξεκλείδωτα προϊόντα" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "Απαίτηση έγκυρης BOM" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "Αποτροπή δημιουργίας εντολής παραγωγής αν δεν έχει επικυρωθεί η BOM" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "Απαίτηση κλειστών θυγατρικών εντολών" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "Αποτροπή ολοκλήρωσης εντολής παραγωγής μέχρι να κλείσουν όλες οι θυγατρικές εντολές" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "Εξωτερικές εντολές παραγωγής" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "Ενεργοποίηση λειτουργίας εξωτερικών εντολών παραγωγής" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Φραγή έως ότου περάσουν τα τεστ" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Αποτροπή ολοκλήρωσης εξόδων παραγωγής μέχρι να περάσουν όλα τα απαιτούμενα τεστ" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Ενεργοποίηση εντολών επιστροφής" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Ενεργοποίηση λειτουργίας εντολών επιστροφής στη διεπαφή χρήστη" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Μοτίβο αναφοράς εντολής επιστροφής" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής επιστροφής" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Επεξεργασία ολοκληρωμένων εντολών επιστροφής" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Επιτρέπει την επεξεργασία εντολών επιστροφής μετά την ολοκλήρωσή τους" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Μοτίβο αναφοράς εντολής πώλησης" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής πώλησης" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Προεπιλεγμένη αποστολή εντολής πώλησης" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Ενεργοποίηση δημιουργίας προεπιλεγμένης αποστολής με τις εντολές πώλησης" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Επεξεργασία ολοκληρωμένων εντολών πώλησης" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Επιτρέπει την επεξεργασία εντολών πώλησης μετά την αποστολή ή ολοκλήρωσή τους" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "Η αποστολή απαιτεί έλεγχο" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "Αποτροπή ολοκλήρωσης αποστολών μέχρι να ελεγχθούν τα είδη" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Σήμανση αποσταλμένων εντολών ως ολοκληρωμένων" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Οι εντολές πώλησης που επισημαίνονται ως αποσταλμένες ολοκληρώνονται αυτόματα, παρακάμπτοντας την κατάσταση «απεσταλμένο»" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Μοτίβο αναφοράς εντολής αγοράς" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής αγοράς" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Επεξεργασία ολοκληρωμένων εντολών αγοράς" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Επιτρέπει την επεξεργασία εντολών αγοράς μετά την αποστολή ή ολοκλήρωσή τους" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "Μετατροπή νομίσματος" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "Μετατροπή της αξίας είδους στο βασικό νόμισμα κατά την παραλαβή αποθέματος" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Αυτόματη ολοκλήρωση εντολών αγοράς" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Αυτόματη σήμανση εντολών αγοράς ως ολοκληρωμένων όταν έχουν παραληφθεί όλα τα είδη" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Ενεργοποίηση υπενθύμισης κωδικού" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Ενεργοποίηση λειτουργίας υπενθύμισης κωδικού στις σελίδες σύνδεσης" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Ενεργοποίηση εγγραφής" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Ενεργοποίηση αυτοεγγραφής χρηστών στις σελίδες σύνδεσης" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Ενεργοποίηση SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Ενεργοποίηση SSO στις σελίδες σύνδεσης" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Ενεργοποίηση εγγραφής μέσω SSO" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Ενεργοποίηση αυτοεγγραφής μέσω SSO στις σελίδες σύνδεσης" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "Ενεργοποίηση συγχρονισμού ομάδων SSO" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Ενεργοποίηση συγχρονισμού ομάδων InvenTree με ομάδες από τον IdP" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "Κλειδί ομάδας SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Το όνομα του πεδίου ομάδων που παρέχεται από τον IdP" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "Χάρτης ομάδων SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Χαρτογράφηση ομάδων SSO σε τοπικές ομάδες InvenTree. Αν η ομάδα δεν υπάρχει, θα δημιουργηθεί." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "Αφαίρεση ομάδων εκτός SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Αν πρέπει να αφαιρούνται ομάδες από τον χρήστη όταν δεν παρέχονται από τον IdP. Η απενεργοποίηση μπορεί να προκαλέσει προβλήματα ασφαλείας" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Απαίτηση email" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Απαίτηση συμπλήρωσης email κατά την εγγραφή" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Αυτόματη συμπλήρωση χρηστών SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Αυτόματη συμπλήρωση στοιχείων χρήστη από τα δεδομένα SSO" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Email δύο φορές" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Κατά την εγγραφή ζητείται το email δύο φορές" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Κωδικός δύο φορές" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Κατά την εγγραφή ζητείται ο κωδικός δύο φορές" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Επιτρεπόμενοι τομείς" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Περιορισμός εγγραφής σε συγκεκριμένους τομείς (χωρισμένοι με κόμμα, ξεκινούν με @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Ομάδα κατά την εγγραφή" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Ομάδα στην οποία εκχωρούνται οι νέοι χρήστες κατά την εγγραφή. Με ενεργό SSO sync, χρησιμοποιείται μόνο όταν δεν μπορεί να δοθεί ομάδα από τον IdP." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Επιβολή MFA" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Οι χρήστες πρέπει να χρησιμοποιούν πολυπαραγοντική ασφάλεια" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Έλεγχος plugins κατά την εκκίνηση" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Έλεγχος ότι όλα τα plugins είναι εγκατεστημένα κατά την εκκίνηση – χρήσιμο σε container περιβάλλοντα" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Έλεγχος για ενημερώσεις plugin" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Ενεργοποίηση περιοδικών ελέγχων για ενημερώσεις εγκατεστημένων plugins" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Ενεργοποίηση URL integration" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Ενεργοποίηση προσθήκης URL routes από plugins" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Ενεργοποίηση ενσωμάτωσης στην πλοήγηση" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Ενεργοποίηση ενσωμάτωσης των plugins στην πλοήγηση" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Ενεργοποίηση ενσωμάτωσης εφαρμογών" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Ενεργοποίηση προσθήκης εφαρμογών από plugins" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Ενεργοποίηση ενσωμάτωσης χρονοπρογραμματισμού" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Ενεργοποίηση εκτέλεσης χρονοπρογραμματισμένων εργασιών από plugins" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Ενεργοποίηση ενσωμάτωσης γεγονότων" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Ενεργοποίηση απόκρισης plugins σε εσωτερικά γεγονότα" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Ενεργοποίηση ενσωμάτωσης διεπαφής" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Ενεργοποίηση ενσωμάτωσης plugins στη διεπαφή χρήστη" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "Ενεργοποίηση ενσωμάτωσης email" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Ενεργοποίηση επεξεργασίας εισερχόμενων/εξερχόμενων emails από plugins" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "Ενεργοποίηση κωδικών έργου" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "Ενεργοποίηση κωδικών έργου για την παρακολούθηση projects" -#: common/setting/system.py:1083 -msgid "Enable Stock History" -msgstr "Ενεργοποίηση ιστορικού αποθέματος" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" +msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "Ενεργοποίηση καταγραφής ιστορικών επιπέδων και αξιών αποθέματος" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Εξαίρεση εξωτερικών τοποθεσιών" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" -msgstr "Εξαίρεση ειδών αποθέματος σε εξωτερικές τοποθεσίες από τους υπολογισμούς ιστορικού" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Περίοδος αυτόματης απογραφής" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" -msgstr "Αριθμός ημερών μεταξύ αυτόματων καταγραφών ιστορικού αποθέματος" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" +msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "Διαγραφή παλαιών εγγραφών ιστορικού αποθέματος" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" +msgstr "" -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "Διαγραφή εγγραφών ιστορικού αποθέματος παλαιότερων από τον καθορισμένο αριθμό ημερών" +#: common/setting/system.py:1135 +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "Διάστημα διαγραφής ιστορικού αποθέματος" +#: common/setting/system.py:1141 +msgid "Stocktake Deletion Interval" +msgstr "" -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "Οι εγγραφές ιστορικού αποθέματος θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" +#: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 msgid "Display Users full names" msgstr "Εμφάνιση πλήρους ονόματος χρηστών" -#: common/setting/system.py:1124 +#: common/setting/system.py:1168 msgid "Display Users full names instead of usernames" msgstr "Εμφάνιση του πλήρους ονόματος των χρηστών αντί για το όνομα χρήστη" -#: common/setting/system.py:1129 +#: common/setting/system.py:1173 msgid "Display User Profiles" msgstr "Εμφάνιση προφίλ χρηστών" -#: common/setting/system.py:1130 +#: common/setting/system.py:1174 msgid "Display Users Profiles on their profile page" msgstr "Εμφάνιση προφίλ χρηστών στη σελίδα προφίλ τους" -#: common/setting/system.py:1135 +#: common/setting/system.py:1179 msgid "Enable Test Station Data" msgstr "Ενεργοποίηση δεδομένων σταθμού δοκιμών" -#: common/setting/system.py:1136 +#: common/setting/system.py:1180 msgid "Enable test station data collection for test results" msgstr "Ενεργοποίηση συλλογής δεδομένων σταθμού δοκιμών για τα αποτελέσματα δοκιμών" -#: common/setting/system.py:1141 +#: common/setting/system.py:1185 msgid "Enable Machine Ping" msgstr "Ενεργοποίηση ping μηχανημάτων" -#: common/setting/system.py:1143 +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Ενεργοποίηση περιοδικού ping των καταχωρημένων μηχανημάτων για έλεγχο της κατάστασής τους" @@ -3911,366 +3956,370 @@ msgstr "Το προϊόν είναι ενεργό" msgid "Manufacturer is Active" msgstr "Ο κατασκευαστής είναι ενεργός" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "Το προϊόν προμηθευτή είναι ενεργό" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "Το εσωτερικό προϊόν είναι ενεργό" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "Ο προμηθευτής είναι ενεργός" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Κατασκευαστής" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Εταιρεία" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "Διαθέτει απόθεμα" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Εταιρείες" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Περιγραφή εταιρείας" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Περιγραφή της εταιρείας" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Ιστότοπος" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "URL ιστοτόπου εταιρείας" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Τηλέφωνο" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Τηλέφωνο επικοινωνίας" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Email επικοινωνίας" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Επαφή" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Σημείο επαφής" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Σύνδεσμος σε εξωτερικές πληροφορίες εταιρείας" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "Είναι αυτή η εταιρεία ενεργή;" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "Είναι πελάτης" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Πουλάτε είδη σε αυτή την εταιρεία;" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "Είναι προμηθευτής" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Αγοράζετε είδη από αυτή την εταιρεία;" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Είναι κατασκευαστής" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Κατασκευάζει αυτή η εταιρεία προϊόντα;" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Προεπιλεγμένο νόμισμα που χρησιμοποιείται για αυτή την εταιρεία" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "ΑΦΜ" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "ΑΦΜ εταιρείας" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Διεύθυνση" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Διευθύνσεις" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Επιλογή εταιρείας" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Τίτλος διεύθυνσης" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Τίτλος που περιγράφει την εγγραφή διεύθυνσης" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Κύρια διεύθυνση" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Ορισμός ως κύριας διεύθυνσης" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Γραμμή 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Γραμμή διεύθυνσης 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Γραμμή 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Γραμμή διεύθυνσης 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Ταχυδρομικός κώδικας" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Πόλη/Περιοχή" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Πόλη/περιοχή ταχυδρομικού κώδικα" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Πολιτεία/Επαρχία" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Πολιτεία ή επαρχία" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Χώρα" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Χώρα διεύθυνσης" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Σημειώσεις αποστολής για courier" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Σημειώσεις για την αποστολή με courier" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Εσωτερικές σημειώσεις αποστολής" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Σημειώσεις αποστολής για εσωτερική χρήση" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Σύνδεσμος σε πληροφορίες διεύθυνσης (εξωτερικό)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Προϊόν κατασκευαστή" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Βασικό προϊόν" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Επιλογή προϊόντος" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Επιλογή κατασκευαστή" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Κωδικός προϊόντος κατασκευαστή" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL εξωτερικού συνδέσμου προϊόντος κατασκευαστή" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Περιγραφή προϊόντος κατασκευαστή" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Οι μονάδες συσκευασίας πρέπει να είναι συμβατές με τις μονάδες του βασικού προϊόντος" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Οι μονάδες συσκευασίας πρέπει να είναι μεγαλύτερες από το μηδέν" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Το συνδεδεμένο προϊόν κατασκευαστή πρέπει να αναφέρεται στο ίδιο βασικό προϊόν" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Προμηθευτής" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Επιλογή προμηθευτή" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Κωδικός αποθέματος προμηθευτή" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Είναι αυτό το προϊόν προμηθευτή ενεργό;" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Επιλογή προϊόντος κατασκευαστή" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL εξωτερικού συνδέσμου προϊόντος προμηθευτή" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Περιγραφή προϊόντος προμηθευτή" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "βασικό κόστος" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Ελάχιστη χρέωση (π.χ. χρέωση αποθήκευσης)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Συσκευασία" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Συσκευασία προϊόντος" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Ποσότητα ανά συσκευασία" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Συνολική ποσότητα που παρέχεται σε μία συσκευασία. Αφήστε κενό για μεμονωμένα είδη." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "πολλαπλάσιο" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Πολλαπλάσιο παραγγελίας" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Ποσότητα διαθέσιμη από τον προμηθευτή" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Η διαθεσιμότητα ενημερώθηκε" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Ημερομηνία τελευταίας ενημέρωσης δεδομένων διαθεσιμότητας" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Κλιμακωτή τιμή προμηθευτή" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "Επιστρέφει την συμβολοσειρά αναπαράστασης της κύριας διεύθυνσης. Αυτή η ιδιότητα υπάρχει για λόγους συμβατότητας προς τα πίσω." - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Προεπιλεγμένο νόμισμα που χρησιμοποιείται για αυτόν τον προμηθευτή" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Όνομα εταιρείας" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "Σε απόθεμα" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "Κλιμακωτές τιμές" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Προέκυψε σφάλμα κατά την εξαγωγή δεδομένων" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "Το plugin εξαγωγής δεδομένων επέστρεψε λανθασμένη μορφή δεδομένων" @@ -4318,119 +4367,119 @@ msgstr "Τοποθετήθηκε" msgid "Invalid status code" msgstr "Μη έγκυρος κωδικός κατάστασης" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Αρχείο Δεδομένων" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "Αρχείο δεδομένων για εισαγωγή" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Στήλες" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "Τύπος μοντέλου στόχου για αυτή τη συνεδρία εισαγωγής" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "Κατάσταση εισαγωγής" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Προεπιλεγμένες τιμές πεδίων" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "Υπερισχύσεις πεδίων" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Φίλτρα πεδίων" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "Ενημέρωση υπαρχόντων εγγραφών" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "Αν είναι ενεργό, οι υπάρχουσες εγγραφές θα ενημερωθούν με νέα δεδομένα" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "Κάποια απαιτούμενα πεδία δεν έχουν αντιστοιχιστεί" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "ID" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "Υπάρχον αναγνωριστικό βάσης δεδομένων για την εγγραφή" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "Η στήλη έχει ήδη αντιστοιχιστεί σε πεδίο της βάσης δεδομένων" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "Το πεδίο έχει ήδη αντιστοιχιστεί σε στήλη δεδομένων" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "Η αντιστοίχιση στήλης πρέπει να συνδέεται με έγκυρη συνεδρία εισαγωγής" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "Η στήλη δεν υπάρχει στο αρχείο δεδομένων" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "Το πεδίο δεν υπάρχει στο μοντέλο προορισμού" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "Το επιλεγμένο πεδίο είναι μόνο για ανάγνωση" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Συνεδρία εισαγωγής" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Πεδίο" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Στήλη" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Δείκτης γραμμής" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "Αρχικά δεδομένα γραμμής" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Σφάλματα" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Έγκυρο" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "Απαιτείται ID για την ενημέρωση υπαρχόντων εγγραφών." -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Δεν βρέθηκε εγγραφή με το παρεχόμενο ID" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Δόθηκε μη έγκυρη μορφή ID" @@ -4530,7 +4579,7 @@ msgstr "Αριθμός αντιτύπων προς εκτύπωση για κά msgid "Connected" msgstr "Συνδεδεμένος" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Άγνωστο" @@ -4658,105 +4707,117 @@ msgstr "Μέγιστη πρόοδος" msgid "Maximum value for progress type, required if type=progress" msgstr "Μέγιστη τιμή για τύπο προόδου, απαιτείται αν type=progress" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Αναφορά παραγγελίας" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "Σε εκκρεμότητα" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "Έχει κωδικό έργου" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Δημιουργήθηκε από" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "Δημιουργήθηκε πριν" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Δημιουργήθηκε μετά" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "Έχει ημερομηνία έναρξης" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "Ημερομηνία έναρξης πριν" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "Ημερομηνία έναρξης μετά" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "Έχει ημερομηνία στόχο" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "Ημερομηνία στόχος πριν" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "Ημερομηνία στόχος μετά" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Έχει τιμολόγηση" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "Ολοκληρώθηκε πριν" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "Ολοκληρώθηκε μετά" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "Εξωτερική εντολή παραγωγής" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Παραγγελία" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "Η παραγγελία ολοκληρώθηκε" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Εσωτερικό προϊόν" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Η παραγγελία είναι σε εκκρεμότητα" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Ολοκληρώθηκε" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "Έχει αποστολή" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Εντολή αγοράς" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Εντολή αγοράς" msgid "Sales Order" msgstr "Εντολές Πώλησης" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Συνολική τιμή" msgid "Total price for this order" msgstr "Συνολική τιμή για αυτή την παραγγελία" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Νόμισμα παραγγελίας" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Νόμισμα για αυτή την παραγγελία (αφήστε κενό για χρήση της προεπιλογής εταιρείας)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "Αυτή η παραγγελία είναι κλειδωμένη και δεν μπορεί να τροποποιηθεί" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Η επαφή δεν αντιστοιχεί στην επιλεγμένη εταιρεία" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Η ημερομηνία έναρξης πρέπει να είναι πριν από την ημερομηνία στόχο" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "Η διεύθυνση δεν αντιστοιχεί στην επιλεγμένη εταιρεία" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Περιγραφή παραγγελίας (προαιρετικά)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Επιλογή κωδικού έργου για αυτή την παραγγελία" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Σύνδεσμος σε εξωτερική σελίδα" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "Ημερομηνία έναρξης" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Προγραμματισμένη ημερομηνία έναρξης για αυτή την παραγγελία" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Επιθυμητή Προθεσμία" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Αναμενόμενη ημερομηνία παράδοσης παραγγελίας. Η παραγγελία θα θεωρείται εκπρόθεσμη μετά από αυτή την ημερομηνία." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Ημερομηνία έκδοσης" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Ημερομηνία έκδοσης της παραγγελίας" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την παραγγελία" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Σημείο επαφής για αυτή την παραγγελία" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Διεύθυνση εταιρείας για αυτή την παραγγελία" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Αναφορά παραγγελίας" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Κατάσταση" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Κατάσταση εντολής αγοράς" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Εταιρεία από την οποία παραγγέλνονται τα είδη" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Αναφορά προμηθευτή" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Κωδικός αναφοράς παραγγελίας προμηθευτή" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "παραλήφθηκε από" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Ημερομηνία ολοκλήρωσης της παραγγελίας" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Προορισμός" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "Προορισμός για τα παραληφθέντα είδη" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Ο προμηθευτής προϊόντος πρέπει να ταιριάζει με τον προμηθευτή της εντολής αγοράς" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Η γραμμή δεν αντιστοιχεί στην εντολή αγοράς" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Στη γραμμή λείπει συνδεδεμένο προϊόν" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Η ποσότητα πρέπει να είναι θετικός αριθμός" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Πελάτης" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Εταιρεία στην οποία πωλούνται τα είδη" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "Κατάσταση εντολής πώλησης" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Αναφορά πελάτη " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Κωδικός αναφοράς παραγγελίας πελάτη" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Ημερομηνία αποστολής" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "απεστάλη από" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "Η παραγγελία είναι ήδη ολοκληρωμένη" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "Η παραγγελία είναι ήδη ακυρωμένη" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Μόνο μια ανοικτή παραγγελία μπορεί να σημειωθεί ως ολοκληρωμένη" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες αποστολές" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες δεσμεύσεις αποθέματος" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες γραμμές" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "Η παραγγελία είναι κλειδωμένη και δεν μπορεί να τροποποιηθεί" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Ποσότητα είδους" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Αναφορά γραμμής" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Σημειώσεις γραμμής" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Ημερομηνία στόχος για αυτή τη γραμμή (αφήστε κενό για χρήση της ημερομηνίας στόχου από την παραγγελία)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Περιγραφή γραμμής (προαιρετικά)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Πρόσθετο πλαίσιο για αυτή τη γραμμή" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Τιμή μονάδας" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "Γραμμή εντολής αγοράς" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "Το προϊόν προμηθευτή πρέπει να ταιριάζει με τον προμηθευτή" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "Η εντολή παραγωγής πρέπει να έχει σημειωθεί ως εξωτερική" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "Οι εντολές παραγωγής μπορούν να συνδεθούν μόνο με προϊόντα συναρμολόγησης" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "Το προϊόν της εντολής παραγωγής πρέπει να ταιριάζει με το προϊόν της γραμμής" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Προϊόν προμηθευτή" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Παραλήφθηκε" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Αριθμός ειδών που παραλήφθηκαν" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Τιμή αγοράς" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Τιμή μονάδας αγοράς" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "Εξωτερική εντολή παραγωγής που θα καλυφθεί από αυτή τη γραμμή" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "Επιπλέον γραμμή εντολής αγοράς" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "Γραμμή εντολής πώλησης" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "Μόνο πωλήσιμα προϊόντα μπορούν να αντιστοιχιστούν σε εντολή πώλησης" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Τιμή πώλησης" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Τιμή μονάδας πώλησης" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Αποστάλθηκε" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Ποσότητα που αποστάλθηκε" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "Αποστολή εντολής πώλησης" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "Η διεύθυνση αποστολής πρέπει να αντιστοιχεί στον πελάτη" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "Διεύθυνση αποστολής για αυτή την αποστολή" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Ημερομηνία αποστολής" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Ημερομηνία παράδοσης" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Ημερομηνία παράδοσης της αποστολής" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Έλεγχος από" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Χρήστης που έλεγξε αυτή την αποστολή" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Αποστολή" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Αριθμός αποστολής" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Αριθμός παρακολούθησης" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Πληροφορίες παρακολούθησης αποστολής" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Αριθμός τιμολογίου" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Αριθμός αναφοράς του σχετικού τιμολογίου" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "Η αποστολή έχει ήδη σταλεί" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "Η αποστολή δεν έχει δεσμευμένα είδη αποθέματος" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "Η αποστολή πρέπει να ελεγχθεί πριν μπορέσει να ολοκληρωθεί" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "Επιπλέον γραμμή εντολής πώλησης" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "Δέσμευση αποθέματος εντολής πώλησης" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "Δεν έχει αντιστοιχιστεί είδος αποθέματος" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "Δεν είναι δυνατή η δέσμευση είδους αποθέματος σε γραμμή με διαφορετικό προϊόν" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "Δεν είναι δυνατή η δέσμευση αποθέματος σε γραμμή χωρίς προϊόν" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Η ποσότητα δέσμευσης δεν μπορεί να υπερβαίνει την ποσότητα αποθέματος" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριοποιημένο είδος αποθέματος" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "Η εντολή πώλησης δεν αντιστοιχεί στην αποστολή" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Η αποστολή δεν αντιστοιχεί στην εντολή πώλησης" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Γραμμή" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Αναφορά αποστολής εντολής πώλησης" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Είδος" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Επιλογή είδους αποθέματος προς δέσμευση" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Εισαγωγή ποσότητας δέσμευσης αποθέματος" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Αναφορά εντολής επιστροφής" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Εταιρεία από την οποία επιστρέφονται τα είδη" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Κατάσταση εντολής επιστροφής" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "Γραμμή εντολής επιστροφής" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "Πρέπει να καθοριστεί είδος αποθέματος" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "Η ποσότητα επιστροφής υπερβαίνει την ποσότητα αποθέματος" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "Η ποσότητα επιστροφής πρέπει να είναι μεγαλύτερη από το μηδέν" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "Μη έγκυρη ποσότητα για σειριοποιημένο είδος αποθέματος" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Επιλογή είδους προς επιστροφή από τον πελάτη" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Ημερομηνία παραλαβής" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "Η ημερομηνία κατά την οποία παραλήφθηκε αυτό το επιστρεφόμενο είδος" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Έκβαση" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Έκβαση για αυτή τη γραμμή" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Κόστος που σχετίζεται με την επιστροφή ή επισκευή για αυτή τη γραμμή" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "Επιπλέον γραμμή εντολής επιστροφής" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID παραγγελίας" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID της παραγγελίας προς αντιγραφή" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Αντιγραφή γραμμών" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Αντιγραφή γραμμών από την αρχική παραγγελία" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Αντιγραφή επιπλέον γραμμών" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Αντιγραφή επιπλέον γραμμών από την αρχική παραγγελία" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Αντιγραφή παραμέτρων" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Γραμμές" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Ολοκληρωμένες γραμμές" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Αντιγραφή παραγγελίας" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Καθορίστε επιλογές για την αντιγραφή αυτής της παραγγελίας" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Μη έγκυρο ID παραγγελίας" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Όνομα προμηθευτή" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "Η παραγγελία δεν μπορεί να ακυρωθεί" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Να επιτρέπεται το κλείσιμο της παραγγελίας με μη ολοκληρωμένες γραμμές" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "Η παραγγελία έχει μη ολοκληρωμένες γραμμές" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "Η παραγγελία δεν είναι ανοικτή" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "Αυτόματη τιμολόγηση" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Αυτόματος υπολογισμός τιμής αγοράς βάσει των δεδομένων προϊόντος προμηθευτή" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Νόμισμα τιμής αγοράς" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Συγχώνευση ειδών" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Συγχώνευση ειδών με το ίδιο προϊόν, προορισμό και ημερομηνία στόχο σε μία γραμμή" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Εσωτερικός κωδικός προϊόντος" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "Εσωτερική ονομασία προϊόντος" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "Πρέπει να καθοριστεί προϊόν προμηθευτή" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "Πρέπει να καθοριστεί εντολή αγοράς" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "Ο προμηθευτής πρέπει να ταιριάζει με την εντολή αγοράς" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "Η εντολή αγοράς πρέπει να ταιριάζει με τον προμηθευτή" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Γραμμή" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Επιλογή τοποθεσίας προορισμού για τα παραληφθέντα είδη" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Εισαγάγετε κωδικό παρτίδας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ημερομηνία λήξης" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "Εισαγάγετε ημερομηνία λήξης για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Εισαγάγετε σειριακούς αριθμούς για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "Παράκαμψη πληροφοριών συσκευασίας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "Πρόσθετη σημείωση για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Σαρωμένο barcode" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Το barcode χρησιμοποιείται ήδη" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Πρέπει να δοθούν γραμμές" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "Πρέπει να καθοριστεί τοποθεσία προορισμού" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Οι δοθείσες τιμές barcode πρέπει να είναι μοναδικές" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "Αποστολές" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Ολοκληρωμένες αποστολές" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Νόμισμα τιμής πώλησης" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "Δεσμευμένα είδη" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Δεν δόθηκαν λεπτομέρειες αποστολής" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "Η γραμμή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "Η ποσότητα πρέπει να είναι θετική" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Εισαγάγετε σειριακούς αριθμούς προς δέσμευση" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "Η αποστολή έχει ήδη σταλεί" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "Η αποστολή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "Δεν βρέθηκε αντιστοίχιση για τους παρακάτω σειριακούς αριθμούς" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "Οι παρακάτω σειριακοί αριθμοί δεν είναι διαθέσιμοι" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Γραμμή εντολής επιστροφής" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "Η γραμμή δεν αντιστοιχεί στην εντολή επιστροφής" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "Η γραμμή έχει ήδη παραληφθεί" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "Είδη μπορούν να παραληφθούν μόνο για παραγγελίες που είναι σε εξέλιξη" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "Ποσότητα προς επιστροφή" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Νόμισμα τιμής γραμμής" @@ -5532,1174 +5613,1226 @@ msgstr "Επιστροφή χρημάτων" msgid "Reject" msgstr "Απόρριψη" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Εκπρόθεσμη εντολή αγοράς" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Η εντολή αγοράς {po} είναι πλέον εκπρόθεσμη" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Εκπρόθεσμη εντολή πώλησης" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Η εντολή πώλησης {so} είναι πλέον εκπρόθεσμη" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Εκπρόθεσμη εντολή επιστροφής" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "Η εντολή επιστροφής {ro} είναι πλέον εκπρόθεσμη" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Με αστέρι" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Φιλτράρισμα κατά κατηγορίες με αστέρι" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Βάθος" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Φιλτράρισμα κατά βάθος κατηγορίας" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Ανώτατο επίπεδο" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Φιλτράρισμα κατά κατηγορίες ανώτατου επιπέδου" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Κατά κληρονομικότητα" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Συμπερίληψη υποκατηγοριών στα φιλτραρισμένα αποτελέσματα" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Γονική" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Φιλτράρισμα κατά γονική κατηγορία" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Εξαίρεση υποκατηγοριών κάτω από την καθορισμένη κατηγορία" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Έχει αποτελέσματα" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Είναι παραλλαγή" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Είναι αναθεώρηση" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Έχει αναθεωρήσεις" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "Έγκυρο BOM" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "Κατηγορίες κατά κληρονομικότητα" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "Αν είναι αληθές, συμπεριλαμβάνονται είδη σε θυγατρικές κατηγορίες της δοσμένης κατηγορίας" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Φιλτράρισμα κατά αριθμητικό ID κατηγορίας ή τη λέξη 'null'" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Το προϊόν συναρμολόγησης είναι υπό δοκιμή" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "Το προϊόν Προϊόντος είναι υπό δοκιμή" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "Χρήσεις" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Κατηγορία προϊόντος" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Κατηγορίες προϊόντων" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Προεπιλεγμένη τοποθεσία" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Προεπιλεγμένη τοποθεσία για προϊόντα σε αυτή την κατηγορία" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Δομική" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Τα προϊόντα δεν μπορούν να αντιστοιχιστούν απευθείας σε δομική κατηγορία, αλλά μπορούν να αντιστοιχιστούν σε θυγατρικές κατηγορίες." -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Προεπιλεγμένες λέξεις-κλειδιά" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Προεπιλεγμένες λέξεις-κλειδιά για προϊόντα σε αυτή την κατηγορία" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Εικονίδιο" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Εικονίδιο (προαιρετικό)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "Δεν μπορείτε να κάνετε αυτή την κατηγορία προϊόντων δομική επειδή κάποια προϊόντα έχουν ήδη αντιστοιχιστεί σε αυτή!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "Πρότυπο παραμέτρου κατηγορίας προϊόντος" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Προεπιλεγμένη τιμή" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Προεπιλεγμένη τιμή παραμέτρου" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Προϊόντα" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "Δεν είναι δυνατή η διαγραφή αυτού του προϊόντος επειδή είναι κλειδωμένο" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "Δεν είναι δυνατή η διαγραφή αυτού του προϊόντος επειδή είναι ακόμη ενεργό" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "Δεν είναι δυνατή η διαγραφή αυτού του προϊόντος επειδή χρησιμοποιείται σε συναρμολόγηση" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Το προϊόν '{self}' δεν μπορεί να χρησιμοποιηθεί στο BOM για '{parent}' (αναδρομικά)" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Το προϊόν '{parent}' χρησιμοποιείται στο BOM για '{self}' (αναδρομικά)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "Το IPN πρέπει να ταιριάζει με το πρότυπο regex {pattern}" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "Το προϊόν δεν μπορεί να είναι αναθεώρηση του εαυτού του" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "Δεν μπορεί να γίνει αναθεώρηση προϊόντος που είναι ήδη αναθεώρηση" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "Πρέπει να καθοριστεί κωδικός αναθεώρησης" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "Οι αναθεωρήσεις επιτρέπονται μόνο για προϊόντα συναρμολόγησης" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "Δεν μπορεί να γίνει αναθεώρηση προϊόντος προτύπου" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "Το γονικό προϊόν πρέπει να αντιστοιχεί στο ίδιο πρότυπο" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Υπάρχει ήδη είδος αποθέματος με αυτόν τον σειριακό αριθμό" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Δεν επιτρέπεται διπλό IPN στις ρυθμίσεις προϊόντος" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Υπάρχει ήδη διπλή αναθεώρηση προϊόντος." -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Υπάρχει ήδη προϊόν με αυτό το όνομα, IPN και αναθεώρηση." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Τα προϊόντα δεν μπορούν να αντιστοιχιστούν σε δομικές κατηγορίες προϊόντων!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Όνομα προϊόντος" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Είναι πρότυπο" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Είναι αυτό το προϊόν προϊόν προτύπου;" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Είναι αυτό το προϊόν παραλλαγή άλλου προϊόντος;" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Παραλλαγή του" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Περιγραφή προϊόντος (προαιρετικά)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Λέξεις-κλειδιά" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Λέξεις-κλειδιά προϊόντος για βελτίωση της ορατότητας στα αποτελέσματα αναζήτησης" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Κατηγορία προϊόντος" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Αριθμός αναθεώρησης ή έκδοσης προϊόντος" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Αναθεώρηση" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Είναι αυτό το προϊόν αναθεώρηση άλλου προϊόντος;" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "Αναθεώρηση του" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Πού αποθηκεύεται συνήθως αυτό το είδος;" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Προεπιλεγμένος προμηθευτής" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Προεπιλεγμένο προϊόν προμηθευτή" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Προεπιλεγμένη λήξη" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Χρόνος λήξης (σε ημέρες) για είδη αποθέματος αυτού του προϊόντος" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Ελάχιστο απόθεμα" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Ελάχιστο επιτρεπτό επίπεδο αποθέματος" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Μονάδες μέτρησης για αυτό το προϊόν" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Μπορεί αυτό το προϊόν να κατασκευαστεί από άλλα προϊόντα;" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "Μπορεί αυτό το προϊόν να χρησιμοποιηθεί για την κατασκευή άλλων προϊόντων;" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "Έχει αυτό το προϊόν ιχνηλάτηση για μοναδικά είδη;" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "Μπορούν να καταχωρηθούν αποτελέσματα δοκιμών για αυτό το προϊόν;" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "Μπορεί αυτό το προϊόν να αγοραστεί από εξωτερικούς προμηθευτές;" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "Μπορεί αυτό το προϊόν να πωληθεί σε πελάτες;" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Είναι αυτό το προϊόν ενεργό;" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "Κλειδωμένα προϊόντα δεν μπορούν να τροποποιηθούν" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "Είναι αυτό ένα εικονικό προϊόν, όπως προϊόν λογισμικού ή άδεια;" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "Το BOM έχει επικυρωθεί" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "Είναι το BOM για αυτό το προϊόν έγκυρο;" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Άθροισμα ελέγχου BOM" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Αποθηκευμένο άθροισμα ελέγχου BOM" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "Έλεγχος BOM από" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "Ημερομηνία ελέγχου BOM" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Χρήστης δημιουργίας" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Ιδιοκτήτης υπεύθυνος για αυτό το προϊόν" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Πώληση πολλαπλάσιων" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Νόμισμα που χρησιμοποιείται για την προσωρινή αποθήκευση υπολογισμών τιμολόγησης" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Ελάχιστο κόστος BOM" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Ελάχιστο κόστος προϊόντων Προϊόντων" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Μέγιστο κόστος BOM" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Μέγιστο κόστος προϊόντων Προϊόντων" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Ελάχιστο κόστος αγοράς" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Ελάχιστο ιστορικό κόστος αγοράς" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Μέγιστο κόστος αγοράς" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Μέγιστο ιστορικό κόστος αγοράς" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Ελάχιστη εσωτερική τιμή" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Ελάχιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Μέγιστη εσωτερική τιμή" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Μέγιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Ελάχιστη τιμή προμηθευτή" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Ελάχιστη τιμή προϊόντος από εξωτερικούς προμηθευτές" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Μέγιστη τιμή προμηθευτή" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Μέγιστη τιμή προϊόντος από εξωτερικούς προμηθευτές" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Ελάχιστο κόστος παραλλαγής" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Υπολογισμένο ελάχιστο κόστος προϊόντων παραλλαγών" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Μέγιστο κόστος παραλλαγής" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Υπολογισμένο μέγιστο κόστος προϊόντων παραλλαγών" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Ελάχιστο κόστος" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Παράκαμψη ελάχιστου κόστους" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Μέγιστο κόστος" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Παράκαμψη μέγιστου κόστους" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Υπολογισμένο συνολικό ελάχιστο κόστος" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Υπολογισμένο συνολικό μέγιστο κόστος" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Ελάχιστη τιμή πώλησης" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Ελάχιστη τιμή πώλησης βάσει κλιμακωτών τιμών" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Μέγιστη τιμή πώλησης" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Μέγιστη τιμή πώλησης βάσει κλιμακωτών τιμών" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Ελάχιστο κόστος πώλησης" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Ελάχιστη ιστορική τιμή πώλησης" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Μέγιστο κόστος πώλησης" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Μέγιστη ιστορική τιμή πώλησης" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Προϊόν για απογραφή" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Αριθμός ειδών" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "Αριθμός μεμονωμένων εγγραφών αποθέματος κατά τον χρόνο απογραφής" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "Συνολικό διαθέσιμο απόθεμα κατά τον χρόνο απογραφής" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Ημερομηνία" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Ημερομηνία που πραγματοποιήθηκε η απογραφή" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Ελάχιστο κόστος αποθέματος" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Εκτιμώμενο ελάχιστο κόστος αποθέματος σε διαθεσιμότητα" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Μέγιστο κόστος αποθέματος" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "Εκτιμώμενο μέγιστο κόστος αποθέματος σε διαθεσιμότητα" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "Κλιμακωτή τιμή πώλησης προϊόντος" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "Πρότυπο δοκιμής προϊόντος" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Μη έγκυρο όνομα προτύπου - πρέπει να περιλαμβάνει τουλάχιστον έναν αλφαριθμητικό χαρακτήρα" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Πρότυπα δοκιμών μπορούν να δημιουργηθούν μόνο για προϊόντα που είναι υπό δοκιμή" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "Υπάρχει ήδη πρότυπο δοκιμής με το ίδιο κλειδί για το προϊόν" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Όνομα δοκιμής" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Εισαγάγετε όνομα για τη δοκιμή" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "Κλειδί δοκιμής" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "Απλοποιημένο κλειδί για τη δοκιμή" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Περιγραφή δοκιμής" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Εισαγάγετε περιγραφή για αυτή τη δοκιμή" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "Είναι αυτή η δοκιμή ενεργή;" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Απαραίτητη" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Απαιτείται η επιτυχής ολοκλήρωση αυτής της δοκιμής;" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Απαιτεί τιμή" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "Απαιτεί αυτή η δοκιμή τιμή κατά την προσθήκη αποτελέσματος δοκιμής;" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Απαιτεί συνημμένο" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "Απαιτεί αυτή η δοκιμή συνημμένο αρχείο κατά την προσθήκη αποτελέσματος δοκιμής;" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "Έγκυρες επιλογές για αυτή τη δοκιμή (διαχωρισμένες με κόμμα)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση είναι κλειδωμένη" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση παραλλαγής είναι κλειδωμένη" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Επιλέξτε γονικό προϊόν" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Υποπροϊόν" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Επιλέξτε προϊόν που θα χρησιμοποιηθεί στο BOM" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "Ποσότητα BOM για αυτό το στοιχείο BOM" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Αυτό το στοιχείο BOM είναι προαιρετικό" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Αυτό το στοιχείο BOM είναι αναλώσιμο (δεν παρακολουθείται στις εντολές παραγωγής)" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "Ποσότητα ρύθμισης" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Επιπλέον απαιτούμενη ποσότητα για μια παραγωγή, για να ληφθούν υπόψη οι απώλειες ρύθμισης" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "Φθορά" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Εκτιμώμενη φθορά για μια παραγωγή, εκφρασμένη ως ποσοστό (0-100)" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "Πολλαπλάσιο στρογγυλοποίησης" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Στρογγυλοποίηση προς τα πάνω της απαιτούμενης ποσότητας παραγωγής στο πλησιέστερο πολλαπλάσιο αυτής της τιμής" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Αναφορά στοιχείου BOM" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Σημειώσεις στοιχείου BOM" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Άθροισμα ελέγχου" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "Άθροισμα ελέγχου γραμμής BOM" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Επικυρωμένο" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Αυτό το στοιχείο BOM έχει επικυρωθεί" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Κληρονομείται" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Αυτό το στοιχείο BOM κληρονομείται από τα BOM για προϊόντα παραλλαγών" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Είδη αποθέματος για προϊόντα παραλλαγών μπορούν να χρησιμοποιηθούν για αυτό το στοιχείο BOM" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Η ποσότητα πρέπει να είναι ακέραια τιμή για προϊόντα με ιχνηλάτηση" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Πρέπει να καθοριστεί υποπροϊόν" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "Εναλλακτικό στοιχείο BOM" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "Το εναλλακτικό προϊόν δεν μπορεί να είναι το ίδιο με το κύριο προϊόν" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Γονικό στοιχείο BOM" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Εναλλακτικό προϊόν" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Προϊόν 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Προϊόν 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Επιλέξτε σχετικό προϊόν" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "Σημείωση για αυτή τη σχέση" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "Δεν μπορεί να δημιουργηθεί σχέση προϊόντος μεταξύ ενός προϊόντος και του εαυτού του" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "Υπάρχει ήδη διπλή σχέση" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Γονική κατηγορία" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Γονική κατηγορία προϊόντος" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Υποκατηγορίες" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "Αποτελέσματα" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Αριθμός αποτελεσμάτων που έχουν καταγραφεί για αυτό το πρότυπο" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Νόμισμα αγοράς για αυτό το είδος αποθέματος" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Το αρχείο δεν είναι εικόνα" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Αρχικό προϊόν" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Επιλέξτε αρχικό προϊόν για αντιγραφή" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Αντιγραφή εικόνας" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Αντιγραφή εικόνας από το αρχικό προϊόν" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Αντιγραφή BOM" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Αντιγραφή λίστας υλικών (BOM) από το αρχικό προϊόν" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Αντιγραφή παραμέτρων" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Αντιγραφή δεδομένων παραμέτρων από το αρχικό προϊόν" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Αντιγραφή σημειώσεων" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Αντιγραφή σημειώσεων από το αρχικό προϊόν" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Αντιγραφή δοκιμών" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Αντιγραφή προτύπων δοκιμών από το αρχικό προϊόν" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Αρχική ποσότητα αποθέματος" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Καθορίστε αρχική ποσότητα αποθέματος για αυτό το προϊόν. Αν η ποσότητα είναι μηδέν, δεν προστίθεται απόθεμα" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Αρχική τοποθεσία αποθέματος" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Καθορίστε αρχική τοποθεσία αποθέματος για αυτό το προϊόν" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Επιλέξτε προμηθευτή (ή αφήστε κενό για παράλειψη)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Επιλέξτε κατασκευαστή (ή αφήστε κενό για παράλειψη)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Κωδικός προϊόντος κατασκευαστή" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος προμηθευτής" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος κατασκευαστής" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Υπάρχει ήδη προϊόν κατασκευαστή με αυτό το MPN" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Υπάρχει ήδη προϊόν προμηθευτή με αυτό το SKU" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Όνομα κατηγορίας" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Σε παραγωγή" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Ποσότητα αυτού του προϊόντος που βρίσκεται αυτή τη στιγμή σε παραγωγή" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Εκκρεμής ποσότητα αυτού του προϊόντος που έχει προγραμματιστεί για παραγωγή" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Είδη αποθέματος" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "Αναθεωρήσεις" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Προμηθευτές" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Συνολικό απόθεμα" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Μη δεσμευμένο απόθεμα" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Απόθεμα παραλλαγών" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Αντιγραφή προϊόντος" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Αντιγραφή αρχικών δεδομένων από άλλο προϊόν" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Αρχικό απόθεμα" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Δημιουργία προϊόντος με αρχική ποσότητα αποθέματος" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Πληροφορίες προμηθευτή" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Προσθήκη αρχικών πληροφοριών προμηθευτή για αυτό το προϊόν" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Αντιγραφή παραμέτρων κατηγορίας" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Αντιγραφή προτύπων παραμέτρων από την επιλεγμένη κατηγορία προϊόντος" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Υπάρχουσα εικόνα" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Όνομα αρχείου υπάρχουσας εικόνας προϊόντος" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Το αρχείο εικόνας δεν υπάρχει" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Επικύρωση ολόκληρης της λίστας υλικών (BOM)" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Μπορεί να παραχθεί" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Απαιτείται για εντολές παραγωγής" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Δεσμευμένο σε εντολές παραγωγής" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Απαιτείται για εντολές πώλησης" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Δεσμευμένο σε εντολές πώλησης" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Ελάχιστη τιμή" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Παράκαμψη υπολογισμένης τιμής για την ελάχιστη τιμή" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Νόμισμα ελάχιστης τιμής" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Μέγιστη τιμή" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Παράκαμψη υπολογισμένης τιμής για τη μέγιστη τιμή" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Νόμισμα μέγιστης τιμής" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Ενημέρωση" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Ενημέρωση τιμολόγησης για αυτό το προϊόν" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Δεν ήταν δυνατή η μετατροπή από τα δοθέντα νομίσματα σε {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Η ελάχιστη τιμή δεν πρέπει να είναι μεγαλύτερη από τη μέγιστη τιμή" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Η μέγιστη τιμή δεν πρέπει να είναι μικρότερη από την ελάχιστη τιμή" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Επιλέξτε τη γονική συναρμολόγηση" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Επιλέξτε το προϊόν Προϊόντος" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Επιλέξτε προϊόν από το οποίο θα αντιγραφεί το BOM" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Αφαίρεση υπαρχόντων δεδομένων" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Αφαίρεση υπαρχόντων στοιχείων BOM πριν την αντιγραφή" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Συμπερίληψη κληρονομημένων" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Συμπερίληψη στοιχείων BOM που κληρονομούνται από προϊόντα προτύπων" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Παράλειψη μη έγκυρων γραμμών" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Ενεργοποιήστε αυτή την επιλογή για να παραλείπονται οι μη έγκυρες γραμμές" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Αντιγραφή εναλλακτικών προϊόντων" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Αντιγραφή εναλλακτικών προϊόντων κατά την αντιγραφή στοιχείων BOM" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Ειδοποίηση χαμηλού αποθέματος" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Το διαθέσιμο απόθεμα για το {part.name} έχει πέσει κάτω από το καθορισμένο ελάχιστο επίπεδο" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Ειδοποίηση παλαιού αποθέματος" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "Έχετε 1 είδος αποθέματος που πλησιάζει την ημερομηνία λήξης του" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "Έχετε {item_count} είδη αποθέματος που πλησιάζουν την ημερομηνία λήξης τους" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Χωρίς ημερομηνία λήξης" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "Έληξε πριν από {abs(days_diff)} ημέρες" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Λήγει σήμερα" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} ημέρες" @@ -6732,108 +6865,108 @@ msgstr "Δεν έχει καθοριστεί ενέργεια" msgid "No matching action found" msgstr "Δεν βρέθηκε αντίστοιχη ενέργεια" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Δεν βρέθηκε αντιστοίχιση για τα δεδομένα barcode" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Βρέθηκε αντιστοίχιση για τα δεδομένα barcode" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "Το μοντέλο δεν υποστηρίζεται" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "Δεν βρέθηκε η συγκεκριμένη εγγραφή του μοντέλου" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Το barcode αντιστοιχεί σε υπάρχον είδος" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "Δεν βρέθηκαν αντίστοιχα δεδομένα προϊόντος" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "Δεν βρέθηκαν αντίστοιχα προϊόντα προμηθευτή" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "Βρέθηκαν πολλαπλά αντίστοιχα προϊόντα προμηθευτή" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "Δεν βρέθηκε αντίστοιχο πρόσθετο για τα δεδομένα barcode" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Αντίστοιχο προϊόν προμηθευτή" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "Το είδος έχει ήδη παραληφθεί" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "Δεν υπάρχει πρόσθετο που να ταιριάζει για το barcode προμηθευτή" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "Βρέθηκαν πολλαπλές αντίστοιχες γραμμές" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "Δεν βρέθηκε αντίστοιχη γραμμή" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "Δεν δόθηκε εντολή πώλησης" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "Το barcode δεν αντιστοιχεί σε υπάρχον είδος αποθέματος" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "Το είδος αποθέματος δεν ταιριάζει με τη γραμμή" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Μη επαρκές διαθέσιμο απόθεμα" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "Το είδος αποθέματος δεσμεύτηκε στην εντολή πώλησης" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Μη επαρκείς πληροφορίες" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "Βρέθηκε αντίστοιχο είδος" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "Το προϊόν προμηθευτή δεν ταιριάζει με τη γραμμή" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "Η γραμμή είναι ήδη ολοκληρωμένη" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "Απαιτούνται επιπλέον πληροφορίες για την παραλαβή της γραμμής" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Παραλήφθηκε η γραμμή εντολής αγοράς" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "Αποτυχία παραλαβής γραμμής" @@ -6972,7 +7105,7 @@ msgstr "Παρέχει εγγενή υποστήριξη για barcodes" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "Έκδοση οπισθοχρονολογημένων εντολών" msgid "Automatically issue orders that are backdated" msgstr "Αυτόματη έκδοση εντολών που είναι οπισθοχρονολογημένες" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "Επίπεδα" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "Αριθμός επιπέδων προς εξαγωγή - ορίστε το σε μηδέν για εξαγωγή όλων των επιπέδων BOM" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "Συνολική ποσότητα" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "Συμπερίληψη συνολικής ποσότητας κάθε προϊόντος στο BOM" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "Δεδομένα αποθέματος" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "Συμπερίληψη δεδομένων αποθέματος προϊόντος" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "Δεδομένα τιμολόγησης" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "Συμπερίληψη δεδομένων τιμολόγησης προϊόντος" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "Δεδομένα προμηθευτή" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "Συμπερίληψη δεδομένων προμηθευτή" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "Δεδομένα κατασκευαστή" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "Συμπερίληψη δεδομένων κατασκευαστή" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "Δεδομένα εναλλακτικών" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "Συμπερίληψη δεδομένων εναλλακτικών προϊόντων" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "Δεδομένα παραμέτρων" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "Συμπερίληψη δεδομένων παραμέτρων προϊόντος" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "Εξαγωγέας BOM πολλαπλών επιπέδων" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "Παρέχει υποστήριξη για εξαγωγή BOM πολλαπλών επιπέδων" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "Επίπεδο BOM" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "Εναλλακτικό {n}" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "Προμηθευτής {n}" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "SKU προμηθευτή {n}" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "MPN προμηθευτή {n}" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "Κατασκευαστής {n}" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "MPN κατασκευαστή {n}" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "Ενσωματωμένες μεθόδοι ειδοποιήσεων Slack" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "URL εισερχόμενου webhook Slack" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "Εκτυπωτής ετικετών μηχανής InvenTree" msgid "Provides support for printing using a machine" msgstr "Παρέχει υποστήριξη για εκτύπωση μέσω μηχανής" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "τελευταία χρήση" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "Επιλογές" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Κλειδί του πρόσθετου" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "PluginName του πρόσθετου" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "Πρόσθετο πακέτου" msgid "Plugin" msgstr "Πρόσθετο" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Δεν βρέθηκε δημιουργός" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Το πρόσθετο '{p}' δεν είναι συμβατό με την τρέχουσα έκδοση InvenTree {v}" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Το πρόσθετο απαιτεί τουλάχιστον την έκδοση {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Το πρόσθετο απαιτεί το πολύ την έκδοση {v}" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "Η εγκατάσταση δεν επιβεβαιώθηκε" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "Πρέπει να δοθεί είτε όνομα πακέτου είτε URL" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8072,7 +8205,7 @@ msgstr "Σύνολο" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Σειριακός αριθμός" @@ -8097,7 +8230,7 @@ msgstr "Αναφορά δοκιμών είδους αποθέματος" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Εγκατεστημένα είδη" @@ -8130,495 +8263,519 @@ msgstr "Χωρίς αποτέλεσμα (υποχρεωτικό)" msgid "No result" msgstr "Χωρίς αποτέλεσμα" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Το αρχείο πόρου δεν υπάρχει" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "Το αρχείο εικόνας δεν βρέθηκε" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "Το tag part_image απαιτεί μία παρουσία Aντικειμένου" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "Το tag company_image απαιτεί ένα Aντικειμένου Company" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Φιλτράρισμα ανά βάθος τοποθεσίας" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Φιλτράρισμα κατά τοποθεσίες ανώτατου επιπέδου" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Συμπερίληψη υποτοποθεσιών στα φιλτραρισμένα αποτελέσματα" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "Γονική τοποθεσία" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Φιλτράρισμα βάσει γονικής τοποθεσίας" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Όνομα προϊόντος (χωρίς διάκριση πεζών/κεφαλαίων)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Το όνομα προϊόντος περιέχει (χωρίς διάκριση πεζών/κεφαλαίων)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Όνομα προϊόντος (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "IPN προϊόντος (χωρίς διάκριση πεζών/κεφαλαίων)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Το IPN προϊόντος περιέχει (χωρίς διάκριση πεζών/κεφαλαίων)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "IPN προϊόντος (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Ελάχιστο απόθεμα" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Μέγιστο απόθεμα" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Κωδικός κατάστασης" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Εξωτερική τοποθεσία" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Αναλωμένο από εντολή παραγωγής" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Εγκατεστημένο σε άλλο είδος αποθέματος" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Δέντρο προϊόντος" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Ενημερώθηκε πριν από" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Ενημερώθηκε μετά από" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Απογραφή πριν από" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Απογραφή μετά από" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Ημερομηνία λήξης πριν από" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Ημερομηνία λήξης μετά από" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Παλαιωμένο" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Δώστε ένα PK είδους αποθέματος για να εξαιρεθεί αυτό και όλοι οι απόγονοί του" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "Διαδοχικές τοποθεσίες" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "Αν είναι true, περιλαμβάνει είδη σε θυγατρικές τοποθεσίες της δεδομένης τοποθεσίας" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Φιλτράρισμα κατά αριθμητικό ID τοποθεσίας ή τη λέξη 'null'" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Απαιτείται ποσότητα" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Πρέπει να δοθεί έγκυρο προϊόν" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Το δοθέν προϊόν προμηθευτή δεν υπάρχει" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Το προϊόν προμηθευτή έχει ορισμένο μέγεθος συσκευασίας, αλλά η σημαία use_pack_size δεν έχει τεθεί" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Δεν μπορούν να δοθούν σειριακοί αριθμοί για μη ιχνηλάσιμο προϊόν" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "Συμπερίληψη εγκατεστημένων" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "Αν είναι true, περιλαμβάνει αποτελέσματα δοκιμών για είδη που είναι εγκατεστημένα κάτω από το συγκεκριμένο είδος αποθέματος" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "Φιλτράρισμα κατά αριθμητικό ID είδους αποθέματος" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "Είδος αποθέματος με ID {id} δεν υπάρχει" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "Τύπος τοποθεσίας αποθέματος" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "Τύποι τοποθεσίας αποθέματος" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "Προεπιλεγμένο εικονίδιο για όλες τις τοποθεσίες που δεν έχουν ορισμένο εικονίδιο (προαιρετικό)" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Τοποθεσία αποθέματος" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Τοποθεσίες αποθέματος" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Ιδιοκτήτης" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Επιλέξτε ιδιοκτήτη" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Τα είδη αποθέματος δεν μπορούν να τοποθετηθούν απευθείας σε δομικές τοποθεσίες αποθέματος, αλλά μπορούν να τοποθετηθούν σε θυγατρικές τοποθεσίες." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Εξωτερικό" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Πρόκειται για εξωτερική τοποθεσία αποθέματος" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Τύπος τοποθεσίας" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "Ο τύπος τοποθεσίας αποθέματος για αυτή την τοποθεσία" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Δεν μπορείτε να κάνετε αυτή την τοποθεσία αποθέματος δομική, επειδή κάποια είδη αποθέματος είναι ήδη τοποθετημένα σε αυτή!" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "Το {field} δεν υπάρχει" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Πρέπει να καθοριστεί προϊόν" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Τα είδη αποθέματος δεν μπορούν να τοποθετηθούν σε δομικές τοποθεσίες αποθέματος!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "Δεν μπορεί να δημιουργηθεί είδος αποθέματος για εικονικά προϊόντα" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Ο τύπος προϊόντος ('{self.supplier_part.part}') πρέπει να είναι {self.part}" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Η ποσότητα πρέπει να είναι 1 για είδος με σειριακό αριθμό" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Δεν μπορεί να οριστεί σειριακός αριθμός αν η ποσότητα είναι μεγαλύτερη από 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Το είδος δεν μπορεί να ανήκει στον εαυτό του" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Το είδος πρέπει να έχει αναφορά παραγωγής αν is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Η αναφορά παραγωγής δεν αντιστοιχεί στο ίδιο προϊόν" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Γονικό είδος αποθέματος" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Βασικό προϊόν" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Επιλέξτε αντίστοιχο προϊόν προμηθευτή για αυτό το είδος αποθέματος" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Πού βρίσκεται αυτό το είδος αποθέματος;" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "Συσκευασία στην οποία αποθηκεύεται αυτό το είδος αποθέματος" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Εγκατεστημένο σε" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Είναι αυτό το είδος εγκατεστημένο σε άλλο είδος;" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Σειριακός αριθμός για αυτό το είδος" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Κωδικός παρτίδας για αυτό το είδος αποθέματος" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Ποσότητα αποθέματος" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Πηγή παραγωγής" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Εντολή παραγωγής για αυτό το είδος αποθέματος" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Έχει αναλωθεί από" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Εντολή παραγωγής που κατανάλωσε αυτό το είδος αποθέματος" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Πηγή εντολής αγοράς" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Εντολή αγοράς για αυτό το είδος αποθέματος" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Εντολή πώλησης προορισμού" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Ημερομηνία λήξης για το είδος αποθέματος. Το απόθεμα θα θεωρείται ληγμένο μετά από αυτή την ημερομηνία" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Διαγραφή κατά την εξάντληση" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Διαγραφή αυτού του είδους αποθέματος όταν εξαντληθεί" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Τιμή αγοράς ανά μονάδα κατά τον χρόνο αγοράς" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Μετατράπηκε σε προϊόν" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "Η ποσότητα υπερβαίνει το διαθέσιμο απόθεμα" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Το προϊόν δεν έχει οριστεί ως ιχνηλάσιμο" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Η ποσότητα πρέπει να είναι ακέραιος αριθμός" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Η ποσότητα δεν πρέπει να υπερβαίνει το διαθέσιμο απόθεμα ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Οι σειριακοί αριθμοί πρέπει να δοθούν ως λίστα" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Η ποσότητα δεν αντιστοιχεί στους σειριακούς αριθμούς" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Το πρότυπο δοκιμής δεν υπάρχει" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Το είδος αποθέματος έχει αντιστοιχιστεί σε εντολή πώλησης" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Το είδος αποθέματος είναι εγκατεστημένο σε άλλο είδος" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Το είδος αποθέματος περιέχει άλλα είδη" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Το είδος αποθέματος έχει αντιστοιχιστεί σε πελάτη" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Το είδος αποθέματος βρίσκεται αυτή τη στιγμή σε παραγωγή" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Σειριακό απόθεμα δεν μπορεί να συγχωνευθεί" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Διπλότυπα είδη αποθέματος" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Τα είδη αποθέματος πρέπει να αναφέρονται στο ίδιο προϊόν" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Τα είδη αποθέματος πρέπει να αναφέρονται στο ίδιο προϊόν προμηθευτή" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Οι κωδικοί κατάστασης αποθέματος πρέπει να ταιριάζουν" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Το StockItem δεν μπορεί να μετακινηθεί καθώς δεν βρίσκεται σε απόθεμα" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Ιχνηλάτηση είδους αποθέματος" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Σημειώσεις καταχώρησης" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Αποτέλεσμα δοκιμής είδους αποθέματος" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Πρέπει να δοθεί τιμή για αυτή τη δοκιμή" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Πρέπει να μεταφορτωθεί συνημμένο για αυτή τη δοκιμή" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Μη έγκυρη τιμή για αυτή τη δοκιμή" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Αποτέλεσμα δοκιμής" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Τιμή αποτελέσματος δοκιμής" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Συνημμένο αποτελέσματος δοκιμής" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Σημειώσεις δοκιμής" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "Σταθμός δοκιμής" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "Ο αναγνωριστικός κωδικός του σταθμού δοκιμής όπου πραγματοποιήθηκε η δοκιμή" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "Έναρξη" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Χρονική σήμανση έναρξης της δοκιμής" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "Ολοκλήρωση" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Χρονική σήμανση λήξης της δοκιμής" @@ -8662,246 +8819,246 @@ msgstr "Επιλέξτε προϊόν για το οποίο θα δημιουρ msgid "Quantity of serial numbers to generate" msgstr "Ποσότητα σειριακών αριθμών προς δημιουργία" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "Πρότυπο δοκιμής για αυτό το αποτέλεσμα" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "Δεν βρέθηκε αντίστοιχη δοκιμή για αυτό το προϊόν" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "Πρέπει να δοθεί Template ID ή όνομα δοκιμής" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "Η ώρα λήξης της δοκιμής δεν μπορεί να είναι προγενέστερη της ώρας έναρξης" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Γονικό είδος" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "Γονικό είδος αποθέματος" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Χρήση μεγέθους συσκευασίας κατά την προσθήκη: η καθορισμένη ποσότητα είναι ο αριθμός των συσκευασιών" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "Χρήση μεγέθους συσκευασίας" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Εισαγάγετε σειριακούς αριθμούς για νέα είδη" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Κωδικός προϊόντος προμηθευτή" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Ληγμένο" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Θυγατρικά είδη" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "Εγγραφές ιχνηλάτησης" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "Τιμή αγοράς αυτού του είδους αποθέματος, ανά μονάδα ή συσκευασία" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Εισαγάγετε τον αριθμό ειδών αποθέματος για σειριοποίηση" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "Δεν δόθηκε είδος αποθέματος" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Η ποσότητα δεν πρέπει να υπερβαίνει το διαθέσιμο απόθεμα ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Τοποθεσία προορισμού αποθέματος" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "Δεν μπορούν να εκχωρηθούν σειριακοί αριθμοί σε αυτό το προϊόν" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Οι σειριακοί αριθμοί υπάρχουν ήδη" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Επιλέξτε είδος αποθέματος προς εγκατάσταση" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "Ποσότητα προς εγκατάσταση" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "Εισαγάγετε την ποσότητα των ειδών προς εγκατάσταση" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Προσθέστε σημείωση συναλλαγής (προαιρετικά)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "Η ποσότητα προς εγκατάσταση πρέπει να είναι τουλάχιστον 1" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "Το είδος αποθέματος δεν είναι διαθέσιμο" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "Το επιλεγμένο προϊόν δεν βρίσκεται στο Δελτίο Υλικών (BOM)" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "Η ποσότητα προς εγκατάσταση δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Τοποθεσία προορισμού για το απεγκατεστημένο είδος" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "Επιλέξτε προϊόν στο οποίο θα μετατραπεί το είδος αποθέματος" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "Το επιλεγμένο προϊόν δεν είναι έγκυρη επιλογή για μετατροπή" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Δεν είναι δυνατή η μετατροπή είδους αποθέματος με εκχωρημένο SupplierPart" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "Κωδικός κατάστασης είδους αποθέματος" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "Επιλέξτε είδη αποθέματος για αλλαγή κατάστασης" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "Δεν επιλέχθηκαν είδη αποθέματος" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Υποτοποθεσίες" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "Γονική τοποθεσία αποθέματος" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "Το προϊόν πρέπει να είναι διαθέσιμο για πώληση" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "Το είδος έχει δεσμευτεί σε εντολή πώλησης" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "Το είδος έχει δεσμευτεί σε εντολή παραγωγής" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Πελάτης στον οποίο θα αποδοθούν τα είδη αποθέματος" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "Η επιλεγμένη εταιρεία δεν είναι πελάτης" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Σημειώσεις απόδοσης αποθέματος" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "Πρέπει να δοθεί λίστα ειδών αποθέματος" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Σημειώσεις συγχώνευσης αποθέματος" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Να επιτρέπονται διαφορετικοί προμηθευτές" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "Να επιτρέπεται η συγχώνευση ειδών αποθέματος με διαφορετικά προϊόντα προμηθευτή" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Να επιτρέπεται διαφορετική κατάσταση" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "Να επιτρέπεται η συγχώνευση ειδών αποθέματος με διαφορετικούς κωδικούς κατάστασης" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Πρέπει να δοθούν τουλάχιστον δύο είδη αποθέματος" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Καμία αλλαγή" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Τιμή πρωτεύοντος κλειδιού StockItem" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "Το είδος δεν βρίσκεται σε απόθεμα" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "Το είδος βρίσκεται ήδη σε απόθεμα" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "Η ποσότητα δεν πρέπει να είναι αρνητική" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Σημειώσεις συναλλαγής αποθέματος" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "Συγχώνευση με υπάρχον απόθεμα" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "Συγχώνευση επιστρεφόμενων ειδών με υπάρχοντα είδη αποθέματος, όπου είναι δυνατό" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "Επόμενος σειριακός αριθμός" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "Προηγούμενος σειριακός αριθμός" @@ -9383,83 +9540,83 @@ msgstr "Εντολές Πώλησης" msgid "Return Orders" msgstr "Εντολές Επιστροφής" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Όνομα χρήστη" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Όνομα" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Το όνομα του χρήστη" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Επώνυμο" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Το επώνυμο του χρήστη" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Διεύθυνση email του χρήστη" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Προσωπικό" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Διαθέτει ο χρήστης δικαιώματα προσωπικού;" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Υπερχρήστης" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Είναι ο χρήστης υπερχρήστης;" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Είναι ο λογαριασμός χρήστη ενεργός;" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "Μόνο υπερχρήστης μπορεί να τροποποιήσει αυτό το πεδίο" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "Κωδικός πρόσβασης" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "Κωδικός πρόσβασης του χρήστη" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "Παράβλεψη προειδοποίησης" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "Παράβλεψη της προειδοποίησης σχετικά με τους κανόνες κωδικού πρόσβασης" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "Δεν έχετε δικαίωμα δημιουργίας χρηστών" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Ο λογαριασμός σας δημιουργήθηκε." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Παρακαλούμε χρησιμοποιήστε τη λειτουργία επαναφοράς κωδικού πρόσβασης για να συνδεθείτε" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Καλώς ήρθατε στο InvenTree" diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po index 911d3ac23c..8c1ec38e13 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: 2025-12-07 07:33+0000\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,67 +18,59 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "" -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "" @@ -97,7 +89,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "" @@ -113,13 +105,13 @@ msgstr "" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "" @@ -132,75 +124,75 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "" @@ -208,11 +200,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -256,133 +248,124 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -538,11 +521,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -554,30 +537,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -586,9 +569,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -597,192 +580,197 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -790,230 +778,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1025,433 +1017,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1475,67 +1479,71 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1547,778 +1555,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2340,7 +2348,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2352,93 +2360,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2446,1128 +2462,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3912,366 +3957,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4319,119 +4368,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4531,7 +4580,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4659,105 +4708,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4765,8 +4826,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4782,722 +4843,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5533,1174 +5614,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6733,108 +6866,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6973,7 +7106,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7071,111 +7204,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7277,7 +7410,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7355,11 +7488,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7537,7 +7670,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7572,21 +7705,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7764,7 +7897,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8073,7 +8206,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8098,7 +8231,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8131,495 +8264,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8663,246 +8820,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9384,82 +9541,82 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po index 0ed49b83a3..a284bdae27 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "endpoint API no encontrado" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Lista de artículos o filtros deben ser proporcionados para la operación en bloque" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Los artículos deben ser proporcionados como una lista" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Lista de artículos no válida" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Los filtros deben ser introducidos como un diccionario" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Filtros proporcionados inválidos" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Todos los filtros tienen que ser usados con verdadero" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Ningún artículo coincide con el criterio proporcionado" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Sin datos proporcionados" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "El usuario no tiene permiso para ver este modelo" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Email (de nuevo)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Confirmación de dirección de email" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Debe escribir el mismo correo electrónico cada vez." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "La dirección de correo electrónico principal proporcionada no es válida." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "El dominio de correo electrónico proporcionado no está aprobado." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "No se pudo convertir {original} a {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" @@ -112,13 +104,13 @@ msgstr "Ingrese la fecha" msgid "Invalid decimal value" msgstr "Número decimal no válido" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Notas" @@ -131,75 +123,75 @@ msgstr "El valor '{name}' no aparece en formato de patrón" msgid "Provided value does not match required pattern: " msgstr "El valor proporcionado no coincide con el patrón requerido: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "No se puede serializar más de 1000 elementos a la vez" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "No se ha proporcionado un número de serie" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Serie duplicada" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Grupo no válido {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Rango del grupo {group} supera la cantidad permitida ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Numeros de serie no encontrados" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "El número de números de serie únicos ({n}) tiene que coincidir con la cantidad ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Eliminar etiquetas HTML de este valor" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Los datos contienen contenido de marcado prohibido" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Error de conexión" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "El servidor respondió con código de estado no válido" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Se ha producido una excepción" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 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:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "El tamaño de la imagen es demasiado grande" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "La descarga de imagen excedió el tamaño máximo" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "El servidor remoto devolvió una respuesta vacía" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "La URL proporcionada no es un archivo de imagen válido" @@ -207,11 +199,11 @@ msgstr "La URL proporcionada no es un archivo de imagen válido" msgid "Log in to the app" msgstr "Iniciar sesión en la aplicación" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Correo electrónico" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Debe habilitar la autenticación de doble factor antes de continuar." @@ -255,133 +247,124 @@ msgstr "La referencia debe coincidir con la expresión regular {pattern}" msgid "Reference number is too large" msgstr "El número de referencia es demasiado grande" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Selección no válida" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nombre" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Descripción" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Descripción (opcional)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Ruta" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Los nombres duplicados no pueden existir bajo el mismo padre" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Notas de Markdown (opcional)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Datos de código de barras" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Datos de código de barras de terceros" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Hash del Código de barras" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Hash único de datos de código de barras" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Fallo en la tarea" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "La tarea en segundo plano '{f}' falló después de {n} intentos" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Error de servidor" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Se ha registrado un error por el servidor." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Imágen" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Imagen remota" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL de imagen remota" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "La descarga de imágenes desde la URL remota no está habilitada" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Error al descargar la imagen desde la URL remota" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Chino (Simplificado)" msgid "Chinese (Traditional)" msgstr "Chino (Tradicional)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "Actualización disponible" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "Una actualización para InvenTree está disponible" @@ -553,30 +536,30 @@ msgstr "Unidad física inválida" msgid "Not a valid currency code" msgstr "No es un código de moneda válido" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Estado del pedido" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Construcción o Armado Superior" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Incluye Variantes" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Incluye Variantes" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categoría" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Asignado a mí" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Asignadas a" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Creado antes" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Creado despues" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Tiene fecha inicial" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Fecha de inicio anterior" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Fecha de inicio después" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Tiene fecha límite" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Fecha objetivo antes" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Fecha objetivo después" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Completado antes" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Completado después" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "Fecha Mínima" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "Fecha Máxima" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Excluir Árbol" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Consumible" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Opcional" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Montaje" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Rastreado" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Comprobable" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Pedido pendiente" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Agotado" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponible" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "En pedido" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Construir órden" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Ubicación" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Salida" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Construir órdenes" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "BOM de ensamblado no ha sido validado" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "La orden de construcción no puede ser creado para una parte inactiva" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "La orden de construcción no puede ser creada para una parte desbloqueada" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Se debe especificar un usuario o grupo responsable" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "La parte del pedido de construcción no puede ser modificada" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "La fecha límite debe ser posterior a la fecha de inicio" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Número de orden de construcción o armado" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Número de orden de construcción o armado" msgid "Reference" msgstr "Referencia" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Breve descripción de la construcción (opcional)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Orden de Construcción o Armado a la que se asigna" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Seleccionar parte a construir o armar" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referencia de orden de venta" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Orden de Venta a la que se asigna" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Ubicación de la fuente" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Seleccione la ubicación de donde tomar stock para esta construcción o armado (deje en blanco para tomar desde cualquier ubicación)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Ubicación de destino" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Seleccione la ubicación donde se almacenarán los artículos completados" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Cantidad a crear" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Número de objetos existentes a construir" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Elementos completados" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Número de productos en stock que se han completado" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Estado de la construcción" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Código de estado de construcción" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Numero de lote" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Número de lote de este producto final" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Fecha de Creación" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "Crear fecha de inicio" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Fecha de inicio programada para este pedido" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Fecha límite de finalización" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Fecha límite para la finalización de la construcción. La construcción estará vencida después de esta fecha." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Fecha de finalización" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "terminado por" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "El usuario que emitió esta orden" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsable" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Usuario o grupo responsable de esta orden de construcción" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Link externo" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Enlace a URL externa" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Prioridad de construcción" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioridad de esta orden de construcción" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Código del proyecto" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Código de proyecto para esta orden de ensamble" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "No se pudo descargar la tarea para completar las asignaciones de construcción" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "El pedido {build} ha sido procesado" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Pedido #[order] ha sido procesado" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Los números de serie deben ser proporcionados para las partes rastreables" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "No se ha especificado salida de construcción" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "La construcción de la salida ya está completa" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "La salida de la construcción no coincide con el orden de construcción" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La construcción {serial} no ha pasado todas las pruebas requeridas" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Construir línea de pedido" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Ensamblar equipo" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Cantidad" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Cantidad requerida para orden de ensamble" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de construcción o armado debe especificar un resultado o salida, ya que la parte maestra está marcada como rastreable" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "El artículo de almacén selelccionado no coincide con la línea BOM" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "La cantidad debe ser 1 para el stock serializado" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Cantidad asignada debe ser mayor que cero" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "La cantidad debe ser 1 para el stock serializado" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "El artículo de almacén selelccionado no coincide con la línea BOM" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Artículo de stock" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Producto original de stock" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Cantidad de stock a asignar para construir" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Instalar en" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Artículo de stock de destino" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nombre de parte" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Etiqueta del código del proyecto" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "La salida de construcción no coincide con la construcción padre" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "La parte de salida no coincide con la parte de la Orden de Construcción" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Esta salida de construcción ya ha sido completada" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Esta salida de construcción no está completamente asignada" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Ingrese la cantidad para la producción de la construcción" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Cantidad entera requerida para partes rastreables" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Cantidad entera requerida, ya que la factura de materiales contiene partes rastreables" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Números de serie" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Introduzca los números de serie de salidas de construcción" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Ubicación de stock para objetos construidos" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Asignar automáticamente los artículos requeridos con números de serie coincidentes" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Los siguientes números seriales ya existen o son inválidos" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Debe proporcionarse una lista de salidas de construcción" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Ubicación de almacén para salidas descartadas" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Descartar asignaciones" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar cualquier asignación de existencias para las salidas descartadas" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Razón para descartar la salida de ensamble(s)" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Ubicación para las salidas de construcción completadas" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Aceptar Asignación Incompleta" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completar salidas si el inventario no se ha asignado completamente" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Consumir Stock Asignado" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Consume cualquier stock que ya ha sido asignado a esta construcción" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Eliminar salidas incompletas" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Eliminar cualquier salida de construcción que no se haya completado" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "No permitido" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Aceptar como consumido por este pedido de construcción" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Liberar antes de completar esta orden de construcción" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Stock sobreasignado" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Cómo quieres manejar los artículos extra de inventario asignados a la orden de construcción" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Algunos artículos de inventario han sido sobreasignados" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceptar que los artículos de stock no se han asignado completamente a este pedido de construcción" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Aceptar incompleto" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceptar que el número requerido de salidas de construcción no se han completado" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "La cantidad de construcción requerida aún no se ha completado" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "La orden de construcción tiene órdenes hijas de construcción abiertas" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Orden de construcción debe estar en estado de producción" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "El orden de construcción tiene salidas incompletas" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Linea de ensamble" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "La salida de la construcción debe apuntar a la misma construcción" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Crear partida" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcción" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "La salida de la construcción debe especificarse para la asignación de partes rastreadas" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La salida de construcción no se puede especificar para la asignación de partes no rastreadas" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Debe proporcionarse la adjudicación de artículos" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Ubicación de inventario donde las partes deben ser obtenidas (dejar en blanco para tomar de cualquier ubicación)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Excluir artículos de stock de esta ubicación seleccionada" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Stock intercambiable" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Los artículos de inventario en múltiples ubicaciones se pueden utilizar de forma intercambiable" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Sustituir stock" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Permitir la asignación de partes sustitutas" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Elementos opcionales" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Asignar artículos de la BOM opcionales para construir la orden" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Error al iniciar la tarea de asignación automática" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Referencia BOM" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID de la parte BOM" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Nombre de parte la BOM" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Parte del proveedor" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Referencia de orden de Ensamblado" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Rastreable" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Stock Disponible" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Stock sustituto disponible" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Stock variable disponible" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "En espera" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Terminado" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Stock requerido para la orden de construcción" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Orden de construcción atrasada" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "El pedido de construcción {bo} está atrasado" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "¿Es enlace?" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "¿Es archivo?" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "El usuario no tiene permiso para eliminar estos adjuntos" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Código de divisa inválido" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Código de divisa duplicado" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "No se han proporcionado códigos de divisa válidos" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Sin plugin" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Etiqueta del código del proyecto" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Actualizado" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Fecha y hora de la última actualización" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Código único del proyecto" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Descripción del proyecto" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Usuario o grupo responsable de este projecto" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Tecla de ajustes" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Valor de ajuste" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "El valor elegido no es una opción válida" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "El valor debe ser un valor booleano" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "El valor debe ser un entero" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "El valor debe ser un número válido" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "El valor no pasa las comprobaciones de validación" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Cadena de clave debe ser única" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Usuario" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Precio" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Precio unitario a la cantidad especificada" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Endpoint" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Punto final en el que se recibe este webhook" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Nombre para este webhook" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Activo" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Está activo este webhook" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Token para el acceso" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Clave" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Secreto compartido para HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "ID de mensaje" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Identificador único para este mensaje" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Servidor" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Servidor desde el cual se recibió este mensaje" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Encabezado" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Encabezado del mensaje" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Cuerpo" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Cuerpo de este mensaje" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Endpoint en el que se recibió este mensaje" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Trabajado en" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "¿El trabajo en este mensaje ha terminado?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "Id" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Título" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Enlace" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Publicado" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Autor" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Resumen" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Leer" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "¿Esta noticia ya fue leída?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Archivo de imagen" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Unidad personalizada" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "El símbolo de la unidad debe ser único" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Nombre de unidad debe ser un identificador válido" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Nombre de unidad" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Símbolo de unidad opcional" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definición" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Definición de unidad" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Archivo adjunto" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Archivo no encontrado" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Falta enlace externo" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Seleccionar archivo para adjuntar" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Comentario" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Comentario de archivo adjunto" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Fecha de carga" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Fecha de carga del archivo" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Tamaño del archivo" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Tamaño del archivo en bytes" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Tipo de modelo no válido especificado para el archivo adjunto" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "Estado personalizado" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "Estados personalizados" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Llave lógica" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valor" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Nombre del estado" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Etiqueta que se mostrará en el frontend" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Color" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Color que se mostrará en el frontend" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Modelo" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "El modelo debe ser seleccionado" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "La clave debe ser seleccionada" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "La clave lógica debe ser seleccionada" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Lista de selección" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Listas de Selección" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Nombre de la lista de selección" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Descripción de la lista de selección" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Bloqueado" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "¿Está bloqueada esta lista de selección?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "¿Se puede utilizar esta lista de selección?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Complemento de origen" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Complemento que proporciona la lista de selección" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Cadena de origen" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Cadena opcional que identifica la fuente usada para esta lista" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Entrada por defecto" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Entrada predeterminada para esta lista de selección" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Creado" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Fecha y hora en la que se creó la lista de selección" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Última actualización" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "Fecha y hora en que la lista de selección fue actualizada por última vez" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Entrada de lista de selección" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Entradas de la lista de selección" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Lista de selección a la que pertenece esta entrada" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Valor del elemento de la lista de selección" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Etiqueta para la entrada de lista de selección" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Descripción de la entrada de lista de selección" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "¿Está activa esta entrada de la lista de selección?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Plantilla de parámetro" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "El nombre de parámetro en la plantilla tiene que ser único" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Nombre de Parámetro" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Unidades" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Casilla de verificación" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Opciones" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opciones válidas para este parámetro (separados por comas)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Plantilla" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Datos" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Nota" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Campo de nota opcional" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Escanear código de barras" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Datos de código de barras" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Usuario que escaneó el código de barras" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Fecha y hora del escaneo de código de barras" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "Dispositivo URL que procesó el código de barras" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Datos de contexto para el escaneo de código de barras" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Respuesta" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Respuesta de datos del escaneo de código de barras" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultado" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "¿El escaneo de código de barras fue exitoso?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Clave" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} cancelado" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Artículos Recibidos" @@ -2351,93 +2359,101 @@ msgstr "Los artículos han sido recibidos contra una orden de compra" msgid "Items have been received against a return order" msgstr "Los artículos han sido recibidos contra una orden de devolución" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Está en ejecución" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Tareas pendientes" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Tareas Programadas" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Tareas fallidas" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "Identificación de Tarea" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Identificación de tarea única" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Bloquear hora" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Nombre de la tarea" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Función" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Nombre de la Función" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumentos de la tarea" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Argumentos de palabra clave" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Argumentos de palabra clave de tarea" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Nombre de Archivo" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "El usuario no tiene permiso para crear o editar archivos adjuntos para este modelo" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lista de selección bloqueada" @@ -2445,1128 +2461,1157 @@ msgstr "Lista de selección bloqueada" msgid "No group" msgstr "Sin grupo" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "La URL del sitio está bloqueada por su configuración" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Reinicio requerido" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Se ha cambiado una configuración que requiere un reinicio del servidor" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Migraciones pendientes" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Número de migraciones de base de datos pendientes" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "Identificador único para esta instancia de InvenTree" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Nombre de la instancia del servidor" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Descriptor de cadena para la instancia del servidor" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Usar nombre de instancia" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Utilice el nombre de la instancia en la barra de título" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Restringir mostrar 'acerca de'" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Mostrar la modal `about` solo para superusuarios" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nombre de empresa" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Nombre interno de empresa" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "URL Base" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "URL base para la instancia del servidor" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Moneda predeterminada" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Seleccione la moneda base para los cálculos de precios" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Monedas admitidas" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Listado de códigos de divisa soportados" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Intervalo de actualización de moneda" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Con qué frecuencia actualizar los tipos de cambio (establecer a cero para desactivar)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "días" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Plugin de Actualización de Moneda" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Plugin de actualización de moneda a usar" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Descargar desde URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Permitir la descarga de imágenes y archivos remotos desde la URL externa" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Límite de tamaño de descarga" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Tamaño máximo de descarga permitido para la imagen remota" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "Agente de usuario usado para descargar desde la URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permitir reemplazar el agente de usuario utilizado para descargar imágenes y archivos desde URL externa (dejar en blanco para el valor predeterminado)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Validación estricta de URL" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Requerir especificación de esquema al validar URLs" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Actualizar intervalo de actualización" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Con qué frecuencia comprobar actualizaciones (establecer a cero para desactivar)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Copia de seguridad automática" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Activar copia de seguridad automática de los archivos de base de datos y medios" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Intervalo de respaldo automático" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Especificar número de días entre eventos automatizados de copia de seguridad" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Intervalo de eliminación de tareas" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Los resultados de las tareas en segundo plano se eliminarán después del número especificado de días" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Intervalo de eliminación de registro de errores" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Los registros de errores se eliminarán después del número especificado de días" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Intervalo de eliminación de notificaciones" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Las notificaciones de usuario se eliminarán después del número especificado de días" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Soporte de código de barras" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Habilitar el soporte para escáner de códigos de barras en la interfaz web" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "Guardar resultados de código de barras" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "Guardar resultados de código de barras en la base de datos" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "Número máximo de escaneos de código de barras" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "Número máximo de resultados de escaneo de código de barras para almacenar" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Retraso de entrada de código de barras" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Tiempo de retraso en la lectura de códigos de barras" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Soporte para Webcam de código de barras" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir escaneo de código de barras a través de webcam en el navegador" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Mostrar datos del código de barra como texto en el navegador" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Complemento para generar códigos de barra" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Complemento a usar para la generación de datos de códigos de barra internos" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Revisiones de partes" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Habilitar campo de revisión para parte" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Patrón de expresión regular para IPN de la parte coincidente" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Permitir IPN duplicado" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que varias partes compartan el mismo IPN" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Permitir editar IPN" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Permite cambiar el valor de IPN mientras se edita una parte" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Copiar parte de datos BOM" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar datos BOM por defecto al duplicar una parte" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Copiar parámetros de parte" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Copiar datos de parámetro por defecto al duplicar una parte" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Copiar parte de datos de prueba" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Copiar datos de parámetro por defecto al duplicar una parte" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Copiar plantillas de parámetros de categoría" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Copiar plantillas de parámetros de categoría al crear una parte" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Las partes son plantillas por defecto" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Componente" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Las partes pueden ser usadas como subcomponentes por defecto" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Comprable" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Las partes son comprables por defecto" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Vendible" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Las partes se pueden vender por defecto" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Las partes son rastreables por defecto" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Las partes son virtuales por defecto" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Mostrar partes relacionadas" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Mostrar partes relacionadas para una parte" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Datos iniciales de existencias" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Permitir la creación del stock inicial al añadir una nueva parte" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Datos iniciales del proveedor" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permitir la creación de datos iniciales del proveedor al agregar una nueva parte" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Formato de visualización de Nombre de Parte" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Formato para mostrar el nombre de la parte" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Icono por defecto de la categoría de parte" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Icono por defecto de la categoría de parte (vacío significa que no hay icono)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de lugares decimales en el precio" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Número mínimo de decimales a mostrar al procesar los datos de precios" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Máximo de lugares decimales en el precio" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Número máximo de decimales a mostrar al procesar los datos de precios" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Usar precios de proveedor" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Incluir descuentos de precios del proveedor en los cálculos generales de precios" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Anulación del historial de compra" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "El precio histórico de compra anula los descuentos de precios del proveedor" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Usar precio del artículo de almacén" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Usar los precios de los datos de inventario introducidos manualmente para los cálculos de precios" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Edad del precio del artículo de almacén" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Excluir artículos de almacén anteriores a este número de días de los cálculos de precios" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Usar precios variantes" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir variantes de precios en los cálculos generales de precios" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Solo variantes activas" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Usar solo partes de variantes activas para calcular los precios de variantes" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Intervalo de reconstrucción de precios" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Número de días antes de que el precio de la parte se actualice automáticamente" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Precios internos" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Habilitar precios internos para partes" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Anulación del precio interno" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Si está disponible, los precios internos anulan los cálculos del rango de precios" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Habilitar impresión de etiquetas" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Habilitar impresión de etiquetas desde la interfaz web" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "PPP de la imagen de etiqueta" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Resolución DPI al generar archivos de imagen que suministrar para etiquetar complementos de impresión" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Habilitar informes" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Habilitar generación de informes" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Modo de depuración" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Generar informes en modo de depuración (salida HTML)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Registrar errores de reportes" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Registrar errores ocurridos al generar reportes" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Tamaño de página" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Tamaño de página predeterminado para informes PDF" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Forzar unidades de parámetro" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Si se proporcionan unidades, los valores de parámetro deben coincidir con las unidades especificadas" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Seriales únicos globalmente" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Los números de serie para los artículos de inventario deben ser únicos globalmente" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Eliminar existencias agotadas" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina el comportamiento por defecto al agotarse un artículo del inventario" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Plantilla de código de lote" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Plantilla para generar códigos de lote por defecto para artículos de almacén" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Expiración de stock" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Habilitar la funcionalidad de expiración de stock" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Vender existencias caducadas" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Permitir venta de existencias caducadas" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Tiempo histórico de Stock" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de días de artículos de stock se consideran obsoletos antes de caducar" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Crear Stock Caducado" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Permitir crear con stock caducado" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Control de Stock" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Habilitar control de propiedad sobre ubicaciones de stock y artículos" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Icono por defecto de ubicación de almacén" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Icono por defecto de ubicación de almacén (vacío significa que no hay icono)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Mostrar Articulos de Stock Instalados" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Mostrar los artículos de stock instalados en las tablas de stock" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Permitir transferencia Sin Existencias" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permitir que artículos del inventario sin existencias puedan ser transferidos entre ubicaciones de inventario" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Armado" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la Orden de Ensamblado" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Requerir Dueño Responsable" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Se debe asignar un dueño responsable a cada orden" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "Requerir Parte Activa" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "Impedir la creación de órdenes de fabricación para partes inactivas" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Requerir Parte Bloqueada" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "Impedir la creación de órdenes de fabricación para partes bloqueadas" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "Impedir la creación de órdenes de fabricación a menos que se haya validado la lista de materiales" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "Prevenir la finalización de la orden de construcción hasta que todas las órdenes hijas estén cerradas" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Bloquear hasta que los Tests pasen" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Evitar que las construcciones sean completadas hasta que todas las pruebas requeridas pasen" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Habilitar órdenes de devolución" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Habilitar la funcionalidad de orden de devolución en la interfaz de usuario" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Patrón de referencia de orden de devolución" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Patrón requerido para generar el campo de referencia de devolución de la orden" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Editar ordenes de devolución completadas" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Permitir la edición de ordenes de devolución después de que hayan sido completados" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Venta" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la orden de venta" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Envío Predeterminado de Ordenes de Venta" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Habilitar la creación de envío predeterminado con ordenes de entrega" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Editar Ordenes de Venta Completados" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Permitir la edición de ordenes de venta después de que hayan sido enviados o completados" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Marcar pedidos enviados como completados" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Los pedidos marcados como enviados se completarán automáticamente, evitando el estado de \"envío\"" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Patrón de Referencia de Orden de Compra" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la Orden de Compra" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Editar Ordenes de Compra Completados" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Permitir la edición de órdenes de venta después de que hayan sido enviados o completados" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "Convertir moneda" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Autocompletar Ordenes de compra" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marcar automáticamente las órdenes de compra como completas cuando se reciben todos los artículos de línea" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Habilitar función de contraseña olvidada" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Activar la función olvido de contraseña en las páginas de inicio de sesión" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Habilitar registro" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Activar auto-registro para usuarios en las páginas de inicio de sesión" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Habilitar SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Habilitar SSO en las páginas de inicio de sesión" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Habilitar registro SSO" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Activar autoregistro a través de SSO para usuarios en las páginas de inicio de sesión" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "Habilitar sincronización de grupo SSO" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Habilitar la sincronización de grupos de Inventree con grupos proporcionados por el IdP" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "Clave de grupo SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "El nombre del atributo reclamado por el grupo proporcionado por el IdP" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "Mapa del grupo SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Un mapeo de grupos SSO a grupos de Inventree locales. Si el grupo local no existe, se creará." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "Eliminar grupos fuera de SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Email requerido" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Requiere usuario para suministrar correo al registrarse" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Auto-rellenar usuarios SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Rellenar automáticamente los datos de usuario de la cuenta SSO" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Correo dos veces" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Al registrarse pregunte dos veces a los usuarios por su correo" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Contraseña dos veces" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Al registrarse, preguntar dos veces a los usuarios por su contraseña" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Dominios permitidos" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restringir el registro a ciertos dominios (separados por comas, comenzando por @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Grupo al registrarse" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupo al que se asignan nuevos usuarios al registrarse. Si la sincronización de grupo SSO está activada, este grupo sólo se establece si no se puede asignar ningún grupo desde el IdP." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Forzar MFA" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Los usuarios deben utilizar seguridad multifactor." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Comprobar complementos al iniciar" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Comprobar que todos los complementos están instalados en el arranque - habilitar en entornos de contenedores" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Revisar actualizaciones del plugin" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Habilitar comprobaciones periódicas para actualizaciones de plugins instalados" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Habilitar integración de URL" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Habilitar plugins para añadir rutas de URL" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Habilitar integración de navegación" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Habilitar plugins para integrar en la navegación" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Habilitar integración de la aplicación" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Habilitar plugins para añadir aplicaciones" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Habilitar integración de programación" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Habilitar plugins para ejecutar tareas programadas" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Habilitar integración de eventos" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Habilitar plugins para responder a eventos internos" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Habilitar integración de interfaz" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Habilitar complementos para integrar en la interfaz de usuario" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "Habilitar códigos de proyecto para rastrear proyectos" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Excluir Ubicaciones Externas" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Periodo de inventario automático" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "Mostrar nombres completos de los usuarios" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "Mostrar nombres completos de usuarios en lugar de nombres de usuario" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "Habilitar datos de estación de prueba" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" -msgstr "Habilitar la recolección de datos de estaciones de prueba para resultados de prueba" +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "Mostrar nombres completos de los usuarios" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Mostrar nombres completos de usuarios en lugar de nombres de usuario" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "Habilitar datos de estación de prueba" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "Habilitar la recolección de datos de estaciones de prueba para resultados de prueba" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "La parte está activa" msgid "Manufacturer is Active" msgstr "El fabricante está activo" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "Tiene Stock" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Empresas" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Descripción de la empresa" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Descripción de la empresa" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Página web" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "URL del sitio web de la empresa" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Teléfono" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Teléfono de contacto" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Correo electrónico de contacto" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contacto" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Punto de contacto" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Enlace a información externa de la empresa" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "¿Esta empresa está activa?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "¿Es cliente?" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "¿Vendes artículos a esta empresa?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "¿Es proveedor?" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "¿Compras artículos de esta empresa?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "¿Es productor?" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "¿Esta empresa fabrica partes?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Moneda predeterminada utilizada para esta empresa" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Dirección" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Direcciones" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Seleccionar empresa" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Título de dirección" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Título que describe la entrada de dirección" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Dirección principal" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Establecer como dirección principal" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Línea 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Dirección línea 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Línea 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Dirección línea 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Código postal" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Ciudad/región" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Código postal de ciudad/región" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Estado/provincia" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Estado o provincia" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "País" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Dirección de país" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notas de envío de mensajería" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notas para el mensajero de envío" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Notas de envío internas" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Notas de envío para uso interno" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Enlace a información de dirección (externa)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Parte del fabricante" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Parte base" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Seleccionar parte" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Número de parte de fabricante" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL para el enlace de parte del fabricante externo" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Descripción de la parte del fabricante" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Las unidades de paquete deben ser compatibles con las unidades de partes de base" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Las unidades de paquete deben ser mayor que cero" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Proveedor" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Seleccionar parte del fabricante" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL del enlace de parte del proveedor externo" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Descripción de la parte del proveedor" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "costo base" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Paquetes" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Embalaje de partes" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Cantidad de paquete" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Cantidad total suministrada en un solo paquete. Dejar vacío para artículos individuales." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "múltiple" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Pedido múltiple" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Cantidad disponible del proveedor" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Disponibilidad actualizada" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Fecha de última actualización de los datos de disponibilidad" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Moneda predeterminada utilizada para este proveedor" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "Colocado" msgid "Invalid status code" msgstr "Código de estado no válido" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Archivo de datos" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "Archivo de datos a importar" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Columnas" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Valores predeterminados del campo" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Filtros del campo" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "Algunos campos requeridos no han sido mapeados" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "La columna ya fue mapeada a un campo de la base de datos" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "La columna no existe en el archivo de datos" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "El campo no existe en el modelo destino" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "El campo seleccionado es de solo lectura" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Sesión de importación" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Campo" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Columna" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Número de fila" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "Datos de la fila original" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Errores" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Válido" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "Número de copias a imprimir para cada etiqueta" msgid "Connected" msgstr "Conectado" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Desconocido" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Referencia del pedido" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "Destacado" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "Tiene Código de Proyecto" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Creado por" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "Creado antes de" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Creado después de" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "Tiene fecha inicial" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "Fecha de inicio anterior" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "Fecha de inicio después" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "Tiene fecha límite" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "Fecha objetivo antes" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "Fecha objetivo después" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Tiene Precio" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "Completado antes de" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "Completado después de" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Orden" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Componente interno" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Orden pendiente" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Completados" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "Tiene envío" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Orden de compra" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Orden de compra" msgid "Sales Order" msgstr "Orden de Venta" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Precio Total" msgid "Total price for this order" msgstr "Precio total para este pedido" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Moneda de pedido" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Moneda para este pedido (dejar en blanco para utilizar el valor predeterminado de la empresa)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "Este pedido está bloqueado y no puede ser modificado" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "El contacto no coincide con la empresa seleccionada" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "La fecha de inicio debe ser anterior a la fecha de límite" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Descripción del pedido (opcional)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Seleccione el código del proyecto para este pedido" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Enlace a Url externa" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "Fecha de inicio" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Fecha de inicio programada para este pedido" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Fecha objetivo" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Fecha esperada para la entrega del pedido. El pedido se retrasará después de esta fecha." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Fecha de emisión" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Fecha de expedición del pedido" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Usuario o grupo responsable de este pedido" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Punto de contacto para este pedido" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Dirección de la empresa para este pedido" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Referencia del pedido" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Estado" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Estado de la orden de compra" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Empresa de la cual se están encargando los artículos" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Referencia del proveedor" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Código de referencia de pedido del proveedor" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "recibido por" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "La fecha de pedido fue completada" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Destinación" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "Destino para los artículos recibidos" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "El proveedor de la parte debe coincidir con el proveedor de PO" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "La partida no coincide con la orden de compra" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "La cantidad debe ser un número positivo" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Empresa a la que se venden los artículos" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "Estado de la orden de venta" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Referencia del cliente " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Código de referencia de pedido del cliente" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Fecha de envío" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "La orden ya fue completada" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "La orden ya fue cancelada" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Sólo una orden abierta puede ser marcada como completa" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "El pedido no se puede completar porque hay envíos incompletos" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "El pedido no se puede completar ya que hay asignaciones incompletas" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "El pedido no se puede completar porque hay partidas incompletas" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "Este pedido está bloqueado y no puede ser modificado" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Cantidad del artículo" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Referencia de partida" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Notas de partida" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Fecha objetivo para esta partida (dejar en blanco para usar la fecha de destino de la orden)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Descripción de partida (opcional)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Contexto adicional para esta línea" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Precio unitario" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "La parte del proveedor debe coincidir con el proveedor" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Parte del proveedor" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Recibido" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Precio de Compra" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Precio de compra unitario" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "Sólo las partes vendibles pueden ser asignadas a un pedido de venta" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Precio de Venta" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Precio de venta unitario" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Cantidad enviada" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Fecha del envío" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Fecha de entrega" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Fecha de entrega del envío" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Revisado por" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envío" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Número de envío" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Número de Seguimiento" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Información de seguimiento del envío" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Número de factura" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Número de referencia para la factura asociada" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "El envío ya ha sido enviado" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "El envío no tiene artículos de stock asignados" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "El artículo de stock no ha sido asignado" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "No se puede asignar el artículo de stock a una línea con una parte diferente" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "No se puede asignar stock a una línea sin una parte" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La cantidad de asignación no puede exceder la cantidad de stock" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Cantidad asignada debe ser mayor que cero" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "La cantidad debe ser 1 para el stock serializado" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "La orden de venta no coincide con el envío" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "El envío no coincide con el pedido de venta" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Línea" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Referencia del envío del pedido de venta" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Ítem" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Seleccionar artículo de stock para asignar" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Especificar la cantidad de asignación de stock" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Referencia de la orden de devolución" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Empresa de la cual se están devolviendo los artículos" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Estado de la orden de devolución" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Seleccionar el artículo a devolver del cliente" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Fecha de recepción" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "La fecha en la que se recibió este artículo de devolución" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Resultado" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Salida para esta partida" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Costo asociado con la devolución o reparación para esta partida" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID del Pedido" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID del pedido a duplicar" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Copiar líneas" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Copiar elementos de línea del pedido original" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Copiar líneas adicionales" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Copiar elementos extra de la línea del pedido original" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Copiar Parámetros" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Partidas" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Líneas completadas" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Duplicar pedido" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Especificar opciones para duplicar este pedido" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "ID de pedido no válido" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir cerrar el pedido con partidas incompletas" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcular precio de compra automáticamente con base en los datos del proveedor" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Número de parte interna" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Introduzca el código de lote para los artículos de almacén entrantes" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Introduzca números de serie para artículos de almacén entrantes" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Los valores del código de barras deben ser únicos" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "La partida no está asociada con este pedido" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "El envío ya ha sido enviado" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "El envío no está asociado con este pedido" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "No se han encontrado coincidencias para los siguientes números de serie" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "Los siguientes números de serie no están disponibles" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "La partida no coincide con la orden de devolución" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "Los artículos sólo pueden ser recibidos contra pedidos en curso" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Moneda de precio de línea" @@ -5532,1174 +5613,1226 @@ msgstr "Reembolso" msgid "Reject" msgstr "Rechazo" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Orden de compra atrasada" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "La orden de compra {po} está atrasada" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Orden de venta atrasada" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "La orden de venta {so} está atrasada" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Favoritos" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Profundidad" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtrar por profundidad de categoría" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Nivel superior" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtrar por categorías de nivel superior" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "En cascada" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Tiene resultados" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Categoría de parte" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Categorías de parte" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Ubicación Predeterminada" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Ubicación predeterminada para partes de esta categoría" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Estructural" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Las partes no pueden asignarse directamente a una categoría estructural, pero pueden asignarse a categorías hijas." -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Palabras clave predeterminadas" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Palabras clave por defecto para partes en esta categoría" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Icono" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Icono (opcional)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "¡No puedes hacer que esta categoría de partes sea estructural porque algunas partes ya están asignadas!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Valor predeterminado" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Valor de parámetro por defecto" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Partes" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Ya existe un artículo de almacén con este número de serie" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN duplicado no permitido en la configuración de partes" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "La revisión de parte duplicada ya existe." -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Parte con este nombre, IPN y revisión ya existe." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "¡No se pueden asignar partes a las categorías de partes estructurales!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Nombre de la parte" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Es plantilla" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "¿Es esta parte una parte de la plantilla?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Descripción de parte (opcional)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Palabras claves" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqueda" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Revisión de parte o número de versión" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Revisión" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "Variante de" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "¿Dónde se almacena este artículo normalmente?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Proveedor por defecto" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Parte de proveedor predeterminada" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Expiración por defecto" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Stock mínimo" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Nivel mínimo de stock permitido" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Unidades de medida para esta parte" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "¿Se puede construir esta parte a partir de otras partes?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "¿Se puede utilizar esta parte para construir otras partes?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "¿Esta parte tiene seguimiento de objetos únicos?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "¿Se puede comprar esta parte a proveedores externos?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "¿Se puede vender esta parte a los clientes?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "¿Está activa esta parte?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "Las partes bloqueadas no pueden ser editadas" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "¿Es ésta una parte virtual, como un producto de software o una licencia?" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Suma de verificación de BOM" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Suma de verificación de BOM almacenada" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "BOM comprobado por" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "Fecha BOM comprobada" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Creación de Usuario" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Dueño responsable de esta parte" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Vender múltiples" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Costo mínimo de BOM" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Costo mínimo de partes de componentes" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Costo máximo de BOM" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Costo máximo de partes de componentes" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Costo mínimo de compra" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Costo histórico mínimo de compra" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Costo máximo de compra" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Costo histórico máximo de compra" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Precio interno mínimo" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Costo mínimo basado en precios reducidos internos" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Precio interno máximo" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Costo máximo basado en precios reducidos internos" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Precio mínimo de proveedor" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Precio mínimo de la parte de proveedores externos" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Precio máximo de proveedor" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Precio máximo de la parte de proveedores externos" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Costo mínimo de variante" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Costo mínimo calculado de las partes variantes" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Costo máximo de variante" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Costo máximo calculado de las partes variantes" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Costo mínimo" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Anular el costo mínimo" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Costo máximo" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Reemplazar coste máximo" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Costo mínimo general calculado" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Precio de venta mínimo" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Precio de venta mínimo basado en precios reducidos" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Precio de venta máximo" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Precio de venta máximo basado en precios reducidos" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Costo de venta mínimo" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Precio de venta mínimo histórico" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Costo de Venta Máximo" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Precio de venta máximo histórico" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Número de artículos" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Fecha" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Costo de Stock Mínimo" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Costo mínimo estimado del stock disponible" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Las plantillas de prueba solo pueden ser creadas para partes de prueba" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Nombre de prueba" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Introduzca un nombre para la prueba" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Requerido" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Requiere valor" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "¿Esta prueba requiere un valor al agregar un resultado de la prueba?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Adjunto obligatorio" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "¿Esta prueba requiere un archivo adjunto al agregar un resultado de la prueba?" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Sub parte" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Seleccionar parte a utilizar en BOM" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "Cantidad del artículo en BOM" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Este artículo BOM es opcional" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este artículo de BOM es consumible (no está rastreado en órdenes de construcción)" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Referencia de artículo de BOM" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Notas del artículo de BOM" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Suma de verificación" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "Suma de verificación de línea de BOM" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Validado" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Este artículo de BOM ha sido validado" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este artículo BOM es heredado por BOMs para partes variantes" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Artículos de stock para partes variantes pueden ser usados para este artículo BOM" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La cantidad debe ser un valor entero para las partes rastreables" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Debe especificar la subparte" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "Ítem de BOM sustituto" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "La parte sustituta no puede ser la misma que la parte principal" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Artículo BOM superior" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Sustituir parte" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Seleccionar parte relacionada" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "Nota para esta relación" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Categoría principal de parte" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Subcategorías" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Moneda de compra de ítem de stock" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Copiar Parámetros" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "En construcción" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Proveedores" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "El precio mínimo no debe ser mayor que el precio máximo" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "El precio máximo no debe ser inferior al precio mínimo" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluye artículos BOM que son heredados de partes con plantillas" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Notificación por bajo stock" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "El stock disponible para {part.name} ha caído por debajo del nivel mínimo configurado" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "No se especificó ninguna acción" msgid "No matching action found" msgstr "No se encontró ninguna acción coincidente" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "No se encontró ninguna coincidencia para los datos del código de barras" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Coincidencia encontrada para datos de códigos de barras" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "El código de barras coincide con artículo existente" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "No se ha encontrado ningún complemento para datos de código de barras" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "Ningún pedido de venta proporcionado" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "Proporciona soporte nativo para códigos de barras" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "URL de webhook entrante de Slack" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Clave del complemento" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "Nombre del complemento" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "Complemento" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "No se encontró autor" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "El complemento '{p}' no es compatible con la versión actual de InvenTree {v}" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "El complemento requiere al menos la versión {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "El complemento requiere como máximo la versión {v}" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "Instalación no confirmada" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "Debe proporcionar cualquier nombre de paquete de la URL" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8072,7 +8205,7 @@ msgstr "Total" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Número de serie" @@ -8097,7 +8230,7 @@ msgstr "Artículo Stock Informe de prueba" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Elementos instalados" @@ -8130,495 +8263,519 @@ msgstr "Ningún resultado (requerido)" msgid "No result" msgstr "Sin resultados" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "Ubicación principal" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtrar por ubicación principal" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Nombre de pieza (insensible a mayúsculas y minúsculas)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "El nombre de la pieza (insensible a mayúsculas y minúsculas)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Nombre de la pieza (expresión regular)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Pieza IPN (insensible a mayúsculas y minúsculas)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Pieza IPN (insensible a mayúsculas y minúsculas)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Pieza IPN (expresión regular)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Stock mínimo" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Stock máximo" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Código de estado" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Ubicación externa" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Instalado en otro artículo de existencias" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Árbol de piezas" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Actualizado antes" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Actualizado después" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Inventario antes" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Inventario después" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Desactualizado" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Cantidad requerida" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Debe suministrarse una parte válida" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Ubicación de Stock" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Ubicaciones de Stock" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Propietario" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Seleccionar Propietario" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Externo" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Se debe especificar la pieza" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "La cantidad debe ser 1 para el artículo con un número de serie" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Número de serie no se puede establecer si la cantidad es mayor que 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "El objeto no puede pertenecer a sí mismo" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "El artículo debe tener una referencia de construcción si is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "La referencia de la construcción no apunta al mismo objeto de parte" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Artículo de stock padre" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Parte base" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Seleccione una parte del proveedor correspondiente para este artículo de stock" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "¿Dónde se encuentra este artículo de stock?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "Empaquetar este artículo de stock se almacena en" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Instalado en" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "¿Está este artículo instalado en otro artículo?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Número de serie para este artículo" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Código de lote para este artículo de stock" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Cantidad de Stock" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Build de origen" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Build para este item de stock" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Consumido por" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Orden de compra de origen" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Orden de compra para este artículo de stock" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Orden de venta de destino" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Fecha de caducidad del artículo de stock. El stock se considerará caducado después de esta fecha" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Eliminar al agotar" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Eliminar este artículo de stock cuando se agoten las existencias" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Precio de compra único en el momento de la compra" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Convertido a parte" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "La parte no está establecida como rastreable" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Cantidad debe ser un entero" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Los números de serie deben ser proporcionados como una lista" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "La cantidad no coincide con los números de serie" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Artículo de stock ha sido asignado a un pedido de venta" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Artículo de stock está instalado en otro artículo" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Artículo de stock contiene otros artículos" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Artículo de stock ha sido asignado a un cliente" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "El artículo de stock está en producción" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Los artículos de stock deben referirse a la misma parte" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Los artículos de stock deben referirse a la misma parte del proveedor" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Los códigos de estado del stock deben coincidir" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stock no se puede mover porque no está en stock" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Notas de entrada" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Debe proporcionarse un valor para esta prueba" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "El archivo adjunto debe ser subido para esta prueba" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Resultado de la prueba" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Valor de salida de prueba" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Adjunto de resultados de prueba" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Notas de prueba" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "Finalizó" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Elemento padre" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Introduzca números de serie para nuevos artículos" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Número de pieza del proveedor" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Expirado" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Elementos secundarios" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Introduzca el número de artículos de stock para serializar" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Ubicación de stock de destino" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "Los números de serie no se pueden asignar a esta parte" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Números de serie ya existen" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Añadir nota de transacción (opcional)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Sub-ubicación" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "La parte debe ser vendible" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "El artículo está asignado a una orden de venta" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "El artículo está asignado a una orden de creación" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Cliente para asignar artículos de stock" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "La empresa seleccionada no es un cliente" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Notas de asignación de stock" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "Debe proporcionarse una lista de artículos de stock" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Notas de fusión de stock" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Permitir proveedores no coincidentes" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permitir fusionar artículos de stock con diferentes partes de proveedor" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Permitir estado no coincidente" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "Permitir fusionar artículos de stock con diferentes códigos de estado" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Debe proporcionar al menos dos artículos de stock" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Sin cambios" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Valor de clave primaria de Stock" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "No hay existencias del artículo" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Notas de transacción de stock" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "Órdenes de venta" msgid "Return Orders" msgstr "Ordenes de devolución" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Nombre de usuario" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Nombre" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Nombre del usuario" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Apellido" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Apellido del usuario" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Dirección de correo del usuario" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Personal" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Tiene este usuario permisos de personal" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Superusuario" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Es este usuario un superusuario" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Esta cuenta de usuario está activa" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Su cuenta ha sido creada." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Por favor, utilice la función de restablecer la contraseña para iniciar sesión" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Bienvenido a InvenTree" diff --git a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po index b4e7e7be7c..f537d1227e 100644 --- a/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/es_MX/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "endpoint API no encontrado" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Lista de artículos o filtros deben ser proporcionados para la operación en bloque" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Los artículos deben ser provistos como una lista" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Lista de artículos inválida" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Los filtros deben ser provistos como un diccionario" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Filtros proporcionados inválidos" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Todos los filtros sólo deben ser usados como verdaderos" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Ningún artículo coincide con el criterio proporcionado" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "El usuario no tiene permiso para ver este modelo" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Email (de nuevo)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Confirmación de dirección de email" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Debe escribir el mismo correo electrónico cada vez." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "La dirección de correo electrónico principal proporcionada no es válida." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "El dominio de correo electrónico proporcionado no está aprobado." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "No se pudo convertir {original} a {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" @@ -112,13 +104,13 @@ msgstr "Ingrese la fecha" msgid "Invalid decimal value" msgstr "Número decimal inválido" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Notas" @@ -131,75 +123,75 @@ msgstr "El valor '{name}' no aparece en formato de patrón" msgid "Provided value does not match required pattern: " msgstr "El valor proporcionado no coincide con el patrón requerido: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "No se puede serializar más de 1000 artículos a la vez" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "No se ha proporcionado un número de serie" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Serie duplicada" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Grupo inválido: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Rango del grupo {group} supera la cantidad permitida ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Numeros de serie no encontrados" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "La cantidad de números de serie únicos ({n}) deben coincidir la cantidad ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Eliminar etiquetas HTML de este valor" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Los datos contienen contenido de markdown prohibido" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Error de conexión" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "El servidor respondió con código de estado no válido" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Se ha producido una excepción" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 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:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "El tamaño de la imagen es demasiado grande" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "La descarga de imagen excedió el tamaño máximo" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "El servidor remoto devolvió una respuesta vacía" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "La URL proporcionada no es un archivo de imagen válido" @@ -207,11 +199,11 @@ msgstr "La URL proporcionada no es un archivo de imagen válido" msgid "Log in to the app" msgstr "Iniciar sesión en la aplicación" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Correo electrónico" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Debe habilitar la autenticación de doble factor antes de hacer cualquier otra cosa." @@ -255,133 +247,124 @@ msgstr "La referencia debe coincidir con la expresión regular {pattern}" msgid "Reference number is too large" msgstr "El número de referencia es demasiado grande" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Selección no válida" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nombre" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Descripción" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Descripción (opcional)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Ruta" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Los nombres duplicados no pueden existir bajo el mismo padre" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Notas de Markdown (opcional)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Datos de código de barras" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Datos de código de barras de terceros" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Hash del Código de barras" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Hash único de datos de código de barras" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Fallo en la tarea" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "La tarea en segundo plano '{f}' falló después de {n} intentos" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Error de servidor" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Se ha registrado un error por el servidor." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Imágen" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Imagen remota" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL de imagen remota" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "La descarga de imágenes desde la URL remota no está habilitada" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Error al descargar la imagen desde la URL remota" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Chino (Simplificado)" msgid "Chinese (Traditional)" msgstr "Chino (Tradicional)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "Unidad física inválida" msgid "Not a valid currency code" msgstr "No es un código de moneda válido" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Estado del pedido" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Construcción o Armado Superior" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Incluye Variantes" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Incluye Variantes" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categoría" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Construir antepasado" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Asignado a mí" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Asignadas a" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Creado antes de" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Creado después de" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Tiene fecha inicial" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Fecha objetivo antes de" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Fecha objetivo después de" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Completado antes de" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Completado después de" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Consumible" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Opcional" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Montaje" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Rastreado" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Comprobable" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Pedido pendiente" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponible" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "En pedido" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Construir órden" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Ubicación" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Construir órdenes" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "BOM de ensamblado no ha sido validado" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "La orden de construcción no puede ser creado para una parte inactiva" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "La orden de construcción no puede ser creada para una parte desbloqueada" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Se debe especificar un usuario o grupo responsable" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "La parte del pedido de construcción no puede ser modificada" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Número de orden de construcción o armado" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Número de orden de construcción o armado" msgid "Reference" msgstr "Referencia" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Breve descripción de la construcción (opcional)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Orden de Construcción o Armado a la que se asigna" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Seleccionar parte a construir o armar" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referencia de orden de venta" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Orden de Venta a la que se asigna" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Ubicación de la fuente" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Seleccione la ubicación de donde tomar stock para esta construcción o armado (deje en blanco para tomar desde cualquier ubicación)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Ubicación de destino" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Seleccione la ubicación donde se almacenarán los artículos completados" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Cantidad a crear" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Número de objetos existentes a construir" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Elementos completados" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Número de productos en stock que se han completado" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Estado de la construcción" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Código de estado de construcción" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Numero de lote" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Número de lote de este producto final" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Fecha de Creación" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Fecha límite de finalización" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Fecha límite para la finalización de la construcción. La construcción estará vencida después de esta fecha." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Fecha de finalización" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "terminado por" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "El usuario que emitió esta orden" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsable" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Usuario o grupo responsable de esta orden de construcción" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Link externo" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Enlace a URL externa" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Prioridad de construcción" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioridad de esta orden de construcción" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Código del proyecto" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Código de proyecto para esta orden de ensamble" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "No se pudo descargar la tarea para completar las asignaciones de construcción" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "El pedido {build} ha sido procesado" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Pedido #[order] ha sido procesado" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Los números de serie deben ser proporcionados para las partes rastreables" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "No se ha especificado salida de construcción" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "La construcción de la salida ya está completa" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "La salida de la construcción no coincide con el orden de construcción" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La construcción {serial} no ha pasado todas las pruebas requeridas" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Construir línea de pedido" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Ensamblar equipo" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Cantidad" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Cantidad requerida para orden de ensamble" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de construcción o armado debe especificar un resultado o salida, ya que la parte maestra está marcada como rastreable" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "El artículo de almacén selelccionado no coincide con la línea BOM" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "La cantidad debe ser 1 para el stock serializado" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Cantidad asignada ({q}) no debe exceder la cantidad disponible de stock ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Cantidad asignada debe ser mayor que cero" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "La cantidad debe ser 1 para el stock serializado" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "El artículo de almacén selelccionado no coincide con la línea BOM" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Artículo de stock" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Producto original de stock" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Cantidad de stock a asignar para construir" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Instalar en" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Artículo de stock de destino" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nombre de parte" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Etiqueta del código del proyecto" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "La salida de construcción no coincide con la construcción padre" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "La parte de salida no coincide con la parte de la Orden de Construcción" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Esta salida de construcción ya ha sido completada" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Esta salida de construcción no está completamente asignada" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Ingrese la cantidad para la producción de la construcción" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Cantidad entera requerida para partes rastreables" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Cantidad entera requerida, ya que la factura de materiales contiene partes rastreables" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Números de serie" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Introduzca los números de serie de salidas de construcción" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Ubicación de stock para objetos construidos" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Autoasignar Números de Serie" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Asignar automáticamente los artículos requeridos con números de serie coincidentes" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Los siguientes números seriales ya existen o son inválidos" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Debe proporcionarse una lista de salidas de construcción" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Ubicación de almacén para salidas descartadas" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Descartar asignaciones" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar cualquier asignación de existencias para las salidas descartadas" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Razón para descartar la salida de ensamble(s)" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Ubicación para las salidas de construcción completadas" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Aceptar Asignación Incompleta" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completar salidas si el inventario no se ha asignado completamente" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Consumir Stock Asignado" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Consume cualquier stock que ya ha sido asignado a esta construcción" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Eliminar salidas incompletas" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Eliminar cualquier salida de construcción que no se haya completado" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "No permitido" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Aceptar como consumido por este pedido de construcción" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Liberar antes de completar esta orden de construcción" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Stock sobreasignado" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Cómo quieres manejar los artículos extra de inventario asignados a la orden de construcción" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Algunos artículos de inventario han sido sobreasignados" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Aceptar no asignado" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceptar que los artículos de stock no se han asignado completamente a este pedido de construcción" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Aceptar incompleto" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceptar que el número requerido de salidas de construcción no se han completado" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "La cantidad de construcción requerida aún no se ha completado" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "La orden de construcción tiene órdenes hijas de construcción abiertas" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Orden de construcción debe estar en estado de producción" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "El orden de construcción tiene salidas incompletas" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Linea de ensamble" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Resultado de la construcción o armado" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "La salida de la construcción debe apuntar a la misma construcción" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Crear partida" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcción" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "La salida de la construcción debe especificarse para la asignación de partes rastreadas" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La salida de construcción no se puede especificar para la asignación de partes no rastreadas" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Debe proporcionarse la adjudicación de artículos" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Ubicación de inventario donde las partes deben ser obtenidas (dejar en blanco para tomar de cualquier ubicación)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Excluir ubicación" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Excluir artículos de stock de esta ubicación seleccionada" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Stock intercambiable" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Los artículos de inventario en múltiples ubicaciones se pueden utilizar de forma intercambiable" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Sustituir stock" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Permitir la asignación de partes sustitutas" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Elementos opcionales" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Asignar artículos de la BOM opcionales para construir la orden" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Error al iniciar la tarea de asignación automática" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Referencia BOM" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID de la parte BOM" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Nombre de parte la BOM" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Parte del proveedor" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Cantidad Asignada" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Referencia de orden de Ensamblado" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Rastreable" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Stock Disponible" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Stock sustituto disponible" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Stock variable disponible" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "En espera" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Terminado" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Stock requerido para la orden de construcción" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Orden de construcción atrasada" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "El pedido de construcción {bo} está atrasado" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "¿Es enlace?" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "¿Es archivo?" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "El usuario no tiene permiso para eliminar estos adjuntos" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Código de divisa inválido" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Código de divisa duplicado" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "No se han proporcionado códigos de divisa válidos" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Sin plugin" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Etiqueta del código del proyecto" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Actualizado" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Fecha y hora de la última actualización" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Código único del proyecto" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Descripción del proyecto" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Usuario o grupo responsable de este projecto" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Tecla de ajustes" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Valor de ajuste" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "El valor elegido no es una opción válida" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "El valor debe ser un valor booleano" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "El valor debe ser un entero" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "El valor debe ser un número válido" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "El valor no pasa las comprobaciones de validación" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Cadena de clave debe ser única" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Usuario" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Precio" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Precio unitario a la cantidad especificada" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Endpoint" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Punto final en el que se recibe este webhook" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Nombre para este webhook" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Activo" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Está activo este webhook" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Token para el acceso" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Clave" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Secreto compartido para HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "ID de mensaje" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Identificador único para este mensaje" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Servidor desde el cual se recibió este mensaje" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Encabezado" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Encabezado del mensaje" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Cuerpo" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Cuerpo de este mensaje" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Endpoint en el que se recibió este mensaje" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Trabajado en" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "¿El trabajo en este mensaje ha terminado?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Título" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Enlace" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Publicado" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Autor" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Resumen" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Leer" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "¿Esta noticia ya fue leída?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Archivo de imagen" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "Tipo de modelo destino para esta imagen" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Unidad personalizada" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "El símbolo de la unidad debe ser único" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Nombre de unidad debe ser un identificador válido" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Nombre de unidad" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Símbolo de unidad opcional" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definición" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Definición de unidad" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Archivo adjunto" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Archivo no encontrado" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Falta enlace externo" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Seleccionar archivo para adjuntar" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Comentario" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Comentario de archivo adjunto" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Fecha de carga" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Fecha de carga del archivo" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Tamaño del archivo" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Tamaño del archivo en bytes" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Tipo de modelo no válido especificado para el archivo adjunto" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "Estado personalizado" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "Estados personalizados" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "Conjunto de estado de referencia" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "Conjunto de estado extendido con este estado personalizado" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Llave lógica" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "Clave lógica del estado que es igual a este estado personalizado en la lógica de negocios" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valor" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "Valor numérico que se guardará en la base de datos de modelos" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Nombre del estado" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Etiqueta que se mostrará en el frontend" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Color" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Color que se mostrará en el frontend" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Modelo" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "Modelo con el que este estado está asociado" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "El modelo debe ser seleccionado" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "La clave debe ser seleccionada" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "La clave lógica debe ser seleccionada" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "La clave debe ser distinta de la clave lógica" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "Debe proporcionarse una clase de estado de referencia válida" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "La clave debe ser distinta de las claves lógicas del estado de referencia" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Lista de selección" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Listas de Selección" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Nombre de la lista de selección" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Descripción de la lista de selección" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Bloqueado" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "¿Está bloqueada esta lista de selección?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "¿Se puede utilizar esta lista de selección?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Complemento de origen" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Complemento que proporciona la lista de selección" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Cadena de origen" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Cadena opcional que identifica la fuente usada para esta lista" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Entrada por defecto" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Entrada predeterminada para esta lista de selección" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Creado" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Fecha y hora en la que se creó la lista de selección" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Última actualización" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "Fecha y hora en que la lista de selección fue actualizada por última vez" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Entrada de lista de selección" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Entradas de la lista de selección" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Lista de selección a la que pertenece esta entrada" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Valor del elemento de la lista de selección" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Etiqueta para la entrada de lista de selección" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Descripción de la entrada de lista de selección" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "¿Está activa esta entrada de la lista de selección?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Plantilla de parámetro" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "El nombre de parámetro en la plantilla tiene que ser único" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Nombre de Parámetro" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Unidades" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Casilla de verificación" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Opciones" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opciones válidas para este parámetro (separados por comas)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Plantilla" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Datos" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Nota" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Campo de nota opcional" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Escanear código de barras" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Datos de código de barras" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Usuario que escaneó el código de barras" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Fecha y hora del escaneo de código de barras" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "Dispositivo URL que procesó el código de barras" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Datos de contexto para el escaneo de código de barras" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Respuesta" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Respuesta de datos del escaneo de código de barras" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultado" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "¿El escaneo de código de barras fue exitoso?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Clave" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} cancelado" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Artículos Recibidos" @@ -2351,93 +2359,101 @@ msgstr "Los artículos han sido recibidos contra una orden de compra" msgid "Items have been received against a return order" msgstr "Los artículos han sido recibidos contra una orden de devolución" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Está en ejecución" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Tareas pendientes" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Tareas Programadas" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Tareas fallidas" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "Identificación de Tarea" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Identificación de tarea única" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Bloquear hora" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Nombre de la tarea" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Función" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Nombre de la Función" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumentos de la tarea" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Argumentos de palabra clave" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Argumentos de palabra clave de tarea" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Nombre de Archivo" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lista de selección bloqueada" @@ -2445,1128 +2461,1157 @@ msgstr "Lista de selección bloqueada" msgid "No group" msgstr "Sin grupo" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "La URL del sitio está bloqueada por su configuración" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Reinicio requerido" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Se ha cambiado una configuración que requiere un reinicio del servidor" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Migraciones pendientes" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Número de migraciones de base de datos pendientes" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Nombre de la instancia del servidor" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Descriptor de cadena para la instancia del servidor" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Usar nombre de instancia" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Utilice el nombre de la instancia en la barra de título" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Restringir mostrar 'acerca de'" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Mostrar la modal `about` solo para superusuarios" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nombre de empresa" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Nombre interno de empresa" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "URL Base" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "URL base para la instancia del servidor" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Moneda predeterminada" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Seleccione la moneda base para los cálculos de precios" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Monedas admitidas" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Listado de códigos de divisa soportados" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Intervalo de actualización de moneda" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Con qué frecuencia actualizar los tipos de cambio (establecer a cero para desactivar)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "días" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Plugin de Actualización de Moneda" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Plugin de actualización de moneda a usar" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Descargar desde URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Permitir la descarga de imágenes y archivos remotos desde la URL externa" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Límite de tamaño de descarga" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Tamaño máximo de descarga permitido para la imagen remota" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "Agente de usuario usado para descargar desde la URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permitir reemplazar el agente de usuario utilizado para descargar imágenes y archivos desde URL externa (dejar en blanco para el valor predeterminado)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Validación estricta de URL" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Requerir especificación de esquema al validar URLs" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Actualizar intervalo de actualización" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Con qué frecuencia comprobar actualizaciones (establecer a cero para desactivar)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Copia de seguridad automática" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Activar copia de seguridad automática de los archivos de base de datos y medios" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Intervalo de respaldo automático" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Especificar número de días entre eventos automatizados de copia de seguridad" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Intervalo de eliminación de tareas" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Los resultados de las tareas en segundo plano se eliminarán después del número especificado de días" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Intervalo de eliminación de registro de errores" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Los registros de errores se eliminarán después del número especificado de días" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Intervalo de eliminación de notificaciones" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Las notificaciones de usuario se eliminarán después del número especificado de días" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Soporte de código de barras" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Habilitar el soporte para escáner de códigos de barras en la interfaz web" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "Guardar resultados de código de barras" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "Guardar resultados de código de barras en la base de datos" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "Número máximo de escaneos de código de barras" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "Número máximo de resultados de escaneo de código de barras para almacenar" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Retraso de entrada de código de barras" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Tiempo de retraso en la lectura de códigos de barras" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Soporte para Webcam de código de barras" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir escaneo de código de barras a través de webcam en el navegador" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Mostrar datos del código de barra como texto en el navegador" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Complemento para generar códigos de barra" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Complemento a usar para la generación de datos de códigos de barra internos" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Revisiones de partes" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Habilitar campo de revisión para parte" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Patrón de expresión regular para IPN de la parte coincidente" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Permitir IPN duplicado" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que varias partes compartan el mismo IPN" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Permitir editar IPN" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Permite cambiar el valor de IPN mientras se edita una parte" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Copiar parte de datos BOM" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar datos BOM por defecto al duplicar una parte" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Copiar parámetros de parte" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Copiar datos de parámetro por defecto al duplicar una parte" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Copiar parte de datos de prueba" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Copiar datos de parámetro por defecto al duplicar una parte" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Copiar plantillas de parámetros de categoría" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Copiar plantillas de parámetros de categoría al crear una parte" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Las partes son plantillas por defecto" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Las partes pueden ser ensambladas desde otros componentes por defecto" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Componente" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Las partes pueden ser usadas como subcomponentes por defecto" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Comprable" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Las partes son comprables por defecto" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Vendible" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Las partes se pueden vender por defecto" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Las partes son rastreables por defecto" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Las partes son virtuales por defecto" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Mostrar partes relacionadas" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Mostrar partes relacionadas para una parte" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Datos iniciales de existencias" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Permitir la creación del stock inicial al añadir una nueva parte" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Datos iniciales del proveedor" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permitir la creación de datos iniciales del proveedor al agregar una nueva parte" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Formato de visualización de Nombre de Parte" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Formato para mostrar el nombre de la parte" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Icono por defecto de la categoría de parte" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Icono por defecto de la categoría de parte (vacío significa que no hay icono)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de lugares decimales en el precio" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Número mínimo de decimales a mostrar al procesar los datos de precios" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Máximo de lugares decimales en el precio" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Número máximo de decimales a mostrar al procesar los datos de precios" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Usar precios de proveedor" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Incluir descuentos de precios del proveedor en los cálculos generales de precios" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Anulación del historial de compra" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "El precio histórico de compra anula los descuentos de precios del proveedor" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Usar precio del artículo de almacén" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Usar los precios de los datos de inventario introducidos manualmente para los cálculos de precios" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Edad del precio del artículo de almacén" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Excluir artículos de almacén anteriores a este número de días de los cálculos de precios" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Usar precios variantes" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir variantes de precios en los cálculos generales de precios" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Solo variantes activas" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Usar solo partes de variantes activas para calcular los precios de variantes" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Intervalo de reconstrucción de precios" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Número de días antes de que el precio de la parte se actualice automáticamente" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Precios internos" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Habilitar precios internos para partes" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Anulación del precio interno" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Si está disponible, los precios internos anulan los cálculos del rango de precios" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Habilitar impresión de etiquetas" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Habilitar impresión de etiquetas desde la interfaz web" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "PPP de la imagen de etiqueta" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Resolución DPI al generar archivos de imagen que suministrar para etiquetar complementos de impresión" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Habilitar informes" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Habilitar generación de informes" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Modo de depuración" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Generar informes en modo de depuración (salida HTML)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Registrar errores de reportes" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Registrar errores ocurridos al generar reportes" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Tamaño de página" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Tamaño de página predeterminado para informes PDF" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Forzar unidades de parámetro" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Si se proporcionan unidades, los valores de parámetro deben coincidir con las unidades especificadas" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Seriales únicos globalmente" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Los números de serie para los artículos de inventario deben ser únicos globalmente" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Eliminar existencias agotadas" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina el comportamiento por defecto al agotarse un artículo del inventario" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Plantilla de código de lote" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Plantilla para generar códigos de lote por defecto para artículos de almacén" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Expiración de stock" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Habilitar la funcionalidad de expiración de stock" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Vender existencias caducadas" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Permitir venta de existencias caducadas" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Tiempo histórico de Stock" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de días de artículos de stock se consideran obsoletos antes de caducar" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Crear Stock Caducado" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Permitir crear con stock caducado" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Control de Stock" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Habilitar control de propiedad sobre ubicaciones de stock y artículos" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Icono por defecto de ubicación de almacén" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Icono por defecto de ubicación de almacén (vacío significa que no hay icono)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Mostrar Articulos de Stock Instalados" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Mostrar los artículos de stock instalados en las tablas de stock" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Revisar BOM al instalar artículos" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Los elementos de stock instalados deben existir en la BOM para la parte padre" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Permitir transferencia Sin Existencias" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permitir que artículos del inventario sin existencias puedan ser transferidos entre ubicaciones de inventario" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Armado" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la Orden de Ensamblado" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Requerir Dueño Responsable" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Se debe asignar un dueño responsable a cada orden" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "Requerir Parte Activa" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "Impedir la creación de órdenes de fabricación para partes inactivas" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Requerir Parte Bloqueada" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "Impedir la creación de órdenes de fabricación para partes bloqueadas" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "Impedir la creación de órdenes de fabricación a menos que se haya validado la lista de materiales" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "Prevenir la finalización de la orden de construcción hasta que todas las órdenes hijas estén cerradas" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Bloquear hasta que los Tests pasen" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Evitar que las construcciones sean completadas hasta que todas las pruebas requeridas pasen" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Habilitar órdenes de devolución" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Habilitar la funcionalidad de orden de devolución en la interfaz de usuario" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Patrón de referencia de orden de devolución" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Patrón requerido para generar el campo de referencia de devolución de la orden" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Editar ordenes de devolución completadas" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Permitir la edición de ordenes de devolución después de que hayan sido completados" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Venta" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la orden de venta" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Envío Predeterminado de Ordenes de Venta" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Habilitar la creación de envío predeterminado con ordenes de entrega" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Editar Ordenes de Venta Completados" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Permitir la edición de ordenes de venta después de que hayan sido enviados o completados" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Marcar pedidos enviados como completados" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Los pedidos marcados como enviados se completarán automáticamente, evitando el estado de \"envío\"" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Patrón de Referencia de Orden de Compra" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Patrón requerido para generar el campo de referencia de la Orden de Compra" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Editar Ordenes de Compra Completados" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Permitir la edición de órdenes de venta después de que hayan sido enviados o completados" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Autocompletar Ordenes de compra" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marcar automáticamente las órdenes de compra como completas cuando se reciben todos los artículos de línea" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Habilitar función de contraseña olvidada" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Activar la función olvido de contraseña en las páginas de inicio de sesión" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Habilitar registro" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Activar auto-registro para usuarios en las páginas de inicio de sesión" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Habilitar SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Habilitar SSO en las páginas de inicio de sesión" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Habilitar registro SSO" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Activar autoregistro a través de SSO para usuarios en las páginas de inicio de sesión" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "Habilitar sincronización de grupo SSO" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Habilitar la sincronización de grupos de Inventree con grupos proporcionados por el IdP" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "Clave de grupo SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "El nombre del atributo reclamado por el grupo proporcionado por el IdP" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "Mapa del grupo SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Un mapeo de grupos SSO a grupos de Inventree locales. Si el grupo local no existe, se creará." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "Eliminar grupos fuera de SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Email requerido" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Requiere usuario para suministrar correo al registrarse" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Auto-rellenar usuarios SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Rellenar automáticamente los datos de usuario de la cuenta SSO" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Correo dos veces" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Al registrarse pregunte dos veces a los usuarios por su correo" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Contraseña dos veces" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Al registrarse, preguntar dos veces a los usuarios por su contraseña" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Dominios permitidos" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restringir el registro a ciertos dominios (separados por comas, comenzando por @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Grupo al registrarse" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupo al que se asignan nuevos usuarios al registrarse. Si la sincronización de grupo SSO está activada, este grupo sólo se establece si no se puede asignar ningún grupo desde el IdP." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Forzar MFA" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Los usuarios deben utilizar seguridad multifactor." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Comprobar complementos al iniciar" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Comprobar que todos los complementos están instalados en el arranque - habilitar en entornos de contenedores" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Revisar actualizaciones del plugin" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Habilitar comprobaciones periódicas para actualizaciones de plugins instalados" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Habilitar integración de URL" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Habilitar plugins para añadir rutas de URL" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Habilitar integración de navegación" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Habilitar plugins para integrar en la navegación" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Habilitar integración de la aplicación" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Habilitar plugins para añadir aplicaciones" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Habilitar integración de programación" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Habilitar plugins para ejecutar tareas programadas" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Habilitar integración de eventos" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Habilitar plugins para responder a eventos internos" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Habilitar integración de interfaz" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Habilitar complementos para integrar en la interfaz de usuario" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Excluir Ubicaciones Externas" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Periodo de inventario automático" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "Mostrar nombres completos de los usuarios" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "Mostrar nombres completos de usuarios en lugar de nombres de usuario" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "Habilitar datos de estación de prueba" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" -msgstr "Habilitar la recolección de datos de estaciones de prueba para resultados de prueba" +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "Mostrar nombres completos de los usuarios" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Mostrar nombres completos de usuarios en lugar de nombres de usuario" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "Habilitar datos de estación de prueba" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "Habilitar la recolección de datos de estaciones de prueba para resultados de prueba" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "Tiene existencias" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Empresas" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Descripción de la empresa" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Descripción de la empresa" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Página web" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "URL del sitio web de la empresa" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Teléfono" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Teléfono de contacto" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Correo electrónico de contacto" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contacto" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Punto de contacto" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Enlace a información externa de la empresa" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "¿Esta empresa está activa?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "¿Es cliente?" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "¿Vendes artículos a esta empresa?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "¿Es proveedor?" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "¿Compras artículos de esta empresa?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "¿Es productor?" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "¿Esta empresa fabrica partes?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Moneda predeterminada utilizada para esta empresa" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Dirección" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Direcciones" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Seleccionar empresa" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Título de dirección" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Título que describe la entrada de dirección" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Dirección principal" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Establecer como dirección principal" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Línea 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Dirección línea 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Línea 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Dirección línea 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Código postal" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Ciudad/región" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Código postal de ciudad/región" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Estado/provincia" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Estado o provincia" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "País" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Dirección de país" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notas de envío de mensajería" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notas para el mensajero de envío" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Notas de envío internas" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Notas de envío para uso interno" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Enlace a información de dirección (externa)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Parte del fabricante" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Parte base" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Seleccionar parte" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Número de parte de fabricante" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL para el enlace de parte del fabricante externo" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Descripción de la parte del fabricante" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Las unidades de paquete deben ser compatibles con las unidades de partes de base" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Las unidades de paquete deben ser mayor que cero" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "La parte vinculada del fabricante debe hacer referencia a la misma parte base" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Proveedor" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Seleccionar parte del fabricante" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL del enlace de parte del proveedor externo" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Descripción de la parte del proveedor" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "costo base" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Paquetes" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Embalaje de partes" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Cantidad de paquete" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Cantidad total suministrada en un solo paquete. Dejar vacío para artículos individuales." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "múltiple" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Pedido múltiple" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Cantidad disponible del proveedor" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Disponibilidad actualizada" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Fecha de última actualización de los datos de disponibilidad" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Moneda predeterminada utilizada para este proveedor" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "Colocado" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Archivo de datos" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "Archivo de datos a importar" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Columnas" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Valores predeterminados del campo" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Filtros del campo" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "Algunos campos requeridos no han sido mapeados" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "La columna ya fue mapeada a un campo de la base de datos" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "La columna no existe en el archivo de datos" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "El campo no existe en el modelo destino" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "El campo seleccionado es de solo lectura" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Sesión de importación" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Campo" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Columna" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Número de fila" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "Datos de la fila original" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Errores" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Válido" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "Número de copias a imprimir para cada etiqueta" msgid "Connected" msgstr "Conectado" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Desconocido" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Referencia del pedido" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "Destacado" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "Tiene Código de Proyecto" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Creado por" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "Creado antes de" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Creado después de" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "Fecha objetivo antes de" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "Fecha objetivo después de" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Tiene Precio" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "Completado antes de" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "Completado después de" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Orden" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Componente interno" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Orden pendiente" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Completados" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "Tiene envío" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Orden de compra" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Orden de compra" msgid "Sales Order" msgstr "Orden de Venta" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Precio Total" msgid "Total price for this order" msgstr "Precio total para este pedido" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Moneda de pedido" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Moneda para este pedido (dejar en blanco para utilizar el valor predeterminado de la empresa)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "El contacto no coincide con la empresa seleccionada" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Descripción del pedido (opcional)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Seleccione el código del proyecto para este pedido" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Enlace a Url externa" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Fecha objetivo" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Fecha esperada para la entrega del pedido. El pedido se retrasará después de esta fecha." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Fecha de emisión" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Fecha de expedición del pedido" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Usuario o grupo responsable de este pedido" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Punto de contacto para este pedido" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Dirección de la empresa para este pedido" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Referencia del pedido" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Estado" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Estado de la orden de compra" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Empresa de la cual se están encargando los artículos" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Referencia del proveedor" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Código de referencia de pedido del proveedor" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "recibido por" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "La fecha de pedido fue completada" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Destinación" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "Destino para los artículos recibidos" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "El proveedor de la parte debe coincidir con el proveedor de PO" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "La partida no coincide con la orden de compra" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "La cantidad debe ser un número positivo" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Empresa a la que se venden los artículos" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "Estado de la orden de venta" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Referencia del cliente " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Código de referencia de pedido del cliente" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Fecha de envío" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "La orden ya fue completada" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "La orden ya fue cancelada" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Sólo una orden abierta puede ser marcada como completa" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "El pedido no se puede completar porque hay envíos incompletos" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "El pedido no se puede completar ya que hay asignaciones incompletas" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "El pedido no se puede completar porque hay partidas incompletas" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Cantidad del artículo" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Referencia de partida" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Notas de partida" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Fecha objetivo para esta partida (dejar en blanco para usar la fecha de destino de la orden)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Descripción de partida (opcional)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Contexto adicional para esta línea" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Precio unitario" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "La parte del proveedor debe coincidir con el proveedor" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Parte del proveedor" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Recibido" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Precio de Compra" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Precio de compra unitario" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "Sólo las partes vendibles pueden ser asignadas a un pedido de venta" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Precio de Venta" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Precio de venta unitario" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Cantidad enviada" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Fecha del envío" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Fecha de entrega" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Fecha de entrega del envío" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Revisado por" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envío" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Número de envío" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Número de Seguimiento" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Información de seguimiento del envío" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Número de factura" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Número de referencia para la factura asociada" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "El envío ya ha sido enviado" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "El envío no tiene artículos de stock asignados" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "El artículo de stock no ha sido asignado" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "No se puede asignar el artículo de stock a una línea con una parte diferente" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "No se puede asignar stock a una línea sin una parte" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La cantidad de asignación no puede exceder la cantidad de stock" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Cantidad asignada debe ser mayor que cero" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "La cantidad debe ser 1 para el stock serializado" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "La orden de venta no coincide con el envío" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "El envío no coincide con el pedido de venta" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Línea" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Referencia del envío del pedido de venta" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Ítem" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Seleccionar artículo de stock para asignar" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Especificar la cantidad de asignación de stock" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Referencia de la orden de devolución" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Empresa de la cual se están devolviendo los artículos" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Estado de la orden de devolución" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "El artículo de almacén debe ser especificado" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "La cantidad de retorno excede la cantidad de existencias" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "La cantidad de retorno debe ser mayor que cero" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "Cantidad inválida para el artículo de stock serializado" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Seleccionar el artículo a devolver del cliente" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Fecha de recepción" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "La fecha en la que se recibió este artículo de devolución" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Resultado" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Salida para esta partida" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Costo asociado con la devolución o reparación para esta partida" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID del Pedido" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID del pedido a duplicar" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Copiar líneas" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Copiar partida del pedido original" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Copiar líneas adicionales" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Copiar partidas extra del pedido original" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Copiar Parámetros" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Partidas" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Líneas completadas" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Duplicar pedido" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Especificar opciones para duplicar este pedido" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "ID de pedido inválido" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir cerrar el pedido con partidas incompletas" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcular precio de compra automáticamente con base en los datos del proveedor" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Número de parte interna" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Introduzca el código de lote para los artículos de almacén entrantes" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Introduzca números de serie para artículos de almacén entrantes" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Los valores del código de barras deben ser únicos" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "La partida no está asociada con este pedido" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "El envío ya ha sido enviado" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "El envío no está asociado con este pedido" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "No se han encontrado coincidencias para los siguientes números de serie" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "Los siguientes números de serie no están disponibles" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "La partida no coincide con la orden de devolución" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "Los artículos sólo pueden ser recibidos contra pedidos en curso" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Moneda de precio de línea" @@ -5532,1174 +5613,1226 @@ msgstr "Reembolso" msgid "Reject" msgstr "Rechazo" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Orden de compra atrasada" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "La orden de compra {po} está atrasada" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Orden de venta atrasada" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "La orden de venta {so} está atrasada" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Favoritos" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Profundidad" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtrar por profundidad de categoría" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Nivel superior" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtrar por categorías de nivel superior" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "En cascada" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Tiene resultados" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Categoría de parte" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Categorías de parte" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Ubicación Predeterminada" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Ubicación predeterminada para partes de esta categoría" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Estructural" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Las partes no pueden asignarse directamente a una categoría estructural, pero pueden asignarse a categorías hijas." -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Palabras clave predeterminadas" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Palabras clave por defecto para partes en esta categoría" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Icono" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Icono (opcional)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "¡No puedes hacer que esta categoría de partes sea estructural porque algunas partes ya están asignadas!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Valor predeterminado" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Valor de parámetro por defecto" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Partes" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Ya existe un artículo de almacén con este número de serie" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN duplicado no permitido en la configuración de partes" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "La revisión de parte duplicada ya existe." -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Parte con este nombre, IPN y revisión ya existe." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "¡No se pueden asignar partes a las categorías de partes estructurales!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Nombre de la parte" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Es plantilla" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "¿Es esta parte una parte de la plantilla?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Descripción de parte (opcional)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Palabras claves" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Palabras clave para mejorar la visibilidad en los resultados de búsqueda" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Revisión de parte o número de versión" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Revisión" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "Variante de" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "¿Dónde se almacena este artículo normalmente?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Proveedor por defecto" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Parte de proveedor predeterminada" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Expiración por defecto" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Tiempo de expiración (en días) para los artículos de stock de esta parte" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Stock mínimo" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Nivel mínimo de stock permitido" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Unidades de medida para esta parte" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "¿Se puede construir esta parte a partir de otras partes?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "¿Se puede utilizar esta parte para construir otras partes?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "¿Esta parte tiene seguimiento de objetos únicos?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "¿Se puede comprar esta parte a proveedores externos?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "¿Se puede vender esta parte a los clientes?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "¿Está activa esta parte?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "Las partes bloqueadas no pueden ser editadas" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "¿Es ésta una parte virtual, como un producto de software o una licencia?" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Suma de verificación de BOM" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Suma de verificación de BOM almacenada" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "BOM comprobado por" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "Fecha BOM comprobada" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Creación de Usuario" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Dueño responsable de esta parte" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Vender múltiples" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Costo mínimo de BOM" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Costo mínimo de partes de componentes" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Costo máximo de BOM" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Costo máximo de partes de componentes" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Costo mínimo de compra" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Costo histórico mínimo de compra" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Costo máximo de compra" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Costo histórico máximo de compra" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Precio interno mínimo" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Costo mínimo basado en precios reducidos internos" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Precio interno máximo" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Costo máximo basado en precios reducidos internos" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Precio mínimo de proveedor" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Precio mínimo de la parte de proveedores externos" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Precio máximo de proveedor" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Precio máximo de la parte de proveedores externos" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Costo mínimo de variante" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Costo mínimo calculado de las partes variantes" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Costo máximo de variante" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Costo máximo calculado de las partes variantes" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Costo mínimo" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Anular el costo mínimo" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Costo máximo" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Reemplazar coste máximo" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Costo mínimo general calculado" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Precio de venta mínimo" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Precio de venta mínimo basado en precios reducidos" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Precio de venta máximo" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Precio de venta máximo basado en precios reducidos" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Costo de venta mínimo" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Precio de venta mínimo histórico" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Costo de Venta Máximo" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Precio de venta máximo histórico" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Número de artículos" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Fecha" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Costo de Stock Mínimo" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Costo mínimo estimado del stock disponible" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Las plantillas de prueba solo pueden ser creadas para partes de prueba" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Nombre de prueba" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Introduzca un nombre para la prueba" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Requerido" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Requiere valor" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "¿Esta prueba requiere un valor al agregar un resultado de la prueba?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Adjunto obligatorio" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "¿Esta prueba requiere un archivo adjunto al agregar un resultado de la prueba?" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Sub parte" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Seleccionar parte a utilizar en BOM" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "Cantidad del artículo en BOM" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Este artículo BOM es opcional" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este artículo de BOM es consumible (no está rastreado en órdenes de construcción)" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Referencia de artículo de BOM" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Notas del artículo de BOM" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Suma de verificación" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "Suma de verificación de línea de BOM" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Validado" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Este artículo de BOM ha sido validado" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este artículo BOM es heredado por BOMs para partes variantes" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Artículos de stock para partes variantes pueden ser usados para este artículo BOM" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La cantidad debe ser un valor entero para las partes rastreables" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Debe especificar la subparte" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "Ítem de BOM sustituto" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "La parte sustituta no puede ser la misma que la parte principal" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Artículo BOM superior" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Sustituir parte" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Seleccionar parte relacionada" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "Nota para esta relación" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Categoría principal de parte" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Subcategorías" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Moneda de compra de ítem de stock" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Copiar Parámetros" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "En construcción" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Proveedores" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "El precio mínimo no debe ser mayor que el precio máximo" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "El precio máximo no debe ser inferior al precio mínimo" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluye artículos BOM que son heredados de partes con plantillas" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Notificación por bajo stock" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "El stock disponible para {part.name} ha caído por debajo del nivel mínimo configurado" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "No se especificó ninguna acción" msgid "No matching action found" msgstr "No se encontró ninguna acción coincidente" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "No se encontró ninguna coincidencia para los datos del código de barras" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Coincidencia encontrada para datos de códigos de barras" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "El código de barras coincide con artículo existente" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "No se ha encontrado ningún complemento para datos de código de barras" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "Ningún complemento coincide con el código de barras del proveedor" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "Ningún pedido de venta proporcionado" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "Se encontró artículo coincidente" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "La pieza del proveedor no coincide con la partida" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "La partida ya está completada" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "No se pudo recibir partida" @@ -6972,7 +7105,7 @@ msgstr "Proporciona soporte nativo para códigos de barras" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "URL de webhook entrante de Slack" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Clave del complemento" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "Nombre del complemento" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "Complemento" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "No se encontró autor" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "El complemento '{p}' no es compatible con la versión actual de InvenTree {v}" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "El complemento requiere al menos la versión {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "El complemento requiere como máximo la versión {v}" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "Instalación no confirmada" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "Debe proporcionar cualquier nombre de paquete de la URL" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8072,7 +8205,7 @@ msgstr "Total" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Número de serie" @@ -8097,7 +8230,7 @@ msgstr "Artículo Stock Informe de prueba" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Elementos instalados" @@ -8130,495 +8263,519 @@ msgstr "Ningún resultado (requerido)" msgid "No result" msgstr "Sin resultados" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "Ubicación principal" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtrar por ubicación principal" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Nombre de pieza (insensible a mayúsculas y minúsculas)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "El nombre de la pieza contiene (insensible a mayúsculas y minúsculas)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Nombre de la pieza (expresión regular)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "IPN de Pieza (insensible a mayúsculas y minúsculas)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "IPN de pieza contiene (insensible a mayúsculas y minúsculas)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "IPN de Pieza (expresión regular)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Existencias mínimas" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Existencias máximas" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Código de estado" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Ubicación externa" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Consumido por orden de construcción" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Instalado en otro artículo de existencias" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Árbol de piezas" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Actualizado antes de" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Actualizado después de" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Inventario antes de" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Inventario después de" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Desactualizado" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Cantidad requerida" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Debe suministrarse una parte válida" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Ubicación de Stock" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Ubicaciones de Stock" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Propietario" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Seleccionar Propietario" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Externo" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Se debe especificar la pieza" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "La cantidad debe ser 1 para el artículo con un número de serie" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Número de serie no se puede establecer si la cantidad es mayor que 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "El objeto no puede pertenecer a sí mismo" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "El artículo debe tener una referencia de construcción si is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "La referencia de la construcción no apunta al mismo objeto de parte" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Artículo de stock padre" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Parte base" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Seleccione una parte del proveedor correspondiente para este artículo de stock" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "¿Dónde se encuentra este artículo de stock?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "Empaquetar este artículo de stock se almacena en" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Instalado en" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "¿Está este artículo instalado en otro artículo?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Número de serie para este artículo" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Código de lote para este artículo de stock" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Cantidad de Stock" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Build de origen" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Build para este item de stock" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Consumido por" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Orden de compra de origen" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Orden de compra para este artículo de stock" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Orden de venta de destino" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Fecha de caducidad del artículo de stock. El stock se considerará caducado después de esta fecha" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Eliminar al agotar" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Eliminar este artículo de stock cuando se agoten las existencias" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Precio de compra único en el momento de la compra" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Convertido a parte" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "La parte no está establecida como rastreable" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Cantidad debe ser un entero" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Los números de serie deben ser proporcionados como una lista" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "La cantidad no coincide con los números de serie" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Artículo de stock ha sido asignado a un pedido de venta" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Artículo de stock está instalado en otro artículo" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Artículo de stock contiene otros artículos" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Artículo de stock ha sido asignado a un cliente" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "El artículo de stock está en producción" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Los artículos de stock deben referirse a la misma parte" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Los artículos de stock deben referirse a la misma parte del proveedor" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Los códigos de estado del stock deben coincidir" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stock no se puede mover porque no está en stock" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Notas de entrada" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Debe proporcionarse un valor para esta prueba" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "El archivo adjunto debe ser subido para esta prueba" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Resultado de la prueba" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Valor de salida de prueba" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Adjunto de resultados de prueba" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Notas de prueba" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "Finalizó" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Elemento padre" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Introduzca números de serie para nuevos artículos" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Número de pieza del proveedor" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Expirado" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Elementos secundarios" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Introduzca el número de artículos de stock para serializar" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La cantidad no debe exceder la cantidad disponible de stock ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Ubicación de stock de destino" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "Los números de serie no se pueden asignar a esta parte" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Números de serie ya existen" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Añadir nota de transacción (opcional)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Sub-ubicación" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "La parte debe ser vendible" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "El artículo está asignado a una orden de venta" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "El artículo está asignado a una orden de creación" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Cliente para asignar artículos de stock" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "La empresa seleccionada no es un cliente" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Notas de asignación de stock" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "Debe proporcionarse una lista de artículos de stock" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Notas de fusión de stock" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Permitir proveedores no coincidentes" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permitir fusionar artículos de stock con diferentes partes de proveedor" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Permitir estado no coincidente" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "Permitir fusionar artículos de stock con diferentes códigos de estado" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Debe proporcionar al menos dos artículos de stock" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Sin cambios" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Valor de clave primaria de Stock" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "No hay existencias del artículo" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Notas de transacción de stock" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "Órdenes de venta" msgid "Return Orders" msgstr "Ordenes de devolución" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Nombre de usuario" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Nombre" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Nombre del usuario" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Apellido" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Apellido del usuario" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Dirección de correo del usuario" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Personal" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Tiene este usuario permisos de personal" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Superusuario" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Es este usuario un superusuario" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Esta cuenta de usuario está activa" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Su cuenta ha sido creada." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Por favor, utilice la función de restablecer la contraseña para iniciar sesión" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Bienvenido a InvenTree" diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po index 043c90256e..8e83dc1b65 100644 --- a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Language: et_EE\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Teil ei ole selle lehe vaatamiseks luba" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Meili (uuesti)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "E-posti aadressi kinnitus" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "" -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "" @@ -112,13 +104,13 @@ msgstr "Pane kuupäev" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Märkmed" @@ -131,75 +123,75 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Ühenduse viga" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Esines tõrge" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +199,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-post" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Vigane valik" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nimi" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Kirjeldus" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Kirjeldus (valikuline)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Tee" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serveri viga" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Pilt" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Valuuta" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Hiina (lihtsustatud)" msgid "Chinese (Traditional)" msgstr "Hiina (traditsiooniline)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Määratud" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Valikuline" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Jälgitud" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Saadaval" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Asukoht" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "" msgid "Reference" msgstr "Tootekood" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Koostamise olek" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Loomise kuupäev" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Kogus" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Osa nimi" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Tühista kõik laoseisu eraldised mahakantud väljundite jaoks" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Valikained" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Jälgitav" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Saadaval laos" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "Katkestatud" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Valmis" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "On link" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "On fail" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Pluginat pole" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Uuendatud" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Seade võti" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Seade väärtus" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "ID" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Pealkiri" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Avaldatud" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Autor" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Kokkuvõte" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Loetud" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Pildifail" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Ühiku nimi" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Sümbol" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definitsioon" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Ühiku definitsioon" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Manus" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Puuduv fail" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Puuduv väline link" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Vali fail, mida lisada" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Kommentaar" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Faili suurus" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Silt" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Loodud" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Mall" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Andmed" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Märkus" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Vöötkoodi andmed" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Vastus" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Tulemus" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Võti" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Ülesande nimi" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Funktsioon" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Funktsiooni nimi" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumendid" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Ülesande argumendid" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Failinimi" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Mudeli liik" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "Grupp puudub" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Taaskäivitamine on vajalik" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Ettevõtte nimi" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "päeva" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Automaatne varundus" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Vöötkoodi tugi" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Ostetav" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtuaalne" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Lehe suurus" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Luba liidese integreerimine" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Luba pluginatel integreeruda kasutajaliidesesse" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Tootja" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Ettevõte" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "Laos" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Ettevõtted" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Ettevõtte kirjeldus" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Ettevõtte kirjeldus" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Veebileht" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "Ettevõtte veebilehe aadress" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Telefoninumber" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Kontakttelefoni number" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontakt e-postiaadress" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Aadress" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Aadressid" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Vali ettevõte" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Peamine aadress" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Määra peamine aadress" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Rida 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Aadressi rida 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Rida 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Aadressi rida 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Postiindeks" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Linn/Piirkond" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Riik" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Tarnija" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Vali tarnija" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Andmefail" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Veerud" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Väli" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Veerg" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Staatus" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Müügihind" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Saadetud" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Saadetis" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Rida" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "Tellimuse ID" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "Kopeeritava tellimuse ID" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Kopeeri read" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Kopeeri reaüksused algsest tellimusest" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Kopeeri lisareaüksused algsest tellimusest" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopeeri parameetrid" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Määrake selle tellimuse dubleerimise valikud" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Vale tellimuse ID" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "Tootekood" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Vöötkood" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Skännitud ribakood" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "Saadetised" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "Järgmised seerianumbrid ei ole saadaval" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "Tagasimakse" msgid "Reject" msgstr "Keeldu" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Sügavus" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Osa kategooria" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Osa kategooriad" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Ikoon" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikoon (valikuline)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Osad" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Osa nimi" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "On mall" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Märksõnad" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Osa kategooria" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimaalne laoseis" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Testimalle saab luua ainult testitavate osade jaoks" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Originaalosa" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopeeri pilt" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Kopeeri parameetrid" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategooria nimi" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Ehitamine" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Tarnijad" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Tarnija info" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minimaalne hind" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Maksimaalne hind" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Uuenda" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "Valikud" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "Paki plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Autorit ei leitud" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Seerianumber" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Testitulemused" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Tarnija osa number" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Kasutajanimi" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Eesnimi" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Perekonnanimi" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po index 3c7bed40bc..5c0d74968b 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "Address e API peida nashod" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "لیست اقلام یا فیلترها باید برای عملیات انبوه ارائه شود" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "موارد باید به صورت لیست ارائه شود" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "لیست موارد نامعتبر ارائه شده است" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "فیلترها باید به صورت دستوری ارائه شوند" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "فیلترهای نامعتبر ارائه شده است" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "تمامی فیلترها باید منحصراً با مقدار true مورد استفاده قرار گیرند" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "هیچ موردی با معیارهای ارائه شده مطابقت ندارد" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "کاربر سطح دسترسی نمایش این مدل را ندارد" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "ایمیل (دوباره وارد کنید)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "تایید آدرس ایمیل" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "هر بار باید همان ایمیل را تایپ کنید." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "آدرس ایمیل اصلی ارائه شده معتبر نیست." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "دامنه ایمیل ارائه شده تایید نشده است." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "نمی‌توان {original} را به {unit} تبدیل کرد" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "مقدار ارائه شده نامعتبر است" @@ -112,13 +104,13 @@ msgstr "تاریخ را وارد کنید" msgid "Invalid decimal value" msgstr "مقدار اعشاری نامعتبر است" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "یادداشت" @@ -131,75 +123,75 @@ msgstr "مقدار '{name}' در قالب الگو ظاهر قرار نمی گی msgid "Provided value does not match required pattern: " msgstr "مقدار ارائه شده با الگوی مورد نیاز مطابقت ندارد: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "نمی توان بیش از 1000 مورد را به طور همزمان سریال کرد" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "رشته شماره سریال خالی" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "سریال تکراری" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "گروه نامعتبر: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "محدوده گروه {group} از مقدار مجاز بیشتر است ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "هیچ شماره سریالی پیدا نشد" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "برچسب های HTML را از این مقدار حذف کنید" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "داده ها حاوی محتوای علامت گذاری ممنوع است" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "خطا در اتصال" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "سرور با کد وضعیت نامعتبر پاسخ داد" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "یک استثنا رخ داده است" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "سرور با مقدار طول محتوا نامعتبر پاسخ داد" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "اندازه عکس بسیار بزرگ است" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "حجم دانلود تصویر از حداکثر اندازه بیشتر شده است" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "سرور ریموت پاسخ خالی را برگرداند" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "URL ارائه شده یک فایل تصویری معتبر نیست" @@ -207,11 +199,11 @@ msgstr "URL ارائه شده یک فایل تصویری معتبر نیست" msgid "Log in to the app" msgstr "وارد برنامه شوید" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "ایمیل" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "قبل از انجام هر کار دیگری باید احراز هویت دو مرحله ای را فعال کنید." @@ -255,133 +247,124 @@ msgstr "مرجع باید با الگوی مورد نیاز مطابقت داش msgid "Reference number is too large" msgstr "شماره مرجع خیلی بزرگ است" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "انتخاب نامعتبر" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "نام" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "توضیحات" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "توضیحات (اختیاری)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "مسیر" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "نام‌های تکراری نمی‌توانند تحت یک والد وجود داشته باشند" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "یادداشت های علامت گذاری (اختیاری)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "داده های بارکد" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "داده های بارکد شخص ثالث" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "هش بارکد" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "هش منحصر به فرد داده های بارکد" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "بارکد موجود پیدا شد" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "شکست کار" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "پس از {n} تلاش، کار پس زمینه '{f}' ناموفق بود" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "خطای سرور" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "یک خطا توسط سرور ثبت شده است." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "باید یک عدد معتبر باشد" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "ارز" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "ارز را از گزینه های موجود انتخاب کنید" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "مقدار نامعتبر" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "تصویر ریموت" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "آدرس فایل تصویری از راه دور" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "دانلود تصاویر از URL ریموت فعال نیست" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "دانلود تصویر از URL ریموت انجام نشد" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "چینی (ساده شده)" msgid "Chinese (Traditional)" msgstr "چینی (سنتی)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "واحد فیزیکی نامعتبر" msgid "Not a valid currency code" msgstr "کد ارز معتبر" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "وضعیت سفارش" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "قطعه" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "دسته" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "واگذار شده به من" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "واگذار شده به" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "ایجاد شده قبل از" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "ایجاد شده بعد از" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "دارای تاریخ شروع" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "تاریخ شروع قبل از" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "تاریخ شروع بعد از" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "دارای تاریخ موعد" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "تاریخ موعد قبل از" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "تاریخ موعد بعد از" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "تکمیل شده قبل از" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "تکمیل شده بعد از" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "مصرفی" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "اختیاری" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "مونتاژ" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "سفارش معوق" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "اختصاص داده شده" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "در دسترس" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "سفارش ساخت" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "مکان" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "سفارش‌های ساخت" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "مرجع سفارش فروش" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "منبع محل" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "مقصد" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "تاریخ تکمیل" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "تکمیل شده توسط" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "صادر شده توسط" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "کاربری که این سفارش ساخت را صادر کرده است" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "پیوند خارجی" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "فایل‌های داده" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "هیچ عملیات کاربر-محوری، مشخص نشده است" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po index 86a703b70e..3abc53bc95 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API-rajapintaa ei löydy" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Käyttäjän oikeudet eivät riitä kohteen tarkastelemiseen" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Sähköposti (uudelleen)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Sähköpostiosoitteen vahvistus" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Sinun täytyy kirjoittaa sama sähköposti joka kerta." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Annettu ensisijainen sähköpostiosoite ei kelpaa." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Annetun sähköpostiosoitteen verkkotunnusta ei hyväksytä." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Annettu määrä on virheellinen" @@ -112,13 +104,13 @@ msgstr "Anna päivämäärä" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Merkinnät" @@ -131,75 +123,75 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Tyhjä sarjanumero" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplikaatti sarjanumero" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Sarjanumeroita ei löytynyt" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Yhteysvirhe" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Palvelin vastasi virheellisellä tilakoodilla" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Kuva on liian iso" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Kuvan lataus ylitti enimmäiskoon" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Etäpalvelin palautti tyhjän vastauksen" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Annettu URL ei ole kelvollinen kuvatiedosto" @@ -207,11 +199,11 @@ msgstr "Annettu URL ei ole kelvollinen kuvatiedosto" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Sähköposti" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "" msgid "Reference number is too large" msgstr "Viitenumero on liian suuri" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Virheellinen valinta" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nimi" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Kuvaus" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Kuvaus (valinnainen)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Polku" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Viivakoodin Tiedot" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Palvelinvirhe" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Kuva" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Täytyy olla kelvollinen luku" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Valuutta" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Valitse valuutta käytettävissä olevista vaihtoehdoista" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Virheellinen arvo" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "Kuvatiedoston URL" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Kuvien lataaminen ei ole käytössä" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategoria" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Saatavilla" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Sijainti" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Ulkoinen linkki" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Linkki ulkoiseen URLiin" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Määrä" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Varastotuote" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Sarjanumerot" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Ei sallittu" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Seurattavissa" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "Peruttu" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Valmis" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Päivitetty" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Viimeisimmän päivityksen aikaleima" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Käyttäjä" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Hinta" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktiivinen" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Salaisuus" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Isäntä" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Otsikko" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Linkki" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Julkaistu" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Julkaisija" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Yhteenveto" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Kuvatiedosto" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Liite" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Puuttuva tiedosto" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Puuttuva ulkoinen linkki" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Valitse liitettävä tiedosto" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Kommentti" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Arvo" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Käytössä" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Muistiinpano" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Avain" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Tiedostonimi" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "Ei ryhmää" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Uudelleenkäynnistys vaaditaan" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Yrityksen nimi" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Yrityksen sisäinen nimi" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Oletusvaluutta" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "päivää" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Automaattinen varmuuskopionti" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Ota käyttöön tietokannan ja mediatiedostojen automaattinen varmuuskopiointi" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Automaattisen varmuuskopioinnin aikaväli" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Viivakoodituki" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponentti" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Ostettavissa" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Sisäiset hinnat" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Sisäisen hinnan ohitus" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Sivun koko" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Salli salasananpalautus" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Salli rekisteröinti" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Salli SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Salli SSO kirjautumissivuilla" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Salli SSO rekisteröinti" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Sähköposti vaaditaan" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Sähköpostiosoite kahdesti" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Salasana kahdesti" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Sallitut verkkotunnukset" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Pakota MFA" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Valmistaja" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Yritys" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Yritykset" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Yrityksen kuvaus" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Sivusto" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "Yrityksen sivuston URL" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Puhelinnumero" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakti" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Osoite" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Valitse valmistaja" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Valmistajan osanumero" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Toimittaja" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Valitse toimittaja" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Toimittajan varastonimike" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" -msgstr "Valitse valmistajan osa" +#: company/models.py:792 +msgid "Primary" +msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "Valitse valmistajan osa" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Datatiedosto" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Valmis" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Hinta yhteensä" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Tilauksen valuutta" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Tilauksen viite" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Tila" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Asiakas" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Asiakkaan viite " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Vastaanotettu" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Lähetetty" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Seurantakoodi" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Laskunumero" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Viivakoodi" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Oletus avainsanat" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Kuvake" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Kuvake (valinnainen)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Avainsanat" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Päivämäärä" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Valmistajan osanumero" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Sarjanumero" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Käyttäjätunnus" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Etunimi" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Sukunimi" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po index 4b7148c271..0135765712 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "Point de terminaison de l'API introuvable" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Liste des éléments ou des filtres à fournir pour les opérations en vrac" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Les éléments doivent être fournis sous forme de liste" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Liste d'éléments non valide fournie" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Les filtres doivent être fournis sous forme de dictionnaire" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Filtres fournis invalides" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Tous les filtres ne doivent être utilisés qu'avec \"true\"" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Aucun élément ne correspond aux critères fournis" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Aucune donnée disponible" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "Ce champ doit être unique" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "L'utilisateur n'a pas la permission de voir ce modèle" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Email (encore)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Confirmation de l'adresse email" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Vous devez taper le même e-mail à chaque fois." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "L'adresse e-mail principale fournie n'est pas valide." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Le domaine e-mail fourni n'est pas approuvé." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Impossible de convertir {original} en {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Quantité fournie invalide" @@ -112,13 +104,13 @@ msgstr "Entrer la date" msgid "Invalid decimal value" msgstr "Valeur décimale invalide" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Notes" @@ -131,75 +123,75 @@ msgstr "La valeur '{name}' n'apparaît pas dans le format du modèle" msgid "Provided value does not match required pattern: " msgstr "La valeur fournie ne correspond pas au modèle requis : " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Impossible de sérialiser plus de 1000 éléments à la fois" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Chaîne de numéro de série vide" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Numéro de série en doublon" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Groupe invalide : {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, 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:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Aucun numéro de série trouvé" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Le nombre de numéros de série uniques ({n}) doit correspondre à la quantité ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Retirer les balises HTML de cette valeur" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Les données contiennent du contenu markdown interdit" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Erreur de connexion" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Le serveur a répondu avec un code de statut invalide" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Une erreur est survenue" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 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:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Image trop volumineuse" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "La taille de l'image dépasse la taille maximale autorisée" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Le serveur distant a renvoyé une réponse vide" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "L'URL fournie n'est pas un fichier image valide" @@ -207,11 +199,11 @@ msgstr "L'URL fournie n'est pas un fichier image valide" msgid "Log in to the app" msgstr "Se connecter à l'application" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Vous devez activer l'authentification à deux facteurs avant toute autre chose." @@ -255,135 +247,126 @@ msgstr "La référence doit correspondre au modèle requis" msgid "Reference number is too large" msgstr "Le numéro de référence est trop grand" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Choix invalide" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nom" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Description" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Description (facultative)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Chemin d'accès" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 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:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Notes Markdown (option)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Données du code-barres" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Données de code-barres tierces" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Hash du code-barre" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Hachage unique des données du code-barres" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Code-barres existant trouvé" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Échec de la tâche" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "La tâche de travail en arrière-plan '{f}' a échoué après {n} tentatives" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Erreur serveur" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Une erreur a été loguée par le serveur." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Image" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Doit être un nombre valide" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Devise" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Sélectionnez la devise à partir des options disponibles" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "Ce champ ne peut pas être vide." -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Valeur non valide" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Images distantes" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL du fichier image distant" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Le téléchargement des images depuis une URL distante n'est pas activé" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Échec du téléchargement de l'image à partir de l'URL distant" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" -msgstr "" +msgstr "Format du type de contenu invalide" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" -msgstr "" +msgstr "Type de contenu introuvable" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "Le type de contenu ne correspond pas à la classe de mixin requise" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -537,11 +520,11 @@ msgstr "Chinois (Simplifié)" msgid "Chinese (Traditional)" msgstr "Chinois (Traditionnel)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "Mise à jour disponible" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "Une mise à jour pour InvenTree est disponible" @@ -553,30 +536,30 @@ msgstr "Unité invalide" msgid "Not a valid currency code" msgstr "Code de devise invalide" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Statut de la commande" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Fabrication parente" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Inclure les variantes" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Inclure les variantes" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Inclure les variantes" msgid "Part" msgstr "Pièce" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Catégorie" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Version Précédente" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Attribué à moi" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Attribué à" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Créé avant" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Créé après" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "A une date de début" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Date de début avant" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Date de début après" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "A une date butoir" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Date cible avant" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Date cible après" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Terminé avant" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Terminé après" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "Date min" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "Date maximale" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Exclure l'arbre" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "La construction doit être annulée avant de pouvoir être supprimée" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Consommable" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Facultatif" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Assemblage" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Suivi" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Testable" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Commande en cours" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Allouée" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Consommé" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponible" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "En Commande" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordre de Fabrication" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Emplacement" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Sortie" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." -msgstr "" +msgstr "Filtrer par l'identifiant (ID) des articles du stock de sortie. Utilisez 'null' pour trouver les éléments de fabrication non installés." -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Ordres de Fabrication" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "La liste des composants de l'assemblage n'a pas été validée" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Impossible de créer un ordre de fabrication pour une pièce inactive" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Impossible de créer un ordre de fabrication pour une pièce non verrouillée" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Les ordres de fabrication ne peuvent être exécutées qu'en externe pour les pièces achetables" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Un utilisateur ou un groupe responsable doit être spécifié" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "La pièce de commande de construction ne peut pas être changée" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "La date cible doit être postérieure à la date de début" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Référence de l' Ordre de Fabrication" msgid "Reference" msgstr "Référence" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Brève description de la fabrication (optionnel)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "BuildOrder associé a cette fabrication" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "Commande de fabrication associée à cette fabrication" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Sélectionnez la pièce à construire" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Bon de commande de référence" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Commande de vente à laquelle cette construction est allouée" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "Commande de vente à laquelle cette fabrication est allouée" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Emplacement d'origine" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Sélectionner l'emplacement à partir duquel le stock doit être pris pour cette construction (laisser vide pour prendre à partir de n'importe quel emplacement de stock)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "Fabrication externe" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Cet ordre de fabrication est exécuté en externe" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Emplacement cible" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Sélectionnez l'emplacement où les éléments complétés seront stockés" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Quantité a fabriquer" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Nombre de stock items à construire" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Articles terminés" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Nombre d'articles de stock qui ont été terminés" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "État de la construction" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Code de statut de construction" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Code de lot" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Code de lot pour ce build output" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Date de création" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "Début de la fabrication" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Date de début prévue pour cet ordre de construction" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Date d'achèvement cible" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Date cible pour l'achèvement de la construction. La construction sera en retard après cette date." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Date d'achèvement" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "achevé par" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Émis par" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Utilisateur ayant émis cette commande de construction" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsable" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Utilisateur ou groupe responsable de cet ordre de construction" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Lien Externe" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Lien vers une url externe" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Priorité de fabrication" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Priorité de cet ordre de fabrication" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Code du projet" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Code de projet pour cet ordre de construction" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Impossible de terminer l'ordre de fabrication avec des constructions enfant ouvertes" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Impossible de terminer l'ordre de fabrication avec des sorties incomplètes" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Échec du déchargement de la tâche pour terminer les allocations de construction" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "La commande de construction {build} a été effectuée" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Une commande de construction a été effectuée" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Les numéros de série doivent être fournis pour les pièces traçables" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Pas d'ordre de production défini" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "L'ordre de production a déjà été réalisé" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "L'ordre de production de correspond pas à l'ordre de commande" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantité ne peut pas être supérieure à la quantité de sortie" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "Les sorties de fabrication n'ont pas passé tous les tests requis" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "La sortie de compilation {serial} n'a pas réussi tous les tests requis" -#: build/models.py:1230 -msgid "Cannot partially complete a build output with allocated items" -msgstr "" +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "Les articles en stock alloués sont toujours en production" -#: build/models.py:1628 +#: build/models.py:1211 +msgid "Cannot partially complete a build output with allocated items" +msgstr "Impossible de compléter partiellement une sortie de construction avec les éléments alloués" + +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Poste de l'ordre de construction" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Création de l'objet" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Création de l'objet" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Quantité" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Quantité requise pour la commande de construction" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Quantité de stock consommé" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "L'élément de construction doit spécifier une sortie de construction, la pièce maîtresse étant marquée comme objet traçable" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "L'article de stock sélectionné ne correspond pas à la ligne BOM" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "La quantité allouée doit être supérieure à zéro" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "La quantité doit être de 1 pour stock sérialisé" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "La quantité allouée ({q}) ne doit pas excéder la quantité disponible ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "L'article de stock est suralloué" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "La quantité allouée doit être supérieure à zéro" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "La quantité doit être de 1 pour stock sérialisé" - -#: build/models.py:1876 -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:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "La quantité allouée dépasse la quantité disponible dans le stock" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Article en stock" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Stock d'origine de l'article" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Quantité de stock à allouer à la construction" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Installer dans" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Stock de destination de l'article" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Niveau de construction" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nom de l'article" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Code du projet Étiquette" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Sortie d'assemblage" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "L'ordre de production ne correspond pas à l'ordre parent" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "La pièce en sortie ne correspond pas à la pièce de l'ordre de construction" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Cet ordre de production a déjà été produit" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Cet ordre de production n'est pas complètement attribué" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Entrer la quantité désiré pour la fabrication" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Quantité entière requise pour les pièces à suivre" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantité entière requise, car la facture de matériaux contient des pièces à puce" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Numéros de série" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Entrer les numéros de séries pour la fabrication" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Emplacement de stock pour la sortie de la fabrication" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Allouer automatiquement les numéros de série" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Affecter automatiquement les éléments requis avec les numéros de série correspondants" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Les numéros de série suivants existent déjà, ou sont invalides" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Une liste d'ordre de production doit être fourni" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Emplacement du stock pour les sorties épuisées" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Ignorer les allocations" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Abandonner les allocations de stock pour les sorties abandonnées" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Motif de l'élimination des produits de construction(s)" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Emplacement des ordres de production achevés" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Accepter l'allocation incomplète" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Compléter les sorties si le stock n'a pas été entièrement alloué" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Consommation du stock alloué" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Consommer tout stock qui a déjà été alloué à cette construction" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Retirer les sorties incomplètes" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Supprimer toutes les sorties de construction qui n'ont pas été complétées" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Non permis" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Accepter comme consommé par cet ordre de construction" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Désaffecter avant de terminer cette commande de fabrication" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Stock suralloué" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Comment voulez-vous gérer les articles en stock supplémentaires assignés à l'ordre de construction" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Certains articles de stock ont été suralloués" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Accepter les non-alloués" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accepter les articles de stock qui n'ont pas été complètement alloués à cette ordre de production" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Le stock requis n'a pas encore été totalement alloué" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Accepter les incomplèts" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Accepter que tous les ordres de production n'aient pas encore été achevés" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "La quantité nécessaire n'a pas encore été complétée" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "L'ordre de construction a des ordres de construction enfants ouverts" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "L'ordre de construction doit être en état de production" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "L'ordre de production a des sorties incomplètes" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Chaîne d'assemblage" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Sortie d'assemblage" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "La sortie de la construction doit pointer vers la même construction" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Élément de la ligne de construction" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part doit pointer sur la même pièce que l'ordre de construction" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "La sortie de construction doit être spécifiée pour l'allocation des pièces suivies" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "La sortie de la construction ne peut pas être spécifiée pour l'allocation des pièces non suivies" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Les articles d'allocation doivent être fournis" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Emplacement de stock où les pièces doivent être fournies (laissez vide pour les prendre à partir de n'importe quel emplacement)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Emplacements exclus" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Exclure les articles de stock de cet emplacement sélectionné" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Stock interchangeable" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Les articles de stock à plusieurs emplacements peuvent être utilisés de manière interchangeable" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Stock de substitution" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Autoriser l'allocation de pièces de remplacement" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Objets Optionnels" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Affecter des éléments de nomenclature facultatifs à l'ordre de fabrication" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Échec du démarrage de la tâche d'auto-allocation" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Référence de la nomenclature" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID de la pièce de la nomenclature" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Nomenclature Nom de la pièce" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Construire" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Pièce fournisseur" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Quantité allouée" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Référence de construction" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Nom de la catégorie de pièces" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Traçable" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Reçu de quelqu'un" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Autoriser les variantes" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Article du BOM" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "En Production" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Planifié pour fabrication" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Stock externe" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Stock disponible" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Stock de substitution disponible" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Stock de variantes disponibles" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "La quantité consommée dépasse la quantité allouée" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Note optionnelle pour la consommation du stock" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "L'article fabriqué doit pointer vers l'ordre de fabrication correct" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Dupliquer l'allocation de l'article de fabrication" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "L'article fabriqué doit pointer vers l'ordre de fabrication correct" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Dupliquer l'allocation de ligne de fabrication" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Au moins un élément ou une ligne doit être fourni" @@ -1474,67 +1478,71 @@ msgstr "En pause" msgid "Cancelled" msgstr "Annulé" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Terminé" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Stock requis pour la commande de construction" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "L'ordre de fabrication {build} nécessite du stock additionnel" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Ordre de commande en retard" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "L'ordre de commande {bo} est maintenant en retard" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "C'est un lien" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "C'est un fichier" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "L'utilisateur n'a pas les permissions de supprimer cette pièce jointe" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Code de devise invalide" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Code de devise en double" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Aucun code de devise valide fourni" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Pas de plugin" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Code du projet Étiquette" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Mise à jour" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Date de la dernière mise à jour" @@ -1546,778 +1554,778 @@ msgstr "Mis à jour par" msgid "User who last updated this object" msgstr "Utilisateur qui a mis à jour cet objet en dernier" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Code projet unique" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Description du projet" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Utilisateur ou groupe responsable de ce projet" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Paramétrés des touches" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Valeur du paramètre" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "La valeur choisie n'est pas une option valide" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "La valeur doit être une valeur booléenne" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "La valeur doit être un nombre entier" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "Valeur doit être un nombre valide" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "La valeur ne passe pas les contrôles de validation" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "La chaîne de caractères constituant la clé doit être unique" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Utilisateur" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Quantité de rupture de prix" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Prix" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Prix unitaire à la quantité spécifiée" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Point final" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Point de terminaison auquel ce webhook est reçu" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Nom de ce webhook" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Actif" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Ce webhook (lien de rappel HTTP) est-il actif" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Jeton" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Jeton d'accès" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Confidentiel" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Secret partagé pour HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "ID message" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Identifiant unique pour ce message" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Hôte" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Hôte à partir duquel ce message a été reçu" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Entête" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "En-tête de ce message" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Corps" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Corps de ce message" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Endpoint à partir duquel ce message a été reçu" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Travaillé sur" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Le travail sur ce message est-il terminé ?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "Id" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Titre" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Lien" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Publié" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Auteur" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Résumé" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Lu" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Cette nouvelle a-t-elle été lue ?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Fichier image" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "Type de modèle cible pour cette image" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "ID du modèle cible pour cette image" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Unité personnalisée" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "Le symbole de l'unité doit être unique" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Le nom de l'unité doit être un identifiant valide" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Nom de l'unité" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Symbole" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Symbole d'unité facultatif" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Définition" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Définition de l'unité" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Pièce jointe" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Fichier manquant" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Lien externe manquant" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Type de modèle" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "Type de modèle cible pour l'image" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Sélectionnez un fichier à joindre" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Commentaire" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Commentaire sur la pièce jointe" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Date de téléchargement" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Date de téléchargement du fichier" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Taille du fichier" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Taille du fichier en octets" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Type de modèle non valide spécifié pour la pièce jointe" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "État personnalisé" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "États membres de l'Union européenne" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "Ensemble d'états de référence" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "Ensemble d'états étendu à cet état personnalisé" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Clé logique" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "Clé logique de l'état qui est égale à cet état personnalisé dans la logique métier" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valeur" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "Valeur numérique qui sera enregistrée dans la base de données des modèles" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Nom de l'Etat" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Étiquette" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Etiquette qui sera affichée dans le frontend" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Couleur" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Couleur qui sera affichée dans le frontend" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Modèle" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "Modèle cet état est associé à" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "Le modèle doit être sélectionné" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "La clé doit être sélectionnée" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "La clé logique doit être sélectionnée" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "La clé doit être différente de la clé logique" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "Une classe de statut de référence valide doit être fournie" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "La clé doit être différente des clés logiques de l'état de référence" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "La clé logique doit se trouver dans les clés logiques de l'état de référence" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "Le nom doit être différent des noms des statuts de référence" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Liste de sélection" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Listes de sélection" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Nom de la liste de sélection" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Description de la liste de sélection" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Verrouillé" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "Cette liste de sélection est-elle verrouillée ?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "Cette liste de sélection peut-elle être utilisée ?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Plug-in source" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Plugin qui fournit la liste de sélection" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Chaîne source" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Chaîne facultative identifiant la source utilisée pour cette liste" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Entrée par défaut" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Entrée par défaut pour cette liste de sélection" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Créé le" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Date et heure de création de la liste de sélection" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Dernière mise à jour" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "Date et heure de la dernière mise à jour de la liste de sélection" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Entrée de la liste de sélection" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Entrées de la liste de sélection" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Liste de sélection à laquelle appartient cette entrée" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Valeur de l'entrée de la liste de sélection" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Étiquette pour l'entrée de la liste de sélection" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Description de l'entrée de la liste de sélection" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "Cette entrée de la liste de sélection est-elle active ?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Modèle de paramètre" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" -msgstr "" +msgstr "Modèle de paramètre" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "Les paramètres des cases à cocher ne peuvent pas avoir d'unités" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "Les paramètres des cases à cocher ne peuvent pas comporter de choix" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "Les choix doivent être uniques" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "Le nom du modèle de paramètre doit être unique" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" -msgstr "" +msgstr "Type de modèle cible pour ce modèle de paramètre" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Nom du paramètre" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Unités" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Unités physiques pour ce paramètre" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Description des paramètres" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Case à cocher" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Ce paramètre est-il une case à cocher ?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Choix" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Choix valables pour ce paramètre (séparés par des virgules)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "Liste de sélection pour ce paramètre" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Activé" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "Ce modèle de paramètre est-il activé ?" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" -msgstr "" +msgstr "Paramètre" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" -msgstr "" +msgstr "Paramètres" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Choix incorrect pour la valeur du paramètre" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "Type de modèle non valide pour la pièce jointe" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" -msgstr "" +msgstr "Identifiant du Modèle (ID)" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "ID du modèle cible pour ce paramètre" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Modèle" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" -msgstr "" +msgstr "Modèle de paramètre" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Données" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Valeur du paramètre" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Note" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Champ de notes facultatif" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Analyse du code-barres" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Données du code-barres" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Utilisateur qui a scanné le code-barres" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Horodatage" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Date et heure du scan de code-barres" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "Point d'accès à l'URL qui a traité le code-barres" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Contexte" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Données contextuelles pour la lecture du code-barres" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Réponse" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Données de réponse provenant de la lecture du code-barres" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Résultat" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "La lecture du code-barres a-t-elle réussi ?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "Une erreur s'est produite" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8 : La suppression du journal d'e-mail est protégée. Définissez INVENTREE_PROTECT_EMAIL_LOG à False pour permettre la suppression." -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "Message email" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "Messages email" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "Annoncé" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "Envoyé" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "Échec" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "Livré" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "Confirmé" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "Entrant" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "Sortant" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "Sans réponse" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "Suivi de livraison" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "Suivi de la lecture" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "Suivi du clic" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "ID Global" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identifiant pour ce message (peut être fourni par un système externe)" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "ID du sujet de discussion" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identifiant pour ce fil de message (peut être fourni par un système externe)" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "Fil de discussion" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "Fil lié à ce message" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" -msgstr "" +msgstr "Priorité" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "Fil d'Email" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "Fils d'Emails" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Clé" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "Clé unique pour ce fil (utilisée pour identifier le fil)" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "Identifiant unique pour ce fil" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "Démarré en interne" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "Est-ce que ce fil a été démarré en interne ?" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "Date et heure de création du fil" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "Date et heure de dernière mise à jour du fil" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} annulé" msgid "A order that is assigned to you was canceled" msgstr "Une commande qui vous est assignée a été annulée" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Articles reçus" @@ -2351,93 +2359,101 @@ msgstr "Des articles d'un bon de commande ont été reçus" msgid "Items have been received against a return order" msgstr "Les articles ont été reçus dans le cadre d'un ordre de retour" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "Indique si la modification de ce paramètre nécessite une confirmation" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "Ce paramètre nécessite une confirmation avant les changements. Veuillez confirmer." + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "Indique si le paramètre est écrasé par une variable d'environnement" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "Écraser" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "En cours d'exécution" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Tâches en attente" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Tâches planifiées" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Tâches échouées" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID de la tâche" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "ID unique de la tâche" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Verrouillé" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Heure verrouillé" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Nom de la tâche" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Fonction" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Nom de la fonction" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Arguments" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Arguments tâche" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Mots-clés Arguments" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Mots-clés arguments tâche" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Nom du fichier" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Type de modèle" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "L'utilisateur n'a pas le droit de créer ou de modifier des pièces jointes pour ce modèle" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" -msgstr "" +msgstr "L'utilisateur n'a pas le droit de créer ou de modifier les paramètres de ce modèle." -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "La liste de sélection est verrouillée" @@ -2445,1128 +2461,1157 @@ msgstr "La liste de sélection est verrouillée" msgid "No group" msgstr "Pas de groupe" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "L'URL du site est verrouillée par configuration" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Redémarrage nécessaire" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Un paramètre a été modifié, ce qui nécessite un redémarrage du serveur" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Migration en attente" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Nombre de migrations de base de données en attente" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "Codes warning actifs" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "Un dictionnaire de codes d'avertissement actifs" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "ID de l'instance" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "Identifiant unique pour cette instance InvenTree" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "Annoncer l'ID" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Annoncer l'ID d'instance du serveur dans l'info sur l'état du serveur (non authentifié)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Nom de l'instance du serveur" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Chaîne de caractères descriptive pour l'instance serveur" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Utiliser le nom de l'instance" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Utiliser le nom de l’instance dans la barre de titre" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Limiter l'affichage de `about`" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Afficher la modale `about` uniquement aux super-utilisateurs" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nom de la société" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Nom de société interne" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "URL de base" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "URL de base pour l'instance serveur" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Devise par défaut" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Sélectionnez la devise de base pour les calculs de prix" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Devises supportées" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Liste des codes de devises supportés" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Intervalle de mise à jour des devises" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Fréquence de mise à jour des taux de change (définir à zéro pour désactiver)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "jours" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Plugin de mise à jour de devise" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Plugin de mise à jour des devises à utiliser" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Télécharger depuis l'URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Autoriser le téléchargement d'images distantes et de fichiers à partir d'URLs externes" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Limite du volume de téléchargement" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Taille maximale autorisée pour le téléchargement de l'image distante" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "Agent utilisateur utilisé pour télécharger depuis l'URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permettre de remplacer l'agent utilisateur utilisé pour télécharger des images et des fichiers à partir d'URL externe (laisser vide pour la valeur par défaut)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Validation stricte d'URL" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Spécification du schéma nécessaire lors de la validation des URL" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Intervalle de vérification des mises à jour" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "À quelle fréquence vérifier les mises à jour (définir à zéro pour désactiver)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Backup automatique" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Activer le backup automatique de la base de données et des fichiers médias" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Intervalle de sauvegarde automatique" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Spécifiez le nombre de jours entre les sauvegardes automatique" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Intervalle de suppression des tâches" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Les résultats de la tâche en arrière-plan seront supprimés après le nombre de jours spécifié" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Intervalle de suppression du journal d'erreur" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Les logs d'erreur seront supprimés après le nombre de jours spécifié" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Intervalle de suppression du journal de notification" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Les notifications de l'utilisateur seront supprimées après le nombre de jours spécifié" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "Intervalle de suppression d'Email" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "Les Emails seront supprimés après le nombre de jours spécifié" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "Protéger le log d'Email" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "Empêcher la suppression des entrées du log d'email" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Support des code-barres" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Activer le support du scanner de codes-barres dans l'interface web" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "Résultats des codes-barres des magasins" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "Stocker les résultats de la lecture du code-barres dans la base de données" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "Scanners de codes-barres Comptage maximal" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "Nombre maximum de résultats de lecture de codes-barres à stocker" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Délai d'entrée du code-barres" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Délai de traitement du code-barres" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Prise en charge de la webcam code-barres" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Autoriser la numérisation de codes-barres via la webcam dans le navigateur" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "Code-barres Afficher les données" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Afficher les données du code-barres dans le navigateur sous forme de texte" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Plugin de génération de codes-barres" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Plugin à utiliser pour la génération interne de données de code-barres" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Modifications de la pièce" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Activer le champ de modification de la pièce" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "Révision de l'assemblage uniquement" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "N'autoriser les révisions que pour les pièces d'assemblage" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Autoriser la suppression de l'Assemblée" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permettre la suppression de pièces utilisées dans un assemblage" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Expression régulière pour la correspondance avec l'IPN de la Pièce" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Autoriser les IPN dupliqués" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Permettre à plusieurs pièces de partager le même IPN" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Autoriser l'édition de l'IPN" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Permettre de modifier la valeur de l'IPN lors de l'édition d'une pièce" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Copier les données de la pièce" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Copier les données des paramètres de la pièce" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Copier les données des paramètres par défaut lors de la duplication d'une pièce" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Copier les données de test de la pièce" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Copier les données de test par défaut lors de la duplication d'une pièce" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Copier les templates de paramètres de catégorie" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Copier les templates de paramètres de la catégorie lors de la création d'une pièce" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Les pièces sont des templates par défaut" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Les pièces peuvent être assemblées à partir d'autres composants par défaut" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Composant" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Les pièces peuvent être utilisées comme sous-composants par défaut" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Achetable" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Les pièces sont achetables par défaut" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Vendable" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Les pièces sont vendables par défaut" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Les pièces sont traçables par défaut" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtuelle" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Les pièces sont virtuelles par défaut" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Afficher les pièces connexes" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Afficher les pièces connexes à une pièce" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Stock initial" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Permettre la création d'un stock initial lors de l'ajout d'une nouvelle pièce" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Données initiales du fournisseur" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permettre la création des données initiales du fournisseur lors de l'ajout d'une nouvelle pièce" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Format d'affichage du nom de la pièce" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Format pour afficher le nom de la pièce" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Icône de catégorie par défaut" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Icône par défaut de la catégorie de la pièce (vide signifie aucune icône)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Nombre minimal de décimales" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Nombre minimum de décimales à afficher lors de l'affichage des prix" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Nombre maximal de décimales pour la tarification" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Nombre maximal de décimales à afficher lors du rendu des données de tarification" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Utiliser le prix fournisseur" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Inclure les réductions de prix dans le calcul du prix global" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Remplacer l'historique des achats" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "La tarification historique des bons de commande remplace les réductions de prix des fournisseurs" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Utiliser les prix des articles en stock" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Utiliser les prix des données de stock saisies manuellement pour calculer les prix" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Âge de tarification des articles de stock" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Exclure les articles en stock datant de plus de ce nombre de jours des calculs de prix" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Utiliser les prix variants" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Inclure la tarification variante dans le calcul global des prix" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Variantes actives uniquement" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "N'utiliser que des pièces de variante actives pour calculer le prix de la variante" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "Mise à jour automatique des prix" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "Mettre à jour automatiquement les prix des pièces quand les données internes changes" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Intervalle de regénération des prix" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Nombre de jours avant la mise à jour automatique du prix de la pièce" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Prix internes" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Activer les prix internes pour les pièces" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Substitution du prix interne" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Si disponible, les prix internes remplacent les calculs de la fourchette de prix" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Activer l'impression d'étiquettes" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Activer l'impression d'étiquettes depuis l'interface Web" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "Étiquette image DPI" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Résolution DPI lors de la génération de fichiers image pour fournir aux plugins d'impression d'étiquettes" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Activer les rapports" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Activer la génération de rapports" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Mode Débogage" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Générer des rapports en mode debug (sortie HTML)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Journal des erreurs" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Enregistrer les erreurs qui se produisent lors de la génération de rapports" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Taille de la page" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Taille de page par défaut pour les rapports PDF" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Renforcer les unités des paramètres" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Si des unités sont fournies, les valeurs de paramètre doivent correspondre aux unités spécifiées" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Numéro de Série Universellement Unique" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Les numéros de série pour les articles en stock doivent être uniques au niveau global" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Supprimer le stock épuisé" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Détermine le comportement par défaut lorsqu'un article de stock est épuisé" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Modèle de code de lot" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Modèle pour générer des codes par défaut pour les articles en stock" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Expiration du stock" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Activer la fonctionnalité d'expiration du stock" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Vendre le stock expiré" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Autoriser la vente de stock expiré" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Délai de péremption du stock" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Nombre de jours pendant lesquels les articles en stock sont considérés comme périmés avant d'expirer" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Construction de stock expirée" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Autoriser la construction avec un stock expiré" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Contrôle de la propriété des stocks" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Activer le contrôle de la propriété sur les emplacements de stock et les articles" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Icône par défaut de l'emplacement du stock" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Icône par défaut de l'emplacement du stock (vide signifie aucune icône)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Afficher les pièces en stock installées" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Affichage des articles en stock installés dans les tableaux de stock" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Vérifier la nomenclature lors de l'installation des articles" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Les articles de stock installés doivent exister dans la nomenclature de la pièce mère" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Autoriser le transfert des produits en rupture de stock" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permettre le transfert d'articles qui ne sont pas en stock d'un magasin à l'autre" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Modèle de référence de commande de construction" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Modèle requis pour générer le champ de référence de l'ordre de construction" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Nécessite un Responsable propriétaire" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Un propriétaire responsable doit être assigné à chaque commande" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "Exiger une partie active" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "Empêcher la création d'un ordre de fabrication pour les pièces inactives" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Requiert une pièce verrouillée" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "Empêcher la création d'un ordre de fabrication pour les pièces non verrouillées" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "Exiger une nomenclature valide" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "Empêcher la création d'un ordre de fabrication si la nomenclature n'a pas été validée" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "Exiger des ordonnances fermées pour les enfants" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "Empêcher l'achèvement de l'ordre de construction jusqu'à ce que tous les ordres d'enfants soient clôturés" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "Ordres de fabrication externes" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "Activer la fonctionnalité d'ordre de fabrication externe" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Blocage jusqu'à la réussite des tests" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Empêcher l'achèvement des résultats de la construction jusqu'à ce que tous les tests requis soient réussis" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Activer les retours de commandes" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Activer la fonctionnalité de retour de commande dans l'interface utilisateur" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Modèle de référence de retour de commande" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Modèle requis pour générer le champ de référence de la commande de retour" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Modifier les retours de commandes terminées" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Autoriser la modification des retours après leur enregistrement" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Modèle de référence de bon de commande" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Modèle requis pour générer le champ de référence du bon de commande" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Expédition par défaut du bon de commande" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Activer la création d'expédition par défaut avec les bons de commandes" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Modifier les commandes de vente terminées" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Autoriser la modification des commandes de vente après avoir été expédiées ou complétées" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" -msgstr "" +msgstr "L'expédition nécessite une vérification" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" -msgstr "" +msgstr "Empêcher l'achèvement des envois jusqu'à ce que les articles aient été vérifiés" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Marquer les commandes expédiées comme achevées" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Les commandes marquées comme expédiées seront automatiquement complétées, en contournant le statut « expédié »" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Modèle de référence de commande d'achat" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modèle requis pour générer le champ de référence de bon de commande" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Modifier les bons de commande terminés" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Autoriser la modification des bons de commande après avoir été expédiés ou complétés" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "Convertir la monnaie" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "Convertir la valeur de l'article dans la devise de base lors de la réception du stock" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Achat automatique des commandes" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marquer automatiquement les bons de commande comme terminés lorsque tous les articles de la ligne sont reçus" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Activer les mots de passe oubliés" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Activer la fonction \"Mot de passe oublié\" sur les pages de connexion" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Activer les inscriptions" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Activer l'auto-inscription pour les utilisateurs sur les pages de connexion" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Activer le SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Activer le SSO sur les pages de connexion" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Activer l'inscription SSO" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Activer l'auto-inscription via SSO pour les utilisateurs sur les pages de connexion" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "Activer la synchronisation du groupe SSO" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Permettre la synchronisation des groupes InvenTree avec les groupes fournis par l'IdP" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "Clé du groupe SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Le nom de l'attribut de revendication de groupe fourni par l'IdP" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "Carte de groupe SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Une correspondance entre les groupes SSO et les groupes InvenTree locaux. Si le groupe local n'existe pas, il sera créé." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "Supprimer les groupes en dehors de SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Indique si les groupes attribués à l'utilisateur doivent être supprimés s'ils ne sont pas gérés par l'IdP. La désactivation de ce paramètre peut entraîner des problèmes de sécurité" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Email requis" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Exiger que l'utilisateur fournisse un mail lors de l'inscription" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Saisie automatique des utilisateurs SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Remplir automatiquement les détails de l'utilisateur à partir des données de compte SSO" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Courriel en double" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mail" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Mot de passe deux fois" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Lors de l'inscription, demandez deux fois aux utilisateurs leur mot de passe" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Domaines autorisés" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restreindre l'inscription à certains domaines (séparés par des virgules, commençant par @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Grouper sur inscription" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Groupe auquel les nouveaux utilisateurs sont assignés lors de l'enregistrement. Si la synchronisation des groupes SSO est activée, ce groupe n'est défini que si aucun groupe ne peut être attribué par l'IdP." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Forcer l'authentification multifacteurs" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Les utilisateurs doivent utiliser l'authentification multifacteurs." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "Activer ce paramètre demandera à tous les utilisateurs de configurer l'authentification multi-facteurs. Toutes les sessions seront déconnectées immédiatement." + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Vérifier les plugins au démarrage" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Vérifier que tous les plugins sont installés au démarrage - activer dans les environnements conteneurs" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Vérifier les mises à jour des plugins" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Activer les vérifications périodiques pour les mises à jour des plugins installés" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Activer l'intégration d'URL" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Autoriser les plugins à ajouter des chemins URL" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Activer l'intégration de navigation" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Activer les plugins à s'intégrer dans la navigation" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Activer l'intégration de plugins" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Activer l'intégration de plugin pour ajouter des apps" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Activer l'intégration du planning" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Autoriser les plugins à éxécuter des tâches planifiées" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Activer l'intégration des évènements" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Autoriser les plugins à répondre aux évènements internes" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Permettre l'intégration de l'interface" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Permettre aux plugins de s'intégrer dans l'interface utilisateur" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "Activer l'intégration mail" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Autoriser les plugins à traiter les mails entrants/sortants" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "Activer les codes de projet" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "Activer les codes de projet pour le suivi des projets" -#: common/setting/system.py:1083 -msgid "Enable Stock History" -msgstr "Activer l'historique du stock" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" +msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "Activer la fonctionnalité d'enregistrement des historiques de niveaux de stock et de leur valeur" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Exclure les localisations externes" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" -msgstr "Exclure les articles en stock externes des calculs d'historique" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Période de l'inventaire automatique" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" -msgstr "Nombre de jours entre les enregistrements d'historique de stock" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" +msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "Supprimer les vieilles entrées d'historique de stock" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "Supprimer les entrées d'historique de stock plus vieilles que le nombre de jours spécifié" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "Intervalle de suppression des historiques de stock" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "Les entrées d'historique de stock seront supprimées après le nombre de jours spécifié" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "Afficher les noms des utilisateurs" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "Afficher les noms complets des utilisateurs au lieu des noms d'utilisateur" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "Afficher les profils d'utilisateur" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" -msgstr "Afficher les profils des utilisateurs sur leur page de profil" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" +msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "Activer les données de station de test" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" -msgstr "Activer la collecte des données de la station de test pour les résultats de test" +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "Afficher les noms des utilisateurs" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Afficher les noms complets des utilisateurs au lieu des noms d'utilisateur" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "Afficher les profils d'utilisateur" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "Afficher les profils des utilisateurs sur leur page de profil" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "Activer les données de station de test" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "Activer la collecte des données de la station de test pour les résultats de test" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3596,11 +3641,11 @@ msgstr "Afficher les rapports PDF dans le navigateur, au lieu de les télécharg #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "Scanner de codes-barres dans les champs de formulaire" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "Autoriser la saisie du scanner de code-barres dans les champs de formulaire" #: common/setting/user.py:51 msgid "Search Parts" @@ -3868,7 +3913,7 @@ msgstr "Sauvegarder les dernières machines d'impression utilisées par un utili #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "Tous les modèles" #: common/validators.py:63 msgid "No attachment model type provided" @@ -3911,366 +3956,370 @@ msgstr "La pièce est active" msgid "Manufacturer is Active" msgstr "Le fabricant est actif" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "Le fournisseur de la pièce est active" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "La pièce interne est active" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "Le fournisseur est actif" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Fabricant" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Société" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "A du stock" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Entreprises" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Description de la société" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Description de la société" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Site web" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "Site Web de la société" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Numéro de téléphone" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Numéro de téléphone de contact" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Adresse e-mail de contact" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contact" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Point de contact" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Lien externe vers les informations de l'entreprise" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "Cette entreprise est-elle active ?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "Le client est-il" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Vendez-vous des objets à cette entreprise?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "Le fournisseur est-il" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Est-ce que vous achetez des articles à cette entreprise?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Le fabricant est-il" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Cette entreprise fabrique-t-elle des pièces?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Devise par défaut utilisée pour cette entreprise" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "N° de TVA" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "Numéro d'identification fiscale de l'entreprise" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Adresse" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Adresses" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Sélectionner une entreprise" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Intitulé de l'adresse" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Titre décrivant la saisie de l'adresse" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Adresse principale" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Sélectionner comme adresse principale" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Ligne 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Adresse" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Ligne 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Seconde ligne d'adresse" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Code postal" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Ville / Région" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Code postal Ville / Région" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "État / Province" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "État ou province" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Pays" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Pays" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notes du livreur" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Instructions pour le livreur" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Notes pour la livraison interne" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Notes internes pour la livraison" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Lien vers les informations de l'adresse (externe)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Pièces du fabricant" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Pièce de base" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Sélectionner une partie" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Sélectionner un fabricant" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "Référence fabricant" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Référence du fabricant" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL pour le lien externe de la pièce du fabricant" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Description de la pièce du fabricant" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Les unités d'emballage doivent être compatibles avec les unités de base" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Les unités d'emballage doivent être supérieures à zéro" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "La pièce du fabricant liée doit faire référence à la même pièce de base" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Fournisseur" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Sélectionner un fournisseur" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Unité de gestion des stocks des fournisseurs" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Cette partie du fournisseur est-elle active ?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Sélectionner un fabricant" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "Lien de la pièce du fournisseur externe" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Description de la pièce du fournisseur" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "coût de base" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Conditionnement" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Conditionnement de l'article" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Nombre de paquet" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantité totale fournie dans un emballage unique. Laisser vide pour les articles individuels." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "plusieurs" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Commande multiple" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Quantité disponible auprès du fournisseur" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Disponibilité mise à jour" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Date de dernière mise à jour des données de disponibilité" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Rupture de prix pour le fournisseur" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "Renvoie la représentation sous forme de chaîne de caractères de l'adresse principale. Cette propriété existe pour des raisons de compatibilité ascendante." - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Devise par défaut utilisée pour ce fournisseur" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Nom de l'entreprise" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" -msgstr "" +msgstr "Ruptures de prix" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Une erreur s'est produite lors de l'exportation des données" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "Le plugin d'exportation de données renvoie un format de données incorrect" @@ -4318,119 +4367,119 @@ msgstr "Placé" msgid "Invalid status code" msgstr "Code d'état invalide" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Fichier de données" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "Fichier de données à importer" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Colonnes" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "Type de modèle cible pour cette session d'importation" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "Statut de l'importation" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Champs par défaut" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "Remplacements de champs" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Filtres de terrain" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "Mettre à jour les enregistrements existants" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "Si activé, les enregistrements existants seront mis à jour avec de nouvelles données" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "Certains champs obligatoires n'ont pas été cartographiés" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "ID" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "Identifiant de base de données existant pour l'enregistrement" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "La colonne est déjà associée à un champ de la base de données" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "Le champ est déjà associé à une colonne de données" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "Le mappage des colonnes doit être lié à une session d'importation valide" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "La colonne n'existe pas dans le fichier de données" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "Le champ n'existe pas dans le modèle cible" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "Le champ sélectionné est en lecture seule" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Session d'importation" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Champ d'application" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Colonne" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Index des lignes" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "Données de la ligne d'origine" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Erreurs" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Valide" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "L'ID est requis pour mettre à jour les enregistrements existants." -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Aucun enregistrement trouvé avec l'ID fourni" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Format d'ID invalide" @@ -4530,7 +4579,7 @@ msgstr "Nombre de copies à imprimer pour chaque étiquette" msgid "Connected" msgstr "Connecté" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Inconnu" @@ -4540,7 +4589,7 @@ msgstr "Impression" #: machine/machine_types/label_printer.py:234 msgid "Warning" -msgstr "" +msgstr "Attention" #: machine/machine_types/label_printer.py:235 msgid "No media" @@ -4556,7 +4605,7 @@ msgstr "Déconnecté" #: machine/machine_types/label_printer.py:238 msgid "Error" -msgstr "" +msgstr "Erreur" #: machine/machine_types/label_printer.py:245 msgid "Label Printer" @@ -4628,11 +4677,11 @@ msgstr "Type de configuration" #: machine/serializers.py:24 msgid "Key of the property" -msgstr "" +msgstr "Clé de la propriété" #: machine/serializers.py:27 msgid "Value of the property" -msgstr "" +msgstr "Valeur de la propriété" #: machine/serializers.py:30 users/models.py:238 msgid "Group" @@ -4640,123 +4689,135 @@ msgstr "Groupe" #: machine/serializers.py:30 msgid "Grouping of the property" -msgstr "" +msgstr "Regroupement de la propriété" #: machine/serializers.py:33 msgid "Type" -msgstr "" +msgstr "Type" #: machine/serializers.py:35 msgid "Type of the property" -msgstr "" +msgstr "Type de la propriété" #: machine/serializers.py:40 msgid "Max Progress" -msgstr "" +msgstr "Progression maximale" #: machine/serializers.py:41 msgid "Maximum value for progress type, required if type=progress" -msgstr "" +msgstr "Valeur maximale pour le type de progression, requis si type=progress" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Référence de commande" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "Remarquable" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "A le code du projet" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Créé par" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "Créé avant" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Créé après" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "A la date de début" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "Date de début Avant" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "Date de début Après" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "A une date cible" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "Date cible Avant" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "Date cible Après" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Possède un Tarif" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "Terminé avant" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "Terminé après" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "Ordre de fabrication externe" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Commande" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "Commande Complétée" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Pièces Internes" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Commande En Attente" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Terminé" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "Fait l'objet d'une expédition" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Commande d’achat" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Commande d’achat" msgid "Sales Order" msgstr "Commandes" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Prix Total" msgid "Total price for this order" msgstr "Prix total pour cette commande" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Devise de la commande" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Devise de cette commande (laisser vide pour utiliser la devise par défaut de l'entreprise)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "Cette commande est verrouillée et ne peut être modifiée" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Le contact ne correspond pas à l'entreprise sélectionnée" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "La date de début doit être antérieure à la date cible" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" -msgstr "" +msgstr "L'adresse ne correspond pas à la société sélectionnée" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Description de la commande (facultatif)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Sélectionner le code du projet pour cette commande" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Lien vers une page externe" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "Date de début" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Date de début prévue pour cette commande" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Date Cible" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Date prévue pour la livraison de la commande. La commande sera en retard après cette date." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Date d'émission" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Date d'émission de la commande" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Utilisateur ou groupe responsable de cette commande" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Point de contact pour cette commande" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Adresse de l'entreprise pour cette commande" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Référence de la commande" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "État" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Statut de la commande d'achat" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Société de laquelle les articles sont commandés" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Référence du fournisseur" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Code de référence de la commande fournisseur" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "reçu par" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Date à laquelle la commande a été complété" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Destination" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "Destination des articles reçus" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Le fournisseur de la pièce doit correspondre au fournisseur de la commande" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Le poste ne correspond pas au bon de commande" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Il manque une pièce liée à l'article de la ligne" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "La quantité doit être un nombre positif" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Client" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Société à laquelle les articles sont vendus" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "Statut de la commande client" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Référence client " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Code de référence de la commande du client" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Nom de l’expédition" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "expédié par" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "La commande est déjà terminée" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "La commande est déjà annulée" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Seule une commande ouverte peut être marquée comme complète" -#: order/models.py:1425 +#: order/models.py:1440 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:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "L'ordre ne peut pas être achevé car les allocations sont incomplètes" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "L'ordre ne peut pas être complété car il y a des postes incomplets" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "La commande est verrouillée et ne peut être modifiée" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Nombre d'élement" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Référence du poste" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Notes sur les postes" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Date cible pour ce poste (laisser vide pour utiliser la date cible de la commande)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Description du poste (facultatif)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Contexte supplémentaire pour cette ligne" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Prix unitaire" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "Poste du bon de commande" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "La pièce du fournisseur doit correspondre à celle du fournisseur" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "L'ordre de fabrication doit être marqué externe" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "Les ordres de fabrication ne peuvent être liées qu'à des pièces d'assemblage" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "Les pièces d'ordre de fabrication doivent correspondre la pièce d'objet" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Pièce fournisseur" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Reçu" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Prix d'achat" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Prix d'achat unitaire" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "Ordre de fabrication externe à remplir par cet élément de ligne" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "Ligne supplémentaire du bon de commande" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "Poste de commande client" -#: order/models.py:2093 +#: order/models.py:2111 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:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Prix de vente" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Prix de vente unitaire" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Expédié" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Quantité expédiée" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "Envoi de la commande client" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" -msgstr "" +msgstr "L'adresse d'expédition doit correspondre au client" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" -msgstr "" +msgstr "Adresse de livraison pour cet envoi" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Date d'expédition" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Date de Livraison" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Date de livraison de l'envoi" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Vérifié par" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Utilisateur qui a vérifié cet envoi" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envoi" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Numéro d'expédition" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "N° de suivi" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Information de suivi des colis" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "N° de facture" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Numéro de référence de la facture associée" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "Le colis a déjà été envoyé" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "L'expédition n'a pas d'articles en stock alloués" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" -msgstr "" +msgstr "L'expédition doit être vérifiée avant de pouvoir être terminée" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "Ligne supplémentaire de commande client" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "Affectation des commandes clients" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "L'article de stock n'a pas été assigné" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "Impossible d'allouer l'article en stock à une ligne avec une autre pièce" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "Impossible d'allouer le stock à une ligne sans pièce" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantité d'allocation ne peut pas excéder la quantité en stock" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "La quantité allouée doit être supérieure à zéro" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantité doit être égale à 1 pour un article de stock sérialisé" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "La commande client ne correspond pas à l'expédition" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "L'envoi ne correspond pas à la commande client" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Ligne" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Référence de l'expédition de la commande client" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Article" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Sélectionner l'article de stock à affecter" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Saisir la quantité d'allocation de stock" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Retour Référence de la commande" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Entreprise à l'origine du retour des articles" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Statut du retour de commande" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "Poste de l'ordre de retour" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "L'article en stock doit être spécifié" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "La quantité retournée dépasse la quantité en stock" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "La quantité retournée doit être supérieure à zéro" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "Quantité non valide pour un article de stock sérialisé" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Sélectionner l'article à retourner par le client" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Date de réception" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "La date de réception de cet article en retour" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Résultats" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Résultat pour ce poste" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Coût associé au retour ou à la réparation de ce poste" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "Ordre de retour Ligne supplémentaire" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID de commande" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID de l'ordre à dupliquer" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Copier des lignes" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Copier les postes de l'ordre original" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Copier les lignes supplémentaires" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Copier les postes supplémentaires de l'ordre original" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Copier les paramètres" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Postes de travail" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Lignes achevées" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Duplicata de commande" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Spécifier les options de duplication de cette commande" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "ID de commande invalide" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Nom du fournisseur" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Permettre la clôture d'une commande avec des postes incomplets" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "La commande comporte des postes incomplets" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "La commande n'est pas ouverte" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "Tarification automobile" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calculer automatiquement le prix d'achat sur la base des données de pièces du fournisseur" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Devise du prix d'achat" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Fusionner des éléments" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Fusionner en un seul poste les éléments ayant la même partie, la même destination et la même date cible" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "Unité de gestion des stocks" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Numéro de pièce interne" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "Nom de la pièce interne" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "La pièce du fournisseur doit être spécifiée" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "Le bon de commande doit être spécifié" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "Le fournisseur doit correspondre au bon de commande" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "Le bon de commande doit correspondre au fournisseur" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Poste" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Sélectionner le lieu de destination des envois reçus" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Saisir le code de lot pour les articles de stock entrant" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Date d'expiration" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "Saisir la date d'expiration des articles de stock entrant" -#: order/serializers.py:877 +#: order/serializers.py:835 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:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "Remplacer les informations d'emballage pour les articles en stock entrants" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "Note supplémentaire pour les articles en stock entrant" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Code-barres" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Code-barres scanné" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Le code-barres est déjà utilisé" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Les postes doivent être fournis" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "L'emplacement de la destination doit être spécifié" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Les valeurs de code-barres fournies doivent être uniques" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "Envois" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Envois terminés" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "Lignes allouées" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Devise du prix de vente" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "Postes alloués" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Aucun détail sur l'expédition n'est fourni" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "Le poste n'est pas associé à cette commande" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "La quantité doit être positive" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "L'envoi a déjà été effectué" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "L'envoi n'est pas associé à cette commande" -#: order/serializers.py:1795 +#: order/serializers.py:1760 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:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "Les numéros de série suivants sont indisponibles" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Poste de commande de retour" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "Le poste ne correspond pas à l'ordre de retour" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "Le poste a déjà été reçu" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "Les articles ne peuvent être reçus que pour des commandes en cours" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "Quantité à retourner" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Devise du prix de la ligne" @@ -5532,1174 +5613,1226 @@ msgstr "Remboursement" msgid "Reject" msgstr "Refuser" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Bon de commande en souffrance" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Le bon de commande {po} est maintenant en retard" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Commande en souffrance" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "La commande {so} est maintenant en retard" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Ordre de retour en retard" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "L'ordre de retour {ro} est maintenant en retard" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Étoilé" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Filtrer par catégories étoilées" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Profondeur" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtrer par profondeur de catégorie" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Premier niveau" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtrer par catégories de premier niveau" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Cascade" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Inclure les sous-catégories dans les résultats filtrés" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Parent" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Filtrer par catégorie de parents" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Exclure les sous-catégories de la catégorie spécifiée" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "A des résultats" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Est variante" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Est la révision" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "A des révisions" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "Nomenclature valide" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" -msgstr "" +msgstr "Catégories en cascade" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" -msgstr "" +msgstr "Si vrai, inclure des éléments dans les sous-catégories de la catégorie donnée" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" -msgstr "" +msgstr "Filtrer par ID de catégorie numérique ou par 'null'" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "La pièce d'assemblage est active" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "La pièce d'assemblage est traçable" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "La pièce d'assemblage est testable" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "Le composant est testable" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "Utilise" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Catégorie de composant" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Catégories de composants" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Emplacement par défaut" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Emplacement par défaut des pièces de cette catégorie" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Structurel" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Les pièces ne peuvent pas être directement affectées à une catégorie structurelle, mais peuvent être affectées à des catégories enfantines." -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Mots-clés par défaut" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Mots-clés par défaut pour les pièces de cette catégorie" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Icône" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Icône (facultatif)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "Vous ne pouvez pas rendre cette catégorie de pièces structurelle car certaines pièces lui sont déjà affectées !" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "Catégorie de pièce Modèle de paramètre" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Valeur par Défaut" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Valeur par défaut du paramètre" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Pièces" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "Impossible de supprimer cette partie car elle est verrouillée" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "Impossible de supprimer cette partie car elle est toujours active" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "Impossible de supprimer cette pièce car elle est utilisée dans un assemblage" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "La partie \"{self}\" ne peut pas être utilisée dans la nomenclature de \"{parent}\" (récursif)" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "La partie \"{parent}\" est utilisée dans la nomenclature de \"{self}\" (récursif)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "L'IPN doit correspondre au modèle de regex {pattern}" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "Une partie ne peut pas être une révision d'elle-même" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "Impossible d'effectuer une révision d'une partie qui est déjà une révision" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "Le code de révision doit être spécifié" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "Les révisions ne sont autorisées que pour les pièces d'assemblage" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "Impossible d'effectuer une révision d'un modèle de pièce" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "La partie parentale doit pointer vers le même modèle" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Il existe déjà un article en stock avec ce numéro de série" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dupliqué non autorisé dans les paramètres de la pièce" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "La révision de la pièce existe déjà en double." -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Une pièce avec ce nom, IPN et révision existe déjà." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Les pièces ne peuvent pas être affectées à des catégories de pièces structurelles !" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Nom de l'article" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Est un modèle" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Cette pièce est-elle une pièce modèle ?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Cette pièce est-elle une variante d'une autre pièce ?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Description de la pièce (facultatif)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Mots-clés" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Les mots-clés partiels pour améliorer la visibilité dans les résultats de recherche" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Numéro de révision ou de version de la pièce" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Révision" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Cette partie est-elle une révision d'une autre partie ?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "Révision de" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Où cet article est-il normalement stocké ?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Fournisseur par défaut" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Pièce du fournisseur par défaut" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Expiration par défaut" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Délai d'expiration (en jours) pour les articles en stock de cette pièce" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Stock Minimum" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Niveau de stock minimum autorisé" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Unités de mesure pour cette partie" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Cette pièce peut-elle être fabriquée à partir d'autres pièces ?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "Cette pièce peut-elle être utilisée pour construire d'autres pièces ?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "Cette partie dispose-t-elle d'un suivi pour les articles uniques ?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "Des résultats de tests peuvent-ils être enregistrés pour cette pièce ?" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "Cette pièce peut-elle être achetée auprès de fournisseurs externes ?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "Cette pièce peut-elle être vendue aux clients ?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Est-ce que cette pièce est active ?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "Les parties verrouillées ne peuvent pas être modifiées" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "S'agit-il d'un élément virtuel, tel qu'un logiciel ou une licence ?" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "Nomenclature validée" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "Est-ce que la nomenclature pour cette pièce est correcte ?" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Somme de contrôle de la nomenclature" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Somme de contrôle de la nomenclature enregistrée" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "Nomenclature vérifiée par" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "Date de vérification de la nomenclature" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Création Utilisateur" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Propriétaire responsable de cette pièce" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Ventes multiples" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Devise utilisée pour cacher les calculs de prix" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Coût minimum de la nomenclature" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Coût minimal des composants" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Coût maximal de la nomenclature" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Coût maximal des composants" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Coût d'achat minimum" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Coût d'achat historique minimum" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Coût d'achat maximum" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Coût d'achat historique maximum" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Prix interne minimum" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Coût minimum basé sur des ruptures de prix internes" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Prix interne maximum" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Coût maximum basé sur les écarts de prix internes" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Prix minimum du fournisseur" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Prix minimum des pièces provenant de fournisseurs externes" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Prix maximum du fournisseur" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Prix maximum des pièces provenant de fournisseurs externes" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Coût minimum de la variante" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Calcul du coût minimum des pièces de la variante" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Coût maximal de la variante" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Calcul du coût maximal des pièces de la variante" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Coût minimal" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Remplacer le coût minimum" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Coût maximal" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Dépassement du coût maximal" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Calcul du coût minimum global" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Calcul du coût maximum global" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Prix de vente minimum" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Prix de vente minimum basé sur des ruptures de prix" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Prix de vente maximum" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Prix de vente maximum en fonction des écarts de prix" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Coût minimum de vente" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Prix de vente historique minimum" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Coût de vente maximum" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Prix de vente historique maximum" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Partie pour l'inventaire" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Nombre d'articles" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "Nombre d'entrées individuelles au moment de l'inventaire" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "Stock total disponible au moment de l'inventaire" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Date" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Date de l'inventaire" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Coût minimum du stock" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Coût minimum estimé des stocks disponibles" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Coût maximal du stock" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "Coût maximum estimé des stocks disponibles" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "Vente de pièces détachées Prix cassé" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "Modèle de test partiel" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Le nom du modèle n'est pas valide - il doit comporter au moins un caractère alphanumérique" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Les modèles de test ne peuvent être créés que pour les parties testables" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "Un modèle de test avec la même clé existe déjà pour la partie" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Nom de test" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Entrez un nom pour le test" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "Clé de test" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "Clé simplifiée pour le test" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Description du test" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Saisir la description de ce test" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "Ce test est-il activé ?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Requis" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Ce test est-il obligatoire pour passer l'examen ?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Valeur requise" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "Ce test nécessite-t-il une valeur lors de l'ajout d'un résultat de test ?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Nécessite une pièce jointe" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "Ce test nécessite-t-il un fichier joint lors de l'ajout d'un résultat de test ?" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "Choix valables pour ce test (séparés par des virgules)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "L'article de nomenclature ne peut pas être modifié - l'assemblage est verrouillé" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Le poste de nomenclature ne peut pas être modifié - l'assemblage de la variante est verrouillé" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Sélectionner la partie parentale" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Sous-partie" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Sélectionner la pièce à utiliser dans la nomenclature" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "Quantité de nomenclature pour ce poste de nomenclature" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Ce poste de nomenclature est facultatif" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ce poste de nomenclature est consommable (il n'est pas suivi dans les ordres de fabrication)." -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "Définir la quantité" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "Attrition" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Attrition estimée pour cette fabrication, exprimée en pourcentage (0-100)" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "Arrondi au multiple" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Arrondir la quantité de production requise au multiple le plus proche de cette valeur" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Référence du poste de nomenclature" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Notes sur les postes de nomenclature" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Somme de contrôle" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "Somme de contrôle de la ligne de nomenclature" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Validée" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Ce poste de nomenclature a été validé" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Obtient l'héritage" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Ce poste de nomenclature est hérité des nomenclatures des composants variants" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Les postes de stock pour les composants variants peuvent être utilisés pour ce poste de nomenclature" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La quantité doit être un nombre entier pour les pièces pouvant être suivies" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "La sous-partie doit être spécifiée" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "Remplacement d'un poste de nomenclature" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "La pièce de remplacement ne peut pas être identique à la pièce maîtresse" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Poste de nomenclature parent" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Pièce de rechange" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Première partie" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Partie 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Sélectionner une partie connexe" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "Note pour cette relation" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "Il n'est pas possible de créer une relation entre une pièce et elle-même" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "Une relation en double existe déjà" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Catégorie de parents" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Catégorie de pièce mère" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Sous-catégories" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "Résultats" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Nombre de résultats enregistrés par rapport à ce modèle" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Devise d'achat de l'item" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Le fichier n'est pas une image" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Partie originale" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Sélectionner la partie originale à dupliquer" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Copier l'image" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Copier l'image à partir de la partie originale" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Copier la nomenclature" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Copie de la nomenclature de la pièce originale" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Copier les paramètres" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Copie des données de paramètres de la pièce d'origine" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Notes sur la copie" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Copier les notes de la partie originale" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Test Copie" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Quantité de stock initial" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Indiquer la quantité de stock initiale pour cette pièce. Si la quantité est égale à zéro, aucun stock n'est ajouté." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Emplacement initial du stock" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Spécifier l'emplacement du stock initial pour cette pièce" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Sélectionner le fournisseur (ou laisser en blanc pour passer)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Sélectionner le fabricant (ou laisser en blanc pour ignorer)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Numéro de pièce du fabricant" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "L'entreprise sélectionnée n'est pas un fournisseur valide" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "L'entreprise sélectionnée n'est pas un fabricant valide" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "La pièce du fabricant correspondant à ce MPN existe déjà" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "La pièce du fournisseur correspondant à cette UGS existe déjà" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Nom catégorie" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Construction" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Quantité de cette pièce actuellement en production" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Quantité exceptionnelle de cette pièce sont planifié à la fabrication" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Éléments en stock" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "Révisions" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Fournisseurs" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Stock total" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Stock non attribué" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Variante Stock" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Dupliquer une pièce" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Copier les données initiales d'une autre partie" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Stock initial" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Créer une pièce avec une quantité de stock initiale" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Informations sur le fournisseur" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Ajouter les informations initiales du fournisseur pour cette pièce" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Copier les paramètres de la catégorie" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Copier les modèles de paramètres de la catégorie de pièces sélectionnée" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Image existante" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Nom de fichier d'une image de pièce existante" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Le fichier image n'existe pas" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Valider l'ensemble de la nomenclature" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Peut construire" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Nécessaire pour fabrication" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Alloué à la fabrication" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Nécessaire pour les commandes" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Alloué aux commandes" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Prix Minimum" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Remplacer la valeur calculée pour le prix minimum" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Prix minimum monnaie" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Prix Maximum" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Remplacer la valeur calculée pour le prix maximum" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Devise du prix maximum" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Mise à jour" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Mise à jour des prix pour cette pièce" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Impossible de convertir les devises fournies en {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Le prix minimum ne doit pas être supérieur au prix maximum" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Le prix maximum ne doit pas être inférieur au prix minimum" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Sélectionner l'assemblage parent" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Sélectionner le composant" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Sélectionner la pièce à partir de laquelle copier la nomenclature" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Supprimer les données existantes" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Supprimer les postes de nomenclature existants avant de les copier" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Inclure l'héritage" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Inclure les éléments de nomenclature hérités des pièces modélisées" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Sauter les lignes non valides" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Activez cette option pour ignorer les lignes non valides" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Copier les pièces de remplacement" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copie de pièces de rechange en cas de duplication de postes de nomenclature" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Notification de stock faible" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Le stock disponible pour {part.name}, est tombé en dessous du niveau minimum configuré" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Pas de date d'expieatio" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Expire aujourd’hui" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} jours" @@ -6732,108 +6865,108 @@ msgstr "Aucune action spécifiée" msgid "No matching action found" msgstr "Aucune action correspondante trouvée" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Aucune correspondance trouvée pour les données du code-barres" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Correspondance trouvée pour les données du code-barres" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "Le modèle n'est pas pris en charge" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "L'instance de modèle n'a pas été trouvée" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Le code-barres correspond à l'article existant" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "Aucune donnée correspondante n'a été trouvée" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "Aucune pièce de fournisseur correspondante n'a été trouvée" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "Plusieurs pièces de fournisseurs correspondantes trouvées" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "Aucun plugin correspondant n'a été trouvé pour les données de code-barres" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Pièce du fournisseur assortie" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "L'article a déjà été reçu" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "Pas de correspondance de plugin pour le code-barres du fournisseur" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "Plusieurs postes correspondants trouvés" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "Aucun poste correspondant n'a été trouvé" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "Aucun ordre de vente n'a été fourni" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "Le code-barres ne correspond pas à un article de stock existant" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "Le poste de stock ne correspond pas au poste individuel" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Stock disponible insuffisant" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "Article de stock attribué à la commande client" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Pas assez d'informations" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "Trouvé l'article correspondant" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "La pièce du fournisseur ne correspond pas au poste" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "Le poste est déjà clôturé" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "Informations complémentaires requises pour l'obtention d'un poste budgétaire" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Poste de commande reçu" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "Échec de la réception d'un poste" @@ -6972,7 +7105,7 @@ msgstr "Prise en charge native des codes-barres" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "Niveaux" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "Quantité totale" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "Données sur les stocks" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "Inclure les données relatives au stock de pièces" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "Données de tarification" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "Inclure les données relatives au prix des pièces" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "Données du fournisseur" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "Inclure les données du fournisseur" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "Données du fabricant" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "Inclure les données du fabricant" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "Données sur les suppléants" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "Inclure les données des pièces de rechange" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "Données de paramètres" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "Inclure les données des paramètres de la pièce" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "Exportateur de nomenclatures à plusieurs niveaux" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "Prise en charge de l'exportation de nomenclatures multiniveaux" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "Niveau de la nomenclature" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "Substituer {n}" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "Fournisseur {n}" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "Fournisseur {n} UGS" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "Fournisseur {n} MPN" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "Fabricant {n}" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "Fabricant {n} MPN" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "URL du webhook entrant de Slack" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "Imprimante d'étiquettes InvenTree" msgid "Provides support for printing using a machine" msgstr "Fournit un support pour l'impression à l'aide d'une machine" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "dernière utilisation" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "Paramètres" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Clé du plugin" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "Non du Plugin" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "Plugin Package" msgid "Plugin" msgstr "Extension" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Aucun auteur trouvé" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Le plugin '{p}' n'est pas compatible avec la version actuelle d'InvenTree {v}" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Le plugin nécessite au moins la version {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Le plugin nécessite au maximum la version {v}" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "Installation non confirmée" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "Le nom de l'emballage ou l'URL doivent être fournis" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8072,7 +8205,7 @@ msgstr "Total" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Numéro de série" @@ -8097,7 +8230,7 @@ msgstr "Rapport de test des articles en stock" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Éléments installés" @@ -8130,495 +8263,519 @@ msgstr "Pas de résultat (obligatoire)" msgid "No result" msgstr "Pas de résultat" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Le fichier d'actifs n'existe pas" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "Fichier image non trouvé" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "la balise part_image nécessite une instance de Part" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "la balise company_image nécessite une instance d'entreprise" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Filtrer par profondeur de localisation" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Filtrer par lieux de premier niveau" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Inclure les sous-emplacements dans les résultats filtrés" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "Emplacement parent" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtrer par emplacement parent" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Nom de la pièce (insensible à la casse)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Le nom de la pièce contient (insensible à la casse)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Nom de la pièce (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Partie IPN (insensible à la casse)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "La partie IPN contient (insensible à la casse)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Partie IPN (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Stock minimum" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Stock maximum" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Code de statut" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Emplacement externe" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Consommé par l'ordre de construction" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Installé dans un autre article en stock" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Arbre en pièces détachées" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Mise à jour avant" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Mise à jour après" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Inventaire avant" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Inventaire après" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Date d'expiration avant" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Date d’expiration après" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Périmé" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "La quantité est requise" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "La partie valide doit être fournie" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Le fournisseur donné n'existe pas" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "La pièce du fournisseur a une taille d'emballage définie, mais le drapeau use_pack_size n'est pas activé" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Les numéros de série ne peuvent pas être fournis pour une pièce non traçable" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "Type d'emplacement du stock" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "Types d'emplacements de stock" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "Icône par défaut pour tous les lieux qui n'ont pas d'icône (facultatif)" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Emplacement du stock" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Emplacement des stocks" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Propriétaire" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Sélectionner un propriétaire" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Les articles en stock ne peuvent pas être directement placés dans un emplacement de stock structurel, mais peuvent être placés dans des emplacements subordonnés." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Externe" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Il s'agit d'un emplacement de stock externe" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Type d'emplacement" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "Type d'emplacement du stock de cet emplacement" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Vous ne pouvez pas rendre ce magasin structurel car certains articles de stock y sont déjà localisés !" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "La pièce doit être spécifiée" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Les articles en stock ne peuvent pas être localisés dans des emplacements de stock structurel !" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "Il n'est pas possible de créer un article de stock pour les pièces virtuelles" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Le type de pièce ('{self.supplier_part.part}') doit être {self.part}" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "La quantité doit être de 1 pour un article avec un numéro de série" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Le numéro de série ne peut pas être défini si la quantité est supérieure à 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "L'objet ne peut pas s'appartenir à lui-même" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "L'élément doit avoir une référence de construction si is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "La référence de construction ne pointe pas vers le même objet de pièce" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Poste de stock parent" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Pièce de base" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Sélectionnez une pièce fournisseur correspondante pour cet article en stock" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Où se trouve cet article en stock ?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "L'emballage de cet article en stock est stocké dans" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Installé dans" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "L'article a été installé dans un autre article ?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Numéro de série pour cet article" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Code de lot pour cet article de stock" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Quantité en stock" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Source Construire" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Construire pour cet article en stock" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Consommé par" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Ordre de construction qui a consommé cet article de stock" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Bon de commande source" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Commande d'achat pour cet article en stock" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Destination de la commande client" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Date d'expiration de l'article en stock. Le stock sera considéré comme périmé après cette date" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Supprimer lors de l'épuisement" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Supprimer ce poste de stock lorsque le stock est épuisé" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Prix d'achat de l'unité unique au moment de l'achat" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Converti en partie" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "La pièce n'est pas définie comme pouvant faire l'objet d'un suivi" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "La quantité doit être un nombre entier" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "La quantité ne doit pas dépasser la quantité disponible en stock ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Les numéros de série doivent être fournis sous forme de liste" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "La quantité ne correspond pas au nombre de numéros de série" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Le modèle de test n'existe pas" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Un article de stock a été affecté à une commande client" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "L'article de stock est installé dans un autre article" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "L'article de stock contient d'autres articles" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Un article de stock a été affecté à un client" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "L'article de stock est actuellement en production" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Le stock sérialisé ne peut pas être fusionné" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Articles de stock en double" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Les articles en stock doivent se référer à la même pièce" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Les articles en stock doivent se référer à la même pièce du fournisseur" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Les codes d'état des stocks doivent correspondre" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "StockItem ne peut pas être déplacé car il n'est pas en stock" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Suivi des articles en stock" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Notes d'entrée" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Résultat du test de l'article en stock" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Une valeur doit être fournie pour ce test" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "La pièce jointe doit être téléchargée pour ce test" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Valeur non valide pour ce test" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Résultat du test" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Valeur de sortie du test" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Pièce jointe au résultat du test" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Notes de test" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "Station de test" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "L'identifiant de la station de test où le test a été effectué" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "Commencé" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Horodatage du début du test" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "Fini" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Horodatage de la fin du test" @@ -8662,246 +8819,246 @@ msgstr "Sélectionner la pièce pour laquelle un numéro de série doit être g msgid "Quantity of serial numbers to generate" msgstr "Nombre de numéros de série à générer" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "Modèle de test pour ce résultat" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "L'ID du modèle ou le nom du test doit être fourni" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "L'heure de fin du test ne peut être antérieure à l'heure de début du test" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Article Parent" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "Article de stock parent" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Utiliser la taille de l'emballage lors de l'ajout : la quantité définie est le nombre d'emballages" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Entrez les numéros de série pour les nouveaux articles" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Référence du fournisseur" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Expiré" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Éléments enfants" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "Suivi des éléments" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "Prix d'achat de cet article en stock, par unité ou par paquet" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Entrez le nombre d'articles en stock à sérialiser" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "La quantité ne doit pas dépasser la quantité disponible en stock ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Emplacement du stock de destination" -#: stock/serializers.py:731 +#: stock/serializers.py:737 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:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Les numéros de série existent déjà" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Sélectionner l'article de stock à installer" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "Quantité à installer" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "Saisir la quantité d'articles à installer" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Ajouter une note de transaction (facultatif)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "La quantité à installer doit être d'au moins 1" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "L'article en stock n'est pas disponible" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "La pièce sélectionnée ne figure pas dans la nomenclature" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "La quantité à installer ne doit pas dépasser la quantité disponible" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Emplacement de destination de l'élément désinstallé" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "Sélectionner la pièce à convertir en article de stock" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "La partie sélectionnée n'est pas une option valide pour la conversion" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Impossible de convertir un article de stock auquel un SupplierPart a été attribué" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "Code d'état de l'article en stock" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "Sélectionner les articles en stock pour modifier leur statut" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "Aucun article en stock n'a été sélectionné" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Sous-localisations" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "Emplacement du stock mère" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "La pièce doit être vendable" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "L'article est affecté à une commande client" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "L'article est attribué à un ordre de fabrication" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Affectation d'articles en stock par le client" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "L'entreprise sélectionnée n'est pas un client" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Notes d'affectation des stocks" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "Une liste des articles en stock doit être fournie" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Notes sur les fusions d'actions" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Autoriser les fournisseurs non concordants" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permettre la fusion d'articles en stock avec des pièces de fournisseurs différents" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Autoriser la non-concordance des statuts" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "Permettre la fusion d'articles en stock ayant des codes de statut différents" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Au moins deux articles en stock doivent être fournis" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Pas de changement" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Valeur de la clé primaire StockItem" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "L'article n'est plus en stock" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Notes sur les transactions boursières" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "Numéro de série suivant" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "Numéro de série précédent" @@ -9383,83 +9540,83 @@ msgstr "Ventes" msgid "Return Orders" msgstr "Commandes de retour" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Nom d'utilisateur" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Prénom" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Prénom de l'utilisateur" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Nom" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Nom de famille de l'utilisateur" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Adresse e-mail de l'utilisateur" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Staff" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Cet utilisateur a-t-il les permissions du staff" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Super-utilisateur" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Cet utilisateur est-il un super-utilisateur" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Ce compte d'utilisateur est-il actif" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "Seul un superutilisateur peut modifier ce champ" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "Mot de passe" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "Mot de passe pour l'utilisateur" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "Écraser l'alerte sur les règles de mot de passe" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "Vous n'avez pas le droit de créer des utilisateurs" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Votre compte a été créé." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Veuillez utiliser la fonction de réinitialisation du mot de passe pour vous connecter" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Bienvenue dans InvenTree" diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po index 7d0b5591e5..81077a0de9 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "למשתמש אין הרשאה לצפות במוזל הזה" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "אימייל (שנית)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "אישור כתובת אימייל" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "חובה לרשום את אותו אימייל בכל פעם." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "" @@ -112,13 +104,13 @@ msgstr "הזן תאריך סיום" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "" @@ -131,75 +123,75 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "מספרים סידוריים לא נמצאו" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +199,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "אימייל" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "הפניה חייבת להתאים לדפוס הנדרש" msgid "Reference number is too large" msgstr "מספר האסמכתה גדול מדי" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "בחירה שגויה" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "שם" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "תיאור" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "תיאור (לא חובה)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "נתיב" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "שמות כפולים אינם יכולים להתקיים תחת אותו אב" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "הערות סימון (אופציונלי)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "נתוני ברקוד" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "נתוני ברקוד של צד שלישי" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "ברקוד Hash" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Hash ייחודי של נתוני ברקוד" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "נמצא ברקוד קיים" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "שגיאת שרת" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "נרשמה שגיאה על ידי השרת." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "המספר חייב להיות תקין" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "מטבע" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "בחר מטבע מהאפשרויות הזמינות" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "סינית (פשוטה)" msgid "Chinese (Traditional)" msgstr "סינית (מסורתית)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "קוד מטבע לא מאושר" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "מקור הבנייה" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "רכיב" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "" msgid "Reference" msgstr "מקט" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "בחר רכיב לבנייה" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "כמות בניה" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "קישור חיצוני" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "כמות" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "מספרים סידוריים" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "מבוטל" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "הושלם" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "משתמש" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "קישור" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "קובץ מצורף" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "קובץ חסר" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "חסר קישור חיצוני" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "בחר קובץ לצירוף" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "הערה" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "שם קובץ" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "מוקם" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "נשלח" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "לא פורטה הפעולה" msgid "No matching action found" msgstr "פעולה מבוקשת לא נמצאה" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "שם משתמש" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "שם פרטי" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po index 46f633e680..27059e8f92 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "" -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "" @@ -112,13 +104,13 @@ msgstr "तारीख दर्ज करें" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "" @@ -131,75 +123,75 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "कनेक्शन त्रुटि" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +199,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "ई-मेल" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po index a43a916c80..4498b463bd 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API funkciót nem találom" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Tömeges művelethez tételek vagy szűrők megadása kötelező" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "A tételeket listában kell átadni" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Érvénytelen a tétel lista" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "A szűrőket dict - szótár - formában kell megadni" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Érvénytelen szűrők vannak megadva" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Minden szűrő csak true értékkel használható" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Nincs a szűrésnek megfelelő tétel" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Nincs adat megadva" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "Ennek a mezőnek egyedinek kell lennie." -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Nincs jogosultságod az adatok megtekintéséhez" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Email (újra)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Email cím megerősítés" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Mindig ugyanazt az email címet kell beírni." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "A megadott elsődleges email cím nem valós." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "A megadott email domain nincs jóváhagyva." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "{original} átváltása {unit}-ra sikertelen" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Nem megfelelő mennyiség" @@ -112,13 +104,13 @@ msgstr "Dátum megadása" msgid "Invalid decimal value" msgstr "Érvénytelen decimális érték" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Megjegyzések" @@ -131,75 +123,75 @@ msgstr "A(z) '{name}' érték nem a szükséges minta szerinti" msgid "Provided value does not match required pattern: " msgstr "A megadott érték nem felel meg a szükséges mintának: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Nem lehet 1000 tételnél többet szerializálni" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Üres sorozatszám" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplikált sorozatszám" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Érvénytelen csoport: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, 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:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nem található sorozatszám" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "A megadott számú egyedi sorozatszám ({n}) meg kell egyezzen a darabszámmal ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "HTML tag-ek eltávolítása ebből az értékből" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Az adatban tiltott markdown tartalom található" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Csatlakozási hiba" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "A kiszolgáló érvénytelen státuszkóddal válaszolt" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Kivétel történt" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "A kiszolgáló érvénytelen Content-Length értéket adott" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "A kép mérete túl nagy" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "A kép letöltés meghaladja a maximális méretet" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "A kiszolgáló üres választ adott" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "A megadott URL nem egy érvényes kép fájl" @@ -207,11 +199,11 @@ msgstr "A megadott URL nem egy érvényes kép fájl" msgid "Log in to the app" msgstr "Bejelentkezés az appba" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Mielőtt továbbmenne kötelező a kétfaktoros authentikációt engedélyeznie." @@ -255,135 +247,126 @@ msgstr "Az azonosítónak egyeznie kell a mintával" msgid "Reference number is too large" msgstr "Azonosító szám túl nagy" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Érvénytelen választás" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Név" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Leírás" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Leírás (opcionális)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Elérési út" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikált nevek nem lehetnek ugyanazon szülő alatt" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Markdown megjegyzések (opcionális)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Vonalkód adat" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Harmadik féltől származó vonalkód adat" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Vonalkód hash" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Egyedi vonalkód hash" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Létező vonalkód" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Feladat hiba" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Az '{f}' háttérfeladat elbukott {n} próbálkozás után" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Kiszolgálóhiba" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "A kiszolgáló egy hibaüzenetet rögzített." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Kép" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Érvényes számnak kell lennie" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Pénznem" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Válassz pénznemet a lehetőségek közül" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "Ez a mező nem lehet null." -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Érvénytelen érték" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Távoli kép" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "A távoli kép URL-je" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Képek letöltése távoli URL-ről nem engedélyezett" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Nem sikerült letölteni a képet a távoli URL-ről" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" -msgstr "" +msgstr "Érvénytelen tartalomtípus-formátum" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" -msgstr "" +msgstr "Tartalomtípus nem található" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "A tartalomtípus nem egyezik a szükséges mixin osztállyal" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -537,11 +520,11 @@ msgstr "Kínai (egyszerűsített)" msgid "Chinese (Traditional)" msgstr "Kínai (Hagyományos)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "Frissítés elérhető" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "InvenTree frissítés elérhető" @@ -553,30 +536,30 @@ msgstr "Érvénytelen fizikai mértékegység" msgid "Not a valid currency code" msgstr "Érvénytelen pénznem kód" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Rendelés állapota" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Szülő gyártás" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Változatokkal együtt" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Változatokkal együtt" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Változatokkal együtt" msgid "Part" msgstr "Alkatrész" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategória" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Szülő Gyártás" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Hozzám rendelt" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Hozzárendelve" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Ez előtt létrehozva" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Létrehozva ez után" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Van kezdeti dátuma" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Kezdeti dátum ez előtt" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Kezdeti dátum ez után" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Van céldátum" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Céldátum ez előtt" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Céldátum ez után" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Elkészült ez előtt" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Elkészült ez után" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "Ettől a dátumtól" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "Eddig a dátumig" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Fa kihagyása" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "A gyártást be kell fejezni a törlés előtt" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Fogyóeszköz" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Opcionális" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Gyártmány" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Követett" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Ellenőrizhető" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Befejezetlen rendelés" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Lefoglalva" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Felhasználva" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Elérhető" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Rendelve" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "Gyártás nem található" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Gyártási utasítás" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Hely" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Kimenet" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Szűrés a kimeneti készlet tétel azonosítójára. Használj 'null'-t ha a be nem épített gyártási tételeket keresed." -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Gyártási utasítások" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Az alkatrészjegyzék még nincs jóváhagyva" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Nem lehet inaktív alkatrészre Gyártást kezdeményezni" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Nem lehet lezáratlan alkatrészre Gyártást kezdeményezni" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Gyártási rendeléseket kizárólag beszerezhető alkatrészekkel lehet külső forrásból teljesíteni" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Meg kell adni felelős felhasználót vagy csoportot" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Gyártási rendelés alkatrész nem változtatható" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Céldátumnak a kezdeti dátum után kell lennie" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Gyártási utasítás azonosító" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Gyártási utasítás azonosító" msgid "Reference" msgstr "Azonosító" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Gyártás rövid leírása (opcionális)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Gyártás, amihez ez a gyártás hozzá van rendelve" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "Gyártási megrendelés, amelyhez ez a gyártás hozzá van rendelve" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Válassz alkatrészt a gyártáshoz" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Vevői rendelés azonosító" -#: build/models.py:285 -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:297 +msgid "Sales Order to which this build is allocated" +msgstr "Vevői rendelés, amelyhez ez a gyártás tartozik" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Forrás hely" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Válassz helyet ahonnan készletet vegyünk el ehhez a gyártáshoz (hagyd üresen ha bárhonnan)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "Külső gyártás" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Ez a gyártási rendelés külsőleg teljesül" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Cél hely" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Válassz helyet ahol a kész tételek tárolva lesznek" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Gyártási mennyiség" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Gyártandó készlet tételek száma" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Kész tételek" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Elkészült készlet tételek száma" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Gyártási állapot" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Gyártás státusz kód" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Batch kód" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Batch kód a gyártás kimenetéhez" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Létrehozás dátuma" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "Gyártás kezdeti dátuma" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Gyártási rendelés ütemezett kezdeti dátuma" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Befejezés cél dátuma" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Cél dátum a gyártás befejezéséhez. Ez után késettnek számít majd." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Befejezés dátuma" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "elkészítette" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Indította" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Felhasználó aki ezt a gyártási utasítást kiállította" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Felelős" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Felhasználó vagy csoport aki felelős ezért a gyártásért" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Külső link" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link külső URL-re" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Priorítás" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Gyártási utasítás priorítása" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Projektszám" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Projekt kód a gyártáshoz" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "A gyártási rendelés nem befejezhető amíg nyitott al-gyártások vannak" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "A gyártási rendelés nem befejezhető amíg hiányos a kimenet" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "A gyártási foglalások teljesítése háttérfeladat elvégzése nem sikerült" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "A {build} gyártási utasítás elkészült" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Gyártási utasítás elkészült" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Egyedi követésre jelölt alkatrészeknél kötelező sorozatszámot megadni" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nincs gyártási kimenet megadva" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Gyártási kimenet már kész" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Gyártási kimenet nem egyezik a gyártási utasítással" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "A mennyiség nem lehet több mint a gyártási mennyiség" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "A gyártási kimenet nem felelt meg az összes kötelező teszten" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "A {serial} gyártási kimenet nem felelt meg az összes kötelező teszten" -#: build/models.py:1230 -msgid "Cannot partially complete a build output with allocated items" -msgstr "" +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "A lefoglalt készletelemek még gyártás alatt vannak" -#: build/models.py:1628 +#: build/models.py:1211 +msgid "Cannot partially complete a build output with allocated items" +msgstr "Nem lehet részben befejezni egy építési kimenetet lefoglalt tételekkel" + +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Gyártási Rendelés Sor Tétel" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Gyártás objektum" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,434 +1016,446 @@ msgstr "Gyártás objektum" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Mennyiség" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Gyártáshoz szükséges mennyiség" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Felhasznált készlet mennyisége" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Gyártási tételnek meg kell adnia a gyártási kimenetet, mivel a fő darab egyedi követésre kötelezett" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "A lefoglalt mennyiségnek nullánál nagyobbnak kell lennie" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Egyedi követésre kötelezett tételeknél a menyiség 1 kell legyen" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "A lefoglalt mennyiség ({q}) nem lépheti túl a szabad készletet ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Készlet túlfoglalva" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie" - -#: build/models.py:1816 -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:1876 -msgid "Selected stock item does not match BOM line" -msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "Lefoglalt mennyiség meghaladja az elérhető készletet" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Készlet tétel" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Forrás készlet tétel" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Készlet mennyiség amit foglaljunk a gyártáshoz" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Beépítés ebbe" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Cél készlet tétel" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Gyártási Szint" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Alkatrész neve" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Projekt kód címke" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Gyártás kimenet" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Gyártási kimenet nem egyezik a szülő gyártással" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Kimeneti alkatrész nem egyezik a gyártási utasításban lévő alkatrésszel" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Ez a gyártási kimenet már elkészült" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Ez a gyártási kimenet nincs teljesen lefoglalva" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Add meg a mennyiséget a gyártás kimenetéhez" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Egész számú mennyiség szükséges az egyedi követésre kötelezett alkatrészeknél" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Egész számú mennyiség szükséges, mivel az alkatrészjegyzék egyedi követésre kötelezett alkatrészeket tartalmaz" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Sorozatszámok" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Add meg a sorozatszámokat a gyártás kimenetéhez" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Legyártott készlet helye" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Sorozatszámok automatikus hozzárendelése" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Szükséges tételek automatikus hozzárendelése a megfelelő sorozatszámokkal" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "A következő sorozatszámok már léteznek vagy nem megfelelőek" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "A gyártási kimenetek listáját meg kell adni" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Selejtezet gyártási kimenetek helye" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Foglalások törlése" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Selejtezett kimenetek foglalásainak felszabadítása" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Selejtezés oka" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "A kész gyártási kimenetek helye" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Hiányos foglalás elfogadása" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Kimenetek befejezése akkor is ha a készlet nem\n" "lett teljesen lefoglalva" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Lefoglalt készlet felhasználása" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Az összes ehhez a gyártáshoz lefoglalt készlet felhasználása" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Befejezetlen kimenetek törlése" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "A nem befejezett gyártási kimenetek törlése" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Nem engedélyezett" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Gyártásban fel lett használva" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Foglalás felszabadítása a készre jelentés előtt" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Túlfoglalt készlet" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Hogyan kezeljük az gyártáshoz rendelt egyéb készletet" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Pár készlet tétel túl lett foglalva" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Kiosztatlanok elfogadása" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Fogadd el hogy a készlet tételek nincsenek teljesen lefoglalva ehhez a gyártási utastáshoz" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "A szükséges készlet nem lett teljesen lefoglalva" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Befejezetlenek elfogadása" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Fogadd el hogy a szükséges számú gyártási kimenet nem lett elérve" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Szükséges gyártási mennyiség nem lett elérve" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "A Gyártásnak nyitott leszármazott Gyártása van" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "A Gyártásnak folyamatban kell lennie" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "A gyártási utasítás befejezetlen kimeneteket tartalmaz" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Gyártás sor" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Gyártás kimenet" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "A gyártási kimenetnek ugyanarra a gyártásra kell mutatnia" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Gyártás sor tétel" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part ugyanarra az alkatrészre kell mutasson mint a gyártási utasítás" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "A tételnek kell legyen készlete" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Rendelkezésre álló mennyiség ({q}) túllépve" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Gyártási kimenetet meg kell adni a követésre kötelezett alkatrészek lefoglalásához" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Gyártási kimenetet nem lehet megadni a követésre kötelezett alkatrészek lefoglalásához" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "A lefoglalandó tételeket meg kell adni" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Készlet hely ahonnan az alkatrészek származnak (hagyd üresen ha bárhonnan)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Hely kizárása" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Készlet tételek kizárása erről a kiválasztott helyről" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Felcserélhető készlet" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "A különböző helyeken lévő készlet egyenrangúan felhasználható" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Készlet helyettesítés" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Helyettesítő alkatrészek foglalásának engedélyezése" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Opcionális tételek" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Opcionális tételek lefoglalása a gyártáshoz" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Nem sikerült az automatikus lefoglalás feladatot elindítani" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "Összes elem" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "Nem követett tételek" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "Követett tételek" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "Tétel típusa" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "Válasszon tétel típust az automatikus foglaláshoz" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Alkatrészjegyzék Hivatkozás" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "Alkatrészjegyzék Cikk Azonosító" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Alkatrészjegyzék Alkatrész Név" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "Beépítés helye" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Gyártás" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Beszállítói alkatrész" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Lefoglalt mennyiség" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Gyártási Hivatkozás" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Alkatrész kategória Neve" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Követésre kötelezett" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Örökölt" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Változatok" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Gyártásban" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Gyártás Ütemezve" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Külső raktárkészlet" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Elérhető készlet" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Elérhető Helyettesítő Készlet" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Elérhető Készlet Változatokból" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "Felhasznált mennyiség meghaladja a lefoglalt mennyiséget" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Megjegyzés a készletfelhasználáshoz" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "Gyártási tételnek a megfelelő gyártási rendelésre kell mutatnia" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Dupla gyártási tétel lefoglalás" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "Gyártási sornak a megfelelő gyártási rendelésre kell mutatnia" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Duplikált gyártási sor foglalás" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Legalább egy tétel vagy sor megadása kötelező" @@ -1475,67 +1479,71 @@ msgstr "Felfüggesztve" msgid "Cancelled" msgstr "Törölve" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Kész" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "A gyártási utasításhoz készlet szükséges" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "A {build} gyártási rendelésnek további készletre van szüksége" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Késésben lévő gyártás" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "A {bo} gyártás most már késésben van" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "Ez egy hivatkozás" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "Ez egy állomány" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "A felhasználó nem jogosult ezen mellékletek törlésére" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "A felhasználó nem jogosult ezen melléklet törlésére" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Érvénytelen valuta kód" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Létező valuta kód" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Hiányzó érvényes valuta kód" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Nincsen plugin" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Projekt kód címke" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Frissítve" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Legutóbbi frissítés időpontja" @@ -1547,778 +1555,778 @@ msgstr "Frissítette" msgid "User who last updated this object" msgstr "Az objektumot utoljára módosította" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Egyedi projektszám" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Projekt leírása" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "A projektért felelős felhasználó vagy csoport" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Beállítási kulcs" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Beállítás értéke" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "A kiválasztott érték nem egy érvényes lehetőség" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Az érték bináris kell legyen" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Az érték egész szám kell legyen" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "Az értéknek számnak kell lennie" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "Az érték nem felel meg az ellenőrzéseknek" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Kulcs string egyedi kell legyen" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Felhasználó" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Ársáv mennyiség" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Ár" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Egységár egy meghatározott mennyiség esetén" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Végpont" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Végpont ahol ez a webhook érkezik" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Webhook neve" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktív" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Aktív-e ez a webhook" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Token a hozzáféréshez" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Titok" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Megosztott titok a HMAC-hoz" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "Üzenet azonosító" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Egyedi azonosító ehhez az üzenethez" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Kiszolgáló" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Kiszolgáló ahonnan ez az üzenet érkezett" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Fejléc" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Üzenet fejléce" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Törzs" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Üzenet törzse" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Végpont amin ez az üzenet érkezett" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Dolgozott rajta" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Befejeződött a munka ezzel az üzenettel?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "Azonosító" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Cím" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Közzétéve" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Szerző" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Összefoglaló" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Elolvasva" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Elolvasva?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Képfájl" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "A képhez tartozó model típus" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "A képhez tartozó model azonosító" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Egyedi mértékegység" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "A mértékegység szimbólumának egyedinek kell lennie" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "A mértékegységnek valós azonosítónak kell lennie" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Egység neve" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Szimbólum" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Opcionális mértékegység szimbólum" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definíció" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Mértékegység definíció" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Melléklet" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Hiányzó fájl" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Hiányzó külső link" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Modell típusa" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "Képhez tartozó model típus" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Válaszd ki a mellekelni kívánt fájlt" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Megjegyzés" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Melléklet megjegyzés" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Feltöltés dátuma" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "A fájl feltöltésének dátuma" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Fájl mérete" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Fájlméret bájtban" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "A melléklet model típusa érvénytelen" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "Egyedi Állapot" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "Egyedi Állapotok" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "Hivatkozott Állapot Készlet" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "Az az Állapot készlet, melyet ez az egyedi állapot kibővít" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logikai kulcs" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "Az állapot logikai kulcsa amely megegyezik az üzleti logika egyedi állapotával" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Érték" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "A model adatbázisba tárolandó szám" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Az állapot neve" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Címke" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "A felületen megjelenített címke" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Szín" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "A felöleten megjelenő szín" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Model" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "A Model amihez ez az állapot tartozik" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "Modelt választani kötelező" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "Kulcsot választani kötelező" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "Logikai kulcsot választani kötelező" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "A kulcs és a logikai kulcs nem lehet azonos" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "Helyes hivatkozási állapot osztályt kell megadni" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "A kulcsnak eltérőnek kell lennie a hivatkozott állapotok logikai kulcsaitól" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "A logikai kulcsnak szerepelnie kell a hivatkozott állapotok logikai kulcsai közt" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "A Névnek el kell térnie a referencia állapotok neveitől" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Választéklista" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Választéklisták" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Választéklista neve" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Választéklista leírása" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Lezárt" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "Választéklista lezárva?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "Választéklista használható?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Forrás plugin" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Választéklista szolgáltató plugin" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Forrás szöveg" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Elhagyható lista forrás azonosító szöveg" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Alapértelmezett bejegyzés" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Alapértelmezett elem ezen a listán" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Létrehozva" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Választéklista létrehozási dátuma és ideje" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Utoljára módosítva" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "A választéklista utolsó módosításának dátuma és ideje" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Választéklista bejegyzés" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Választéklista bejegyzések" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Választéklista amihez ez a bejegyzés tartozik" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Választéklista bejegyzés értéke" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Választéklista bejegyzés felirata" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Választéklista bejegyzés leírása" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "Választéklista bejegyzés aktív?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Paraméter sablon" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" -msgstr "" +msgstr "Paraméter Sablonok" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "Jelölőnégyzet paraméternek nem lehet mértékegysége" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "Jelölőnégyzet paraméternek nem lehetnek választási lehetőségei" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "A lehetőségek egyediek kell legyenek" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "A paraméter sablon nevének egyedinek kell lennie" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" -msgstr "" +msgstr "Célmodell típusa ehhez a paramétersablonhoz" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Paraméter neve" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Mértékegység" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Paraméter mértékegysége" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Paraméter leírása" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Jelölőnégyzet" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Ez a paraméter egy jelölőnégyzet?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Lehetőségek" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Választható lehetőségek (vesszővel elválasztva)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "A paraméter választéklistája" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Engedélyezve" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "Ez a paramétersablon engedélyezett?" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" -msgstr "" +msgstr "Paraméter" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" -msgstr "" +msgstr "Paraméterek" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Hibás választás a paraméterre" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "Érvénytelen modelltípus megadva a paraméterhez" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" -msgstr "" +msgstr "Modell ID" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "A célmodell azonosítója ehhez a paraméterhez" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Sablon" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" -msgstr "" +msgstr "Paraméter sablon" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Adat" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Paraméter értéke" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Megjegyzés" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Opcionális megjegyzés mező" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Vonalkód beolvasás" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Vonalkód adat" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Melyik felhasználó olvasta be a vonalkódot" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Időbélyeg" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Vonalkód beolvasás dátuma és ideje" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "Vonalkód feldolgozó URL végpont" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Kontextus" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Vonalkód olvasás kontextus adat" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Válasz" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Vonalkód olvasó válasz adat" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Eredmény" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "Vonalkód olvasás sikeres volt?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "Hiba történt" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Email napló törlés védett. Állítsd be az INVENTREE_PROTECT_EMAIL_LOG-ot False-ra hogy engedélyezd a törlést." -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "E-mail üzenet" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "E-mail üzenetek" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "Bejelentve" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "Elküldve" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "Megbukott" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "Kiszállítva" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "Megerősítve" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "Bejövő" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "Kimenő" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "Nincs válasz" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "Kiszállítás követése" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "Olvasási visszaigazolás" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "Kattintások nyomkövetése" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "Globális ID" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "Üzenet azonosítója (külső rendszertől származhat)" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "Szál ID" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Üzenet-sor azonosító (külső rendszerből származhat)" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "Szál" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "Ehhez az üzenethez kapcsolódó üzenet-lánc" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" -msgstr "" +msgstr "Prioritás" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "Email szál" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "Email szálak" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Kulcs" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "Az üzenetlánc egyedi azonosítója (az üzenetlánc azonosítására szolgál)" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "Üzenetlánc egyedi azonosítója" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "Belső kezdés" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "Ez az üzenetlánc belül indult?" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "Az üzenetlánc kezdeti dátuma és ideje" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "Az üzenetlánc utolsó módosításának dátuma és ideje" @@ -2340,7 +2348,7 @@ msgstr "{verbose_name} megszakítva" msgid "A order that is assigned to you was canceled" msgstr "Egy hozzád rendelt megrendelés megszakítva" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Készlet érkezett" @@ -2352,93 +2360,101 @@ msgstr "Készlet érkezett egy beszerzési megrendeléshez" msgid "Items have been received against a return order" msgstr "Készlet érkezett vissza egy visszavétel miatt" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "Jelzi, hogy a beállítás módosítása megerősítést igényel-e" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "Ez a beállítás módosítás előtt megerősítést igényel. Kérjük, erősítse meg a változtatást." + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "Ez a beállítás felül van bírálva egy környezeti változó által" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "Felülbírálás" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Folyamatban" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Folyamatban lévő feladatok" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Ütemezett Feladatok" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Hibás feladatok" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "Feladat ID" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Egyedi feladat ID" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Zárol" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Zárolási idő" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Feladat neve" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Funkció" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Funkció neve" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Paraméterek" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Feladat paraméterei" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Kulcsszó paraméterek" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Feladat kulcsszó paraméterek" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Fájlnév" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Modell típusa" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "A felhasználónak nincs joga létrehozni vagy módosítani ehhez a modelhez tartozó mellékleteket" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" -msgstr "" +msgstr "A felhasználónak nincs jogosultsága paraméterek létrehozására vagy szerkesztésére ehhez a modellhez" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Választéklista lezárva" @@ -2446,1131 +2462,1160 @@ msgstr "Választéklista lezárva" msgid "No group" msgstr "Nincs csoport" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "A site URL blokkolva van a konfigurációban" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Újraindítás szükséges" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Egy olyan beállítás megváltozott ami a kiszolgáló újraindítását igényli" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Függőben levő migrációk" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Függőben levő adatbázis migrációk" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "Aktív figyelmeztető kódok" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "Aktív figyelmeztető kódok dict-je" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "Példány azonosító" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "Az InvenTree példány egyedi azonosítója" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "Bejelentési ID" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Azonosítsa-e magát az szerver a példányazonosítóval a szerver állapotban (authentikáció nélkül)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Kiszolgáló példány neve" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "String leíró a kiszolgáló példányhoz" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Példány név használata" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Példány név használata a címsorban" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Verzió infók megjelenítésének tiltása" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Verzió infók megjelenítése csak admin felhasználóknak" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Cég neve" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Belső cégnév" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "Kiindulási URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "Kiindulási URL a kiszolgáló példányhoz" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Alapértelmezett pénznem" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Válassz alap pénznemet az ár számításokhoz" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Támogatott valuták" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Támogatott valuták listája" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Árfolyam frissítési gyakoriság" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Milyen gyakran frissítse az árfolyamokat (nulla a kikapcsoláshoz)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "nap" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Árfolyam frissítő plugin" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Kiválasztott árfolyam frissítő plugin" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Letöltés URL-ről" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Képek és fájlok letöltésének engedélyezése külső URL-ről" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Letöltési méret korlát" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Maximum megengedett letöltési mérete a távoli képeknek" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "Felhasznált User-agent az URL-ről letöltéshez" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "A külső URL-ről letöltéshez használt user-agent felülbírálásának engedélyezése (hagyd üresen az alapértelmezéshez)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Erős URL validáció" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Sablon specifikáció igénylése az URL validálásnál" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Frissítés keresés gyakorisága" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Milyen gyakran ellenőrizze van-e új frissítés (0=soha)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Automatikus biztonsági mentés" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Adatbázis és média fájlok automatikus biztonsági mentése" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Automata biztonsági mentés gyakorisága" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Hány naponta készüljön automatikus biztonsági mentés" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Feladat törlési gyakoriság" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Háttérfolyamat eredmények törlése megadott nap eltelte után" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Hibanapló törlési gyakoriság" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Hibanapló bejegyzések törlése megadott nap eltelte után" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Értesítés törlési gyakoriság" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Felhasználói értesítések törlése megadott nap eltelte után" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "Email törlési gyakoriság" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "Email üzenetek törlése megadott nap eltelte után" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "Email napló védett" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "Megakadályozza az email napló bejegyzések törlését" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Vonalkód támogatás" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Vonalkód olvasó támogatás engedélyezése a web felületen" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "Vonalkód olvasás eredmények tárolása" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "Vonalkód olvasási eredmények tárolása az adatbázisban" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "Maximálisan tárolt vonalkód olvasások mennyisége" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "Maximálisan tárolt vonalkód olvasások száma" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Vonalkód beadási késleltetés" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Vonalkód beadáskor a feldolgozás késleltetési ideje" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Webkamerás vonalkód olvasás" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Webkamerás kódolvasás engedélyezése a böngészőből" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "Vonalkód Adat Megjelenítése" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Vonalkód adat megjelenítése a böngészőben szövegként" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Vonalkód Generáló Plugin" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Belső vonalkód generálásra használatos plugin" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Alkatrész változatok" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Alkatrész változat vagy verziószám tulajdonság használata" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "Csak Összeállítás Verzió" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "Csak összeállított alkatrészeknek lehessen verziója" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Lehessen törölni az Összeállításból" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Lehessen olyan alkatrészt törölni ami Összeállításban szerepel" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "IPN reguláris kifejezés" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguláris kifejezés ami illeszkedik az alkatrész IPN-re" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Többször is előforduló IPN engedélyezése" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Azonos IPN használható legyen több alkatrészre is" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "IPN szerkesztésének engedélyezése" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "IPN megváltoztatásánsak engedélyezése az alkatrész szerkesztése közben" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Alkatrészjegyzék adatok másolása" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Alkatrész másoláskor az alkatrészjegyzék adatokat is másoljuk alapból" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Alkatrész paraméterek másolása" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Alkatrész másoláskor a paramétereket is másoljuk alapból" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Alkatrész teszt adatok másolása" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Alkatrész másoláskor a tesztek adatait is másoljuk alapból" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Kategória paraméter sablonok másolása" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Kategória paraméter sablonok másolása alkatrész létrehozásakor" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Alkatrészek alapból sablon alkatrészek legyenek" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Alkatrészeket alapból lehessen gyártani másik alkatrészekből" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Összetevő" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Alkatrészek alapból használhatók összetevőként más alkatrészekhez" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Beszerezhető" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Alkatrészek alapból beszerezhetők legyenek" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Értékesíthető" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Alkatrészek alapból eladhatók legyenek" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Alkatrészek alapból követésre kötelezettek legyenek" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtuális" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Alkatrészek alapból virtuálisak legyenek" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Kapcsolódó alkatrészek megjelenítése" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Alkatrész kapcsolódó alkatrészeinek megjelenítése" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Kezdeti készlet adatok" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Kezdeti készlet létrehozása új alkatrész felvételekor" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Kezdeti beszállítói adatok" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Kezdeti beszállítói adatok létrehozása új alkatrész felvételekor" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Alkatrész név megjelenítés formátuma" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Formátum az alkatrész név megjelenítéséhez" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Alkatrész kategória alapértelmezett ikon" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Alkatrész kategória alapértelmezett ikon (üres ha nincs)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek min. száma" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Tizedejegyek minimális száma az árak megjelenítésekor" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek max. száma" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Tizedejegyek maximális száma az árak megjelenítésekor" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Beszállítói árazás használata" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Beszállítói ársávok megjelenítése az általános árkalkulációkban" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Beszerzési előzmények felülbírálása" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Beszerzési árelőzmények felülírják a beszállítói ársávokat" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Készlet tétel ár használata" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "A kézzel bevitt készlet tétel árak használata az árszámításokhoz" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Készlet tétel ár kora" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Az ennyi napnál régebbi készlet tételek kizárása az árszámításból" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Alkatrészváltozat árak használata" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Alkatrészváltozat árak megjelenítése az általános árkalkulációkban" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Csak az aktív változatokat" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Csak az aktív alkatrészváltozatok használata az árazásban" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "Árazás automatikus frissítése" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "Alkatrész árazás automatikus frissítése belső adat változáskor" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Árazás újraszámítás gyakoriság" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Árak automatikus frissítése ennyi nap után" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Belső árak" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Alkatrészekhez belső ár engedélyezése" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Belső ár felülbírálása" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Ha elérhetőek az árkalkulációkban a belső árak lesznek alapul véve" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "Nulla mennyiség engedélyezése az anyagjegyzékben" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Címke nyomtatás engedélyezése" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Címke nyomtatás engedélyezése a web felületről" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "Címke kép DPI" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Képek felbontása amik átadásra kerülnek címkenyomtató pluginoknak" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Riportok engedélyezése" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Riportok előállításának engedélyezése" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Debug mód" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Riportok előállítása HTML formátumban (hibakereséshez)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Jelentési hibák naplózása" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Jelentések generálása közben jelentkező hibák naplózása" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Lapméret" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Alapértelmezett lapméret a PDF riportokhoz" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Csak választható mértékegységek" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "A megadott mértékegység csak a beállított lehetőségekből legyen elfogadva" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Globálisan egyedi sorozatszámok" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "A sorozatszámoknak egyedinek kell lennie a teljes készletre vonatkozóan" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Kimerült készlet törlése" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Alapértelmezett művelet mikor a készlet tétel elfogy" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Batch kód sablon" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Sablon a készlet tételekhez alapértelmezett batch kódok előállításához" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Készlet lejárata" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Készlet lejárat kezelésének engedélyezése" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Lejárt készlet értékesítése" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Lejárt készlet értékesítésének engedélyezése" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Álló készlet ideje" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Napok száma amennyivel a lejárat előtt a készlet tételeket állottnak vesszük" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Lejárt készlet gyártása" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Gyártás engedélyezése lejárt készletből" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Készlet tulajdonosok kezelése" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Tulajdonosok kezelésének engedélyezése a készlet helyekre és tételekre" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Hely alapértelmezett ikon" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Hely alapértelmezett ikon (üres ha nincs)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Beépített készlet megjelenítése" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Beépített készlet tételek megjelenítése a készlet táblákban" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Tételek telepítésekor a darabjegyzék ellenőrzése" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "A beépített tételeknek a szülő elem darabjegyzékében szerepelniük kell" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Lehet Hiányzó Készletet Mozgatni" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Lehet-e olyan készleteket mozgatni készlethelyek között amik nincsenek raktáron" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Gyártási utasítás azonosító minta" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Szükséges minta a gyártási utasítás azonosító mező előállításához" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Felelős tulajdonos szükséges" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Minden rendeléshez felelőst kell rendelni" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "Szükséges Aktív Alkatrész" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "Inaktív alkatrészekre nem lehet Gyártási Rendelést létrehozni" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Elvárás a Lezárt Alkatrész" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "Megakadályozza, hogy nem lezárt alkatrészekre gyártási rendelést lehessen indítani" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "Jóváhagyott Alkatrészjegyzék Kötelező" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "Megakadályozza gyártási rendelés készítését ha nincsen az Alkatrészjegyzék jóváhagyva" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "Leszármazott Gyártásoknak Lezártnak Kell Lennie" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "Amíg minden leszármazott gyártás le nincsen zárva nem lehet a szülő gyártást lezárni" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "Külső Gyártási Rendelések" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "Engedélyezze a külső gyártási rendelés funkciót" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Blokkolás a tesztek sikeres végrehajtásáig" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Nem lehet gyártási tételt befejezni amíg valamennyi kötelező teszt sikeres nem lett" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Visszavétel engedélyezése" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Visszavételek engedélyezése a felületen" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Visszavétel azonosító minta" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Szükséges minta a visszavétel azonosító mező előállításához" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Befejezett visszavétel szerkesztése" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Visszavétel szerkesztésének engedélyezése befejezés után" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Vevői rendelés azonosító minta" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Szükséges minta a vevői rendelés azonosító mező előállításához" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Vevői rendeléshez alapértelmezett szállítmány" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Szállítmány automatikus létrehozása az új vevő rendelésekhez" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Befejezett vevői rendelés szerkesztése" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Vevői rendelések szerkesztésének engedélyezése szállítás vagy befejezés után" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" -msgstr "" +msgstr "Szállítmány Ellenőrzést Igényel" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" -msgstr "" +msgstr "Megakadályozza a szállítmányok befejezését, amíg a tételeket nem ellenőrizték" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Leszállított Rendelések Készre jelölése" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Leszállítottnak jelölt Értékesítési rendelések automatikusan Kész-re lesznek állítva, a \"Leszállított\" állapot átugrásával" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Beszerzési rendelés azonosító minta" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Szükséges minta a beszerzési rendelés azonosító mező előállításához" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Befejezett beszerzési rendelés szerkesztése" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Beszérzési rendelések szerkesztésének engedélyezése kiküldés vagy befejezés után" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "Jelenlegi pénznem" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "Tétel érték bázis-pénznemre váltása készlet beérkezéskor" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Beszerzési rendelések automatikus befejezése" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "A beszerzési rendelés automatikus befejezése ha minden sortétel beérkezett" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Elfelejtett jelszó engedélyezése" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Elfelejtett jelszó funkció engedélyezése a bejentkező oldalon" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Regisztráció engedélyezése" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Felhaszálók önkéntes regisztrációjának engedélyezése a bejelentkező oldalon" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "SSO engedélyezése" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "SSO engedélyezése a bejelentkező oldalon" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "SSO regisztráció engedélyezése" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Felhaszálók önkéntes regisztrációjának engedélyezése SSO-n keresztül a bejelentkező oldalon" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "SSO csoport szinkronizálás engedélyezése" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Az InvenTree csoportok szinkronizálása a hitelesítésszolgáltatóhoz" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "SSO csoport kulcs" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "A csoportkérés tulajdonság neve amit a hitelesítésszolgáltató nyújt" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "SSO csoport hozzárendelés" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Az SSO csoportok hozzárendelése az InvenTree csoportokhoz. Ha a helyi csoport nem létezik, létre lesz hozva." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "Az SSO-n kívüli csoportok eltávolítása" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Ha egy felhasználóhoz rendelt csoport nem létezik az azonosításszolgáltatóban azt eltávolítsuk el. Ennek a kikapcsolása biztonsági problémákhoz vezethet" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Email szükséges" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Kötelező email megadás regisztrációkor" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "SSO felhasználók automatikus kitöltése" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Felhasználó adatainak automatikus kitöltése az SSO fiókadatokból" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Email kétszer" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Regisztráláskor kétszer kérdezze a felhasználó email címét" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Jelszó kétszer" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Regisztráláskor kétszer kérdezze a felhasználó jelszavát" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Engedélyezett domainek" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Feliratkozás korlátozása megadott domain-ekre (vesszővel elválasztva, @-al kezdve)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Csoport regisztráláskor" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Ehhez a csoporthoz lesznek az új felhasználók rendelve. Ha az SSO csoport szinkronizálás engedélyezve van, akkor ez a csoport csak akkor lesz hozzárendelve a felhasználóhoz ha az azonosítás szolgáltató semmilyen csoportot nem rendelt hozzá." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Többfaktoros hitelesítés kényszerítése" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "A felhasználóknak többfaktoros hitelesítést kell használniuk." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Pluginok ellenőrzése indításkor" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Ellenőrizze induláskor hogy minden plugin telepítve van - engedélyezd konténer környezetben (docker)" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Plugin frissítések ellenőrzése" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Frissítések periódikus ellenőrzésének engedélyezése a telepített pluginokra" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "URL integráció engedélyezése" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "URL útvonalalak hozzáadásának engedélyezése a pluginok számára" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Navigációs integráció engedélyezése" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Navigációs integráció engedélyezése a pluginok számára" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "App integráció engedélyezése" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "App hozzáadásának engedélyezése a pluginok számára" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Ütemezés integráció engedélyezése" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Háttérben futó feladatok hozzáadásának engedélyezése a pluginok számára" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Esemény integráció engedélyezése" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Belső eseményekre reagálás engedélyezése a pluginok számára" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Interfész integráció engedélyezése" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Pluginok felhasználói felületbe épülésének engedélyezése" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "Email integráció engedélyezése" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Pluginok bejövő/kimenő levelekhez hozzáférésének engedélyezése" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "Projektszámok engedélyezése" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "Projectek nyomkövetéséhez projekt kódok engedélyezése" -#: common/setting/system.py:1083 -msgid "Enable Stock History" -msgstr "Készlettörténet engedélyezése" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" +msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "A készletek korábbi mennyiségének és értékének naplózásának engedélyezés" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Külső helyek nélkül" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" -msgstr "A külső helyszínen tárolt készletek kihagyása a készlet történet számításokból" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Automatikus leltár időpontja" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" -msgstr "Az automatikus készletállapot rögzítések közötti napok száma" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" +msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "Régi készlettörténet bejegyzések törlése" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "Adott napnál régebbi készlettörténet bejegyzések törlése" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "Készlettörténet törlési gyakoriság" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "Készlettörténet bejegyzések ennyi napo után törlődnek" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "Felhasználók teljes nevének megjelenítése" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "Felhasználói név helyett a felhasználók teljes neve jelenik meg" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "Felhasználói profilok megjelenítése" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" -msgstr "Felhasználói profilok megjelenítése a profil oldalukon" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" +msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "Teszt állomás adatok engedélyezése" - -#: common/setting/system.py:1136 -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" +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 -msgid "Enable periodic ping task of registered machines to check their status" +msgid "Stocktake entries will be deleted after specified number of days" msgstr "" +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "Készlettörténet törlési gyakoriság" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "Felhasználók teljes nevének megjelenítése" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Felhasználói név helyett a felhasználók teljes neve jelenik meg" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "Felhasználói profilok megjelenítése" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "Felhasználói profilok megjelenítése a profil oldalukon" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "Teszt állomás adatok engedélyezése" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "Tesztállomás adatok gyűjtésének teszt eredménybe gyűjtésének engedélyezése" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "Gép Ping Engedélyezése" + +#: common/setting/system.py:1187 +msgid "Enable periodic ping task of registered machines to check their status" +msgstr "Időszakos ping feladat engedélyezése a regisztrált gépekhez az állapotuk ellenőrzésére" + #: common/setting/user.py:23 msgid "Inline label display" msgstr "Beágyazott címke megjelenítés" @@ -3597,11 +3642,11 @@ msgstr "PDF riport megjelenítése a böngészőben letöltés helyett" #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "Vonalkód olvasó az Űrlap mezők között" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "Vonalkód olvasó adatbevitel engedélyezése az űrlapokon" #: common/setting/user.py:51 msgid "Search Parts" @@ -3869,7 +3914,7 @@ msgstr "Az utoljára használt nyomtató tárolása a felhasználóhoz" #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "Minden modell" #: common/validators.py:63 msgid "No attachment model type provided" @@ -3912,366 +3957,370 @@ msgstr "Az alkatrész aktív" msgid "Manufacturer is Active" msgstr "A Gyártó Aktív" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "A Szállítói Alkatrész Aktív" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "A saját alkatrész Aktív" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "A Beszállító Aktív" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Gyártó" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Cég" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "Van készleten" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Cégek" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Cég leírása" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "A cég leírása" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Weboldal" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "Cég weboldala" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Telefonszám" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Kapcsolattartó telefonszáma" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Kapcsolattartó email címe" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Névjegy" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Kapcsolattartó" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link a külső céginformációhoz" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "Ez a vállalat aktív?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "Vevő" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Értékesítesz alkatrészeket ennek a cégnek?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "Beszállító" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Vásárolsz alkatrészeket ettől a cégtől?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Gyártó" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Gyárt ez a cég alkatrészeket?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Cég által használt alapértelmezett pénznem" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "Adószám" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "Céges adószám" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Cím" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Címek" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Cég kiválasztása" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Cím megnevezése" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Címhez tartozó leírás, megnevezés" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Elsődleges cím" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Beállítás elsődleges címként" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "1. sor" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Cím első sora" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "2. sor" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Cím második sora" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Irányítószám" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Város/Régió" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Irányítószám város/régió" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Állam/Megye" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Állam vagy megye" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Ország" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Cím országa" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Megjegyzés a futárnak" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Futárnak szóló megjegyzések" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Belső szállítási megjegyzések" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Szállítási megjegyzések belső használatra" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Link a címinformációkhoz (külső)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Gyártói alkatrész" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Kiindulási alkatrész" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Válassz alkatrészt" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Gyártó kiválasztása" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN (Gyártói cikkszám)" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Gyártói cikkszám" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL link a gyártói alkatrészhez" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Gyártói alkatrész leírása" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "A csomagolási egységnek kompatibilisnek kell lennie az alkatrész mértékegységgel" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Csomagolási mennyiségnek nullánál többnek kell lennie" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Kapcsolódó gyártói alkatrésznek ugyanarra a kiindulási alkatrészre kell hivatkoznia" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Beszállító" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Beszállító kiválasztása" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Beszállítói cikkszám" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Ez a szállítói termék aktív?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "Elsődleges" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Gyártói alkatrész kiválasztása" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL link a beszállítói alkatrészhez" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Beszállítói alkatrész leírása" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "alap költség" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimális díj (pl. tárolási díj)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Csomagolás" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Alkatrész csomagolás" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Csomagolási mennyiség" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Egy csomagban kiszállítható mennyiség, hagyd üresen az egyedi tételeknél." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "többszörös" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Többszörös rendelés" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Beszállítónál elérhető mennyiség" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Elérhetőség frissítve" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Utolsó elérhetőségi adat frissítés" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Beszállítói Ár Kedvezmény" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "Visszaadja az elsődleges cím szöveges változatát. Ez visszamenőleges kompatibilitás miatt kell." - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Beszállító által használt alapértelmezett pénznem" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Cégnév" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "Készleten" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" -msgstr "" +msgstr "Árkategóriák" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Hiba történt adatexportálás közben" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "Az adatexportáló plugin téves adatformátumot adott vissza" @@ -4319,119 +4368,119 @@ msgstr "Kiküldve" msgid "Invalid status code" msgstr "Érvénytelen állapotkód" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Adat fájl" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "Importálandó adatfájl" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Oszlopok" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "Cél model típus ehhez az import munkához" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "Betöltés állapota" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Mező Alapértelmezett Érték" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "Mező Felülbírálás" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Mező Szűrők" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "Frissítse a létező rekordokat" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "Ha engedélyezett a meglévő rekordok frissítve lesznek az új adatokkal" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "Néhány kötelező mező nem került hozzárendelésre" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "ID" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "Létező adatbázis azonosító a rekordhoz" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "Oszlop már adatbázis mezőhöz lett rendelve" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "Adatbázis mező már adatfájl oszlophoz lett rendelve" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "Az oszlop összerendelésnek egy helyes importálási művelethez kell kapcsolódnia" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "Az Oszlop nem létezik ebben a fájlban" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "A mező nem létezik a cél adatszerkezetben" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "Kijelölt mező csak olvasható" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Importálási művelet" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Mező" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Oszlop" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Sor száma" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "Eredeti sor adat" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Hibák" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Érvényes" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "ID-ra van szükség meglévő rekord frissítéshez." -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Nem található rekord a megadott ID-vel" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Érvénytelen az ID formátuma" @@ -4531,7 +4580,7 @@ msgstr "Címkénkénti nyomtatandó mennyiség" msgid "Connected" msgstr "Csatlakoztatba" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Ismeretlen" @@ -4541,7 +4590,7 @@ msgstr "Nyomtatás" #: machine/machine_types/label_printer.py:234 msgid "Warning" -msgstr "" +msgstr "Figyelmeztetés" #: machine/machine_types/label_printer.py:235 msgid "No media" @@ -4557,7 +4606,7 @@ msgstr "Nincs kapcsolat" #: machine/machine_types/label_printer.py:238 msgid "Error" -msgstr "" +msgstr "Hiba" #: machine/machine_types/label_printer.py:245 msgid "Label Printer" @@ -4629,11 +4678,11 @@ msgstr "Konfiguráció típusa" #: machine/serializers.py:24 msgid "Key of the property" -msgstr "" +msgstr "A tulajdonság kulcsa" #: machine/serializers.py:27 msgid "Value of the property" -msgstr "" +msgstr "A tulajdonság értéke" #: machine/serializers.py:30 users/models.py:238 msgid "Group" @@ -4641,123 +4690,135 @@ msgstr "Csoport" #: machine/serializers.py:30 msgid "Grouping of the property" -msgstr "" +msgstr "A tulajdonság csoportosítása" #: machine/serializers.py:33 msgid "Type" -msgstr "" +msgstr "Típus" #: machine/serializers.py:35 msgid "Type of the property" -msgstr "" +msgstr "A tulajdonság típusa" #: machine/serializers.py:40 msgid "Max Progress" -msgstr "" +msgstr "Maximális Előrehaladás" #: machine/serializers.py:41 msgid "Maximum value for progress type, required if type=progress" -msgstr "" +msgstr "Maximális érték az előrehaladás típushoz, kötelező ha típus=előrehaladás" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Rendelés azonosítója" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "Kintlévő" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "Van projektszáma" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Készítette" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "Ez előtt létrehozva" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Létrehozva ez után" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "Van kezdeti dátum" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "Kezdeti dátum ez előtt" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "Kezdeti dátum ez után" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "Van céldátum" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "Céldátum ez előtt" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "Céldátum ez után" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Van árazás" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "Ez előtt befejezve" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "Befejezve ez után" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "Külső Gyártási Rendelés" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Rendelés" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "A rendelés teljesítve" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Belső alkatrész" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "A rendelés függőben" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Kész" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "Van kiszállítás" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Beszerzési rendelés" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4765,8 +4826,8 @@ msgstr "Beszerzési rendelés" msgid "Sales Order" msgstr "Vevői rendelés" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4782,722 +4843,742 @@ msgstr "Teljes ár" msgid "Total price for this order" msgstr "A rendelés teljes ára" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Rendelés pénzneme" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Megrendeléshez használt pénznem (hagyd üresen a cégnél alapértelmezetthez)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "Egy a rendelés le van zárva és nem lehet módosítani" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "A kapcsolattartó nem egyezik a kiválasztott céggel" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "A kezdeti dátumnak meg kell előznie a céldátumot" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" -msgstr "" +msgstr "A cím nem egyezik a kiválasztott vállalattal" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Rendelés leírása (opcionális)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Válassz projektszámot ehhez a rendeléshez" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Link külső weboldalra" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "Kezdés dátuma" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "A tervezett kezdeti dátum ehhez a gyártáshoz" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Cél dátum" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Várt teljesítési dátuma a megrendelésnek. Ezután már késésben lévőnek számít majd." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Kiállítás dátuma" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Kiállítás dátuma" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "Frissítve" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Felhasználó vagy csoport aki felelőse ennek a rendelésnek" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Kapcsolattartó ehhez a rendeléshez" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Cég címei ehhez a rendeléshez" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Rendelés azonosító" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Állapot" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Beszerzési rendelés állapota" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Cég akitől a tételek beszerzésre kerülnek" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Beszállítói azonosító" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Beszállítói rendelés azonosító kód" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "érkeztette" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Rendelés teljesítési dátuma" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Cél" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "Beérkezett tételek tárolója" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Az alkatrész beszállítója meg kell egyezzen a beszerzési rendelés beszállítójával" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Sortétel nem egyezik a beszerzési megrendeléssel" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Sortételen hiányzik a kapcsolódó alkatrész" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Mennyiség pozitív kell legyen" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Vevő" -#: order/models.py:1325 +#: order/models.py:1340 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:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "Értékesítési rendelés állapot" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Vevői azonosító " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Megrendelés azonosító kódja a vevőnél" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Kiszállítás dátuma" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "szállította" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "Rendelés már teljesítve" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "Rendelés már visszavonva" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Csak nyitott rendelés jelölhető késznek" -#: order/models.py:1425 +#: order/models.py:1440 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:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "A rendelést nem lehet befejezni mert hiányos foglalások vannak" -#: order/models.py:1439 +#: order/models.py:1454 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:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "A rendelés le van zárva és nem lehet módosítani" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Tétel mennyiség" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Sortétel azonosító" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Sortétel megjegyzései" -#: order/models.py:1797 +#: order/models.py:1812 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:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Sortétel leírása (opcionális)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "További kontextus ehhez a sorhoz" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Egységár" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "Vevői Rendelés Sortétel" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "Beszállítói alkatrésznek egyeznie kell a beszállítóval" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "Gyártási rendelést külsőnek kell jelölni" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "Gyártási rendeléseket csak összeszerelhető alkatrészekhez lehet kapcsolni" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "Gyártási rendelés alkatrészének meg kell egyeznie a sortétel alkatrésszel" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Beszállítói alkatrész" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Beérkezett" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Érkezett tételek száma" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Beszerzési ár" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Beszerzési egységár" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "Külső gyártási rendelés amit ez a sortétel teljesít" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "Vevői Rendelés Extra Sor" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "Vevői Rendelés Sortétel" -#: order/models.py:2093 +#: order/models.py:2111 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:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Eladási ár" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Eladási egységár" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Kiszállítva" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Szállított mennyiség" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "Vevői Rendelés Szállítása" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" -msgstr "" +msgstr "A szállítási címnek egyeznie kell az ügyféllel" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" -msgstr "" +msgstr "Szállítási cím ehhez a szállítmányhoz" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Szállítás dátuma" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Szállítási dátum" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Kézbesítés dátuma" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Ellenőrizte" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Felhasználó aki ellenőrizte ezt a szállítmányt" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Szállítmány" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Szállítmány száma" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Nyomkövetési szám" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Szállítmány nyomkövetési információ" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Számlaszám" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Hozzátartozó számla referencia száma" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "Szállítmány már elküldve" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "Szállítmány nem tartalmaz foglalt készlet tételeket" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" -msgstr "" +msgstr "A szállítmányt ellenőrizni kell, mielőtt befejezhetné" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "Vevői Rendelés Extra Sor" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "Vevői rendeléshez foglalások" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "Készlet tétel nincs hozzárendelve" -#: order/models.py:2528 +#: order/models.py:2537 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:2531 +#: order/models.py:2540 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:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "A lefoglalandó mennyiség nem haladhatja meg a készlet mennyiségét" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie" + +#: order/models.py:2562 order/serializers.py:1560 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:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "Vevői rendelés nem egyezik a szállítmánnyal" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Szállítmány nem egyezik a vevői rendeléssel" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Sor" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Vevői rendelés szállítmány azonosító" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Tétel" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Válaszd ki a foglalásra szánt készlet tételt" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Készlet foglalási mennyiség megadása" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Visszavétel azonosító" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Cég akitől a tételek visszavételre kerülnek" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Visszavétel állapota" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "Visszavétel sortétel" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "Készlettételt meg kell adni" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "Visszavétel mennyisége meghaladja a készletet" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "Visszavétel mennyisége nullánál nagyobb kell, hogy legyen" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "Érvénytelen mennyiség szerializált készlettételnél" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Válaszd ki a vevőtől visszavenni kívánt tételt" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Visszavétel dátuma" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "Mikor lett visszavéve a tétel" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Kimenetel" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Sortétel végső kimenetele" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Sortétel visszaküldésének vagy javításának költsége" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "Visszavétel extra tétel" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "Rendelés azonosító" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "A duplikálandó megrendelés száma" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Sorok másolása" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Sortételek másolása az eredeti rendelésről" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Extra sorok másolása" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Az eredeti rendelés extra tételeinek másolása" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Paraméterek másolása" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Sortételek" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Kész sorok" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Rendelés duplikálása" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Rendelés másolás beállításai" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Érvénytelen rendelés ID" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Beszállító neve" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "A rendelést nem lehet törölni" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 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:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "A rendelésben teljesítetlen sortételek vannak" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "A rendelés nem nyitott" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "Automata árazás" -#: order/serializers.py:705 +#: order/serializers.py:651 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:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Beszérzési ár pénzneme" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Elemek összevonása" -#: order/serializers.py:731 +#: order/serializers.py:689 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:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "SKU (leltári azonosító)" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Belső cikkszám" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "Belső cikkszám" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "Beszállítói alkatrészt meg kell adni" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "Beszerzési rendelést meg kell adni" -#: order/serializers.py:787 +#: order/serializers.py:745 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:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "A beszerzési rendelésnek egyeznie kell a beszállítóval" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Sortétel" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Válassz cél helyet a beérkezett tételeknek" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Írd be a batch kódját a beérkezett tételeknek" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Lejárati dátum" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "Írd be a beérkező készlet tételek lejárati dátumát" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Írd be a sorozatszámokat a beérkezett tételekhez" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "Bejövő készlettételek csomagolási információjának felülbírálata" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "Kiegészítő megjegyzés beérkező készlettételekhez" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Vonalkód" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Beolvasott vonalkód" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Ez a vonalkód már használva van" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Sortételt meg kell adni" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "A cél helyet kötelező megadni" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Megadott vonalkódoknak egyedieknek kel lenniük" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "Szállítások" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Kész szállítmányok" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Eladási ár pénzneme" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "Foglalt tételek" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Nincsenek szállítmány részletek megadva" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "Sortétel nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "Mennyiség pozitív kell legyen" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Írd be a sorozatszámokat a kiosztáshoz" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "Szállítmány kiszállítva" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "Szállítmány nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "Nincs találat a következő sorozatszámokra" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "Az alábbi sorozatszámok nem elérhetők" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Visszavétel sortétel" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "Sortétel nem egyezik a visszavétellel" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "A sortétel már beérkezett" -#: order/serializers.py:2076 +#: order/serializers.py:2040 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:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "Visszaküldési mennyiség" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Sortétel pénzneme" @@ -5533,1174 +5614,1226 @@ msgstr "Visszatérítés" msgid "Reject" msgstr "Elutasított" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Késésben lévő beszerzés" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "A {po} beszerzési rendelés most már késésben van" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Késésben lévő vevői rendelés" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "A {so} vevői rendelés most már késésben van" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Lejárt visszvételi utasítás" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "A {ro} Visszavételi utasítás már lejárt" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Csillagozott" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Csillagozottra szűrés" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Mélység" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Kategória mélységre szűrés" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Felső szint" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Csúcs készlethelyre szűrés" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Lépcsőzetes" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Szűrt eredmények tartalmazzák az alkategóriákat" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Szülő" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Szülő kategóriára szűrés" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Az adott kategória alkategóriáinak kihagyása" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Van találat" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Változat-e" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Változat" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Vannak Változatok" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "Alkatrészjegyzék ellenőrizve" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" -msgstr "" +msgstr "Kaszkád Kategóriák" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" -msgstr "" +msgstr "Ha igaz, tartalmazza az adott kategória alkategóriáiban lévő tételeket" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" +msgstr "Szűrés numerikus kategória azonosító vagy a 'null' literál szerint" + +#: part/api.py:1280 +msgid "Assembly part is active" msgstr "" -#: part/api.py:1258 +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Összeállított Alkatrész ellenőrizhető" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "Összetevő alkatrész ellenőrizhető" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "Használ" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Alkatrész kategória" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Alkatrész kategóriák" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Alapértelmezett hely" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Ebben a kategóriában lévő alkatrészek helye alapban" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Szerkezeti" -#: part/models.py:120 +#: part/models.py:119 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:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Alapértelmezett kulcsszavak" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Ebben a kategóriában évő alkatrészek kulcsszavai alapban" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Ikon" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (opcionális)" -#: part/models.py:182 +#: part/models.py:181 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:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "Alkatrészcsoport Paraméter Sablon" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Alapértelmezett érték" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Alapértelmezett paraméter érték" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Alkatrészek" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" -msgstr "" +msgstr "Nem lehet törölni egy zárolt alkatrész paramétereit" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" -msgstr "" +msgstr "Nem lehet módosítani egy zárolt alkatrész paramétereit" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "Lezárt alkatrész nem törölhető" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "Aktív alkatrész nem törölhető" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "Összeállításban felhasznált alkatrész nem törölhető" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, 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:723 +#: part/models.py:701 #, 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:790 +#: part/models.py:768 #, 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:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "Alkatrész nem lehes saját magának verziója" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "Nem lehet olyan alkatrészből új verziót csinálni ami már eleve egy verzió" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "Verzió kódot meg kell adni" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "Verziók csak összeállított alkatrészeknél engedélyezettek" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "Nem lehet sablon alkatrészből új verziót csinálni" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "A szülő alkatrésznek azonos sablonra kell mutatnia" -#: part/models.py:929 +#: part/models.py:907 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:1059 +#: part/models.py:1037 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:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Adott alkatrész verzióból már létezik egy." -#: part/models.py:1080 +#: part/models.py:1060 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:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Szerkezeti kategóriákhoz nem lehet alkatrészeket rendelni!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Alkatrész neve" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Sablon-e" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Ez egy sablon alkatrész?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Ez az alkatrész egy másik változata?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Ebből a sablonból" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Alkatrész leírása (opcionális)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Kulcsszavak" -#: part/models.py:1159 +#: part/models.py:1139 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:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Alkatrész kategória" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Belső Cikkszám)" -#: part/models.py:1184 +#: part/models.py:1164 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:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Változat" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Ez egy másik alkatrész egy verziója?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "Ennek a verziója" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Alapban hol tároljuk ezt az alkatrészt?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Alapértelmezett beszállító" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Alapértelmezett beszállítói alkatrész" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Alapértelmezett lejárat" -#: part/models.py:1266 +#: part/models.py:1229 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:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimális készlet" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Minimálisan megengedett készlet mennyiség" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Alkatrész mértékegysége" -#: part/models.py:1291 +#: part/models.py:1254 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:1297 +#: part/models.py:1260 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:1303 +#: part/models.py:1266 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:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "Lehet ehhez az alkatrészhez több ellenőrzési eredményt rögzíteni?" -#: part/models.py:1315 +#: part/models.py:1278 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:1321 +#: part/models.py:1284 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:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Aktív-e ez az alkatrész?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "Lezárt alkatrészt nem lehet szerkeszteni" -#: part/models.py:1337 +#: part/models.py:1300 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:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "Alkatrészjegyzék ellenőrizve" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "Az alkatrész anyagjegyzéke érvényes?" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Tárolt alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "Alkatrészjegyzéket ellenőrizte" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "Alkatrészjegyzék ellenőrzési dátuma" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Létrehozó" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Alkatrész felelőse" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Több értékesítése" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Árszámítások gyorstárazásához használt pénznem" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Minimum alkatrészjegyzék költség" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Összetevők minimum költsége" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Maximum alkatrészjegyzék költség" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Összetevők maximum költsége" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Minimum beszerzési ár" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Eddigi minimum beszerzési költség" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Maximum beszerzési ár" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Eddigi maximum beszerzési költség" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Minimum belső ár" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Minimum költség a belső ársávok alapján" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Maximum belső ár" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Maximum költség a belső ársávok alapján" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Minimum beszállítói ár" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Minimum alkatrész ár a beszállítóktól" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Maximum beszállítói ár" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Maximum alkatrész ár a beszállítóktól" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Minimum alkatrészváltozat ár" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Alkatrészváltozatok számolt minimum költsége" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Maximum alkatrészváltozat ár" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Alkatrészváltozatok számolt maximum költsége" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Minimum költség" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Minimum költség felülbírálása" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Maximum költség" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Maximum költség felülbírálása" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Számított általános minimum költség" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Számított általános maximum költség" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Minimum eladási ár" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Minimum eladási ár az ársávok alapján" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Maximum eladási ár" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Maximum eladási ár az ársávok alapján" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Minimum eladási költség" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Eddigi minimum eladási ár" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Maximum eladási költség" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Eddigi maximum eladási ár" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Leltározható alkatrész" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Tételszám" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "Egyedi készlet tételek száma a leltárkor" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "Teljes készlet a leltárkor" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Dátum" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Leltározva ekkor" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Minimum készlet érték" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Becsült minimum raktárkészlet érték" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Maximum készlet érték" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "Becsült maximum raktárkészlet érték" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "Alkatrész értékesítési ársáv" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "Alkatrész Teszt Sablon" -#: part/models.py:3686 +#: part/models.py:3652 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:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Teszt sablont csak ellenőrizhetőre beállított alkatrészhez lehet csinálni" -#: part/models.py:3732 +#: part/models.py:3698 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:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Teszt név" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Add meg a teszt nevét" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "Teszt azonosító" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "Egyszerűsített Teszt azonosító" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Teszt leírása" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Adj hozzá egy leírást ehhez a teszthez" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "Teszt engedélyezve?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Kötelező" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Szükséges-e hogy ez a teszt sikeres legyen?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Kötelező érték" -#: part/models.py:3781 +#: part/models.py:3747 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:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Kötelező melléklet" -#: part/models.py:3788 +#: part/models.py:3754 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:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "Választható lehetőségek ehhez a Teszthez (vesszővel elválasztva)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "Alkatrészjegyzék nem szerkeszthető mert az összeállítás le van zárva" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Alkatrészjegyzék nem szerkeszthető mert az összeállítás változat le van zárva" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Szülő alkatrész kiválasztása" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Al alkatrész" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Válaszd ki az alkatrészjegyzékben használandó alkatrészt" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "Alkatrészjegyzék mennyiség ehhez az alkatrészjegyzék tételhez" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Ez az alkatrészjegyzék tétel opcionális" -#: part/models.py:4028 +#: part/models.py:4006 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:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "Beállítás mennyiség" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "A gyártáshoz szükséges extra mennyiség, a beállási veszteséggel együtt" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "Veszteség" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Becsült veszteség egy gyártásnál, százalékban kifejezve (0-100)" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "Kerekítési többszörös" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "A szükséges termelési mennyiség az érték legközelebbi többszöröséhez kerekítése" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Alkatrészjegyzék tétel azonosító" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Alkatrészjegyzék tétel megjegyzései" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Ellenőrző összeg" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "Alkatrészjegyzék sor ellenőrző összeg" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Jóváhagyva" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Ez a BOM tétel jóvá lett hagyva" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Öröklődött" -#: part/models.py:4095 +#: part/models.py:4073 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:4101 +#: part/models.py:4079 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:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "A mennyiség egész szám kell legyen a követésre kötelezett alkatrészek esetén" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Al alkatrészt kötelező megadni" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "Alkatrészjegyzék tétel helyettesítő" -#: part/models.py:4392 +#: part/models.py:4370 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:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Szülő alkatrészjegyzék tétel" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Helyettesítő alkatrész" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "1.rész" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "2.rész" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Válassz kapcsolódó alkatrészt" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "Kapcsolati megjegyzés" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "Alkatrész kapcsolat nem hozható létre önmagával" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Szülő Kategória" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Felsőbb szintű alkatrész kategória" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Alkategóriák" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "Eredmények" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Eszerint a sablon szerint rögzített eredmények száma" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Beszerzési pénzneme ennek a készlet tételnek" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "A fájl nem kép" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Eredeti alkatrész" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Válassz eredeti alkatrészt a másoláshoz" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kép másolása" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Kép másolása az eredeti alkatrészről" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Alkatrészjegyzék másolása" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Paraméterek másolása" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Paraméterek másolása az eredeti alkatrészről" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Megjegyzések másolása" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Megjegyzések másolása az eredeti alkatrészről" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Teszt másolása" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Teszt sablonok másolása az eredeti alkatrészről" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Kezdeti készlet mennyiség" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Add meg a kezdeti készlet mennyiséget. Ha nulla akkor nem lesz készlet létrehozva." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Kezdeti készlet hely" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Add meg a kezdeti készlet helyét" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Válassz beszállítót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Gyártói cikkszám" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "A kiválasztott cég nem érvényes beszállító" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "A kiválasztott cég nem érvényes gyártó" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Van már ilyen gyártói alkatrész" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Van már ilyen beszállítói alkatrész" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategória neve" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Gyártásban" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Az alkatrészből jelenleg ennyi van gyártás alatt" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Már beütemezett de még nem kész gyártási mennyiség" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Készlet tételek" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "Verziók" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Beszállítók" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Teljes készlet" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Nem lefoglalt készlet" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Variánsok Raktárkészlet" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Alkatrész másolása" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Kezdeti adatok másolása egy másik alkatrészről" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Kezdeti készlet" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Kezdeti készlet mennyiség létrehozása" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Beszállító információ" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Kezdeti beszállító adatok hozzáadása" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kategória paraméterek másolása" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Paraméter sablonok másolása a kiválasztott alkatrész kategóriából" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Meglévő kép" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "A meglévő alkatrész képfájl neve" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "A képfájl nem létezik" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Teljes alkatrészjegyzék jóváhagyása" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Gyártható" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Gyártásokhoz szükséges" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Gyártási rendelésekhez foglalva" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Értékesítési rendeléshez szükséges" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Értékesítési rendeléshez lefoglalva" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minimum ár" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Számított minimum ár felülbírálása" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Minimum ár pénzneme" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Maximum ár" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Számított maximum ár felülbírálása" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Maximum ár pénzneme" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Frissítés" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Alkatrész árak frissítése" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Megadott pénznem átváltása {default_currency}-re sikertelen" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "A Minimum ár nem lehet nagyobb mint a Maximum ár" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "A Maximum ár nem lehet kisebb mint a Minimum ár" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Szülő összeállítás kiválasztása" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Összetevő alkatrész kijelölése" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Létező adat törlése" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Meglévő alkatrészjegyzék tételek törlése a másolás előtt" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Örököltekkel együtt" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Sablon alkatrészektől örökölt alkatrészjegyzék tételek használata" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Hibás sorok kihagyása" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Engedély a hibás sorok kihagyására" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Helyettesítő alkatrészek másolása" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Helyettesítő alkatrészek másolása az alkatrészjegyzék tételek másolásakor" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Alacsony készlet értesítés" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "A {part.name} alkatrész rendelkezésre álló készlete a megadott minimum alá csökkent" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Álló készlet értesítés" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "1 készlet tétel közelít a lejárati idejéhez" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "{item_count} készlet tétel közelít a lejáratához" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Nincs lejárati dátuma" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "{abs(days_diff)} napja lejárt" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Ma jár le" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} nap" @@ -6733,108 +6866,108 @@ msgstr "Nincs megadva művelet" msgid "No matching action found" msgstr "Nincs egyező művelet" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Nincs egyező vonalkód" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Egyezés vonalkódra" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "Model nem támogatott" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "Model példány hiányzik" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Ez a vonalkód már egy másik tételé" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "Nem található megfelelő alkatrész adat" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "Nem található megfelelő beszállítói alkatrész" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "Több beszállítói alkatrész található" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "Nincsen vonalkód adathoz illeszkedő plugin" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Beszállítói alkatrész található" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "Ez a termék már bevételezve" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "A szállítói vonalkódhoz nincsen plugin találat" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "Több egyező sortétel is található" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "Nincs egyező sortétel" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "Nincs értékesítési rendelés biztosítva" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 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:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "Készlet tétel nem egyezik a sortétellel" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Nincs elegendő" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "Készlet tétel lefoglalva egy vevői rendeléshez" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Nincs elég információ" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "Megtalált tétel" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "Szállítói alkatrész nem illik a sortételhez" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "Sortétel már elkészült" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 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:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Beszerzési rendelés tétele bevételezve" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "Nem sikerült a sortételt érkeztetni" @@ -6973,7 +7106,7 @@ msgstr "Alapvető vonalkód támogatást ad" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7071,111 +7204,111 @@ msgstr "Visszadátumozott rendelések kibocsátása" msgid "Automatically issue orders that are backdated" msgstr "Automatikusan kibocsátja a visszadátumozott rendeléseket" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "Szintek" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "Az exportálandó alkatrészek mélysége. Nullával a teljes bom összes szintjét listázza" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "Teljes mennyiség" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "Adott alkatrész teljes mennyiségét mutassa az összes alkatrésznél a BOM-ban" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "Készlet adatok" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "Tartalmazza az alkatrész készlet adatait" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "Árazási adatok" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "Tartalmazza az alkatrész árazási adatait" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "Beszállítói adatok" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "Tartalmazza a beszállítói adatokat" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "Gyártói adatok" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "Tartalmazza a gyártói adatokat" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "Helyettesítő adatok" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "Tartalmazza a helyettesítő alkatrész adatokat" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "Paraméter adat" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "Tartalmazza az alkatrész paraméter adatokat" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "Többszintű alkatrészjegyzék exportáló" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "Támogatja a többszintű BOM-ok exportját" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "Alkatrészjegyzék szint" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "Helyettesítő {n}" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "Beszállító {n}" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "Beszállítói {n} raktári cikkszám" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "Beszállítói {n} gyártói cikkszám" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "Gyártó {n}" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "Gyártó {n} MPN" @@ -7190,19 +7323,19 @@ msgstr "InvenTree exportálás támogatása" #: plugin/builtin/exporter/parameter_exporter.py:16 msgid "Exclude Inactive" -msgstr "" +msgstr "Inaktívak Kizárása" #: plugin/builtin/exporter/parameter_exporter.py:17 msgid "Exclude parameters which are inactive" -msgstr "" +msgstr "Inaktív paraméterek kizárása" #: plugin/builtin/exporter/parameter_exporter.py:29 msgid "Parameter Exporter" -msgstr "" +msgstr "Paraméter Exportáló" #: plugin/builtin/exporter/parameter_exporter.py:30 msgid "Exporter for model parameter data" -msgstr "" +msgstr "Exportáló modell paraméter adatokhoz" #: plugin/builtin/exporter/stocktake_exporter.py:25 msgid "Include External Stock" @@ -7277,8 +7410,8 @@ msgid "Integrated Slack notification methods" msgstr "InvenTree slack értesítési módok" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "Slack bejövő webhook URL" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7355,11 +7488,11 @@ 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:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "utoljára használva" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "Opciók" @@ -7537,8 +7670,8 @@ msgid "Key of plugin" msgstr "Plugin kulcsa" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "PluginNeve a pluginnak" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7572,21 +7705,21 @@ msgstr "Csomag plugin" msgid "Plugin" msgstr "Bővítmény" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Nincs szerző" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, 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:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "A pluginhoz minimum {v} verzió kell" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "A pluginhoz maximum {v} verzió kell" @@ -7764,8 +7897,8 @@ msgid "Installation not confirmed" msgstr "Tlepítés nincs megerősítve" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "Vagy csomag nevet vagy URL-t meg kell adni" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8073,7 +8206,7 @@ msgstr "Összesen" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Sorozatszám" @@ -8098,7 +8231,7 @@ msgstr "Készlet tétel teszt riport" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Beépített tételek" @@ -8131,495 +8264,519 @@ msgstr "Nincs eredmény (szükséges)" msgid "No result" msgstr "Nincs eredmény" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "A fájl nem létezik" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "A képfile nem található" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 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:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "company_image elem csak cég példánynál használható" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Hely mélységre szűrés" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Csúcs készlethelyre szűrés" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Szűrt eredmények tartalmazzák az alhelyeket" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "Szülő hely" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Szülő helyre szűrés" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Alkatrész neve (kisbetű/nagybetű nem számít)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Az alkatrész neve tartalmazza (kisbetű/nagybetű nem számít)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Alkatrész neve (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Alkatrész IPN (kisbetű/nagybetű nem számít)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Alkatrész IPN tartalmazza (kisbetű/nagybetű nem számít)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Alkatrész IPN (regexp)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Minimális készlet" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Maximális készlet" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Státuszkód" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Külső hely" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Felhasználva Gyártási Rendelésben" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Más készlettételbe beépítve" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Alkatrész fa" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Módosítva ezelőtt" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Frissítve ez után" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Leltárazva ezelőtt" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Leltárazva ezután" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Lejárat előtt" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Lejárat után" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Állott" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Adj meg egy készlettétel azonosítót - PK-t - hogy a tétel és leszármazottai kihagyásához" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "Készlethelyek alábontása" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "Az al-készlethelyeket is beleértve" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Készlethely azonosító alapján szűrés vagy a 'null'-ra" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Mennyiség megadása kötelező" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Egy érvényes alkatrészt meg kell adni" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "A megadott beszállítói alkatrész nem létezik" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "A beszállítói alkatrészhez van megadva csomagolási mennyiség, de a use_pack_size flag nincs beállítva" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Sorozatszámot nem lehet megadni nem követésre kötelezett alkatrész esetén" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" -msgstr "" +msgstr "Beépítettek Belefoglalása" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" -msgstr "" +msgstr "Ha igaz, tartalmazza a megadott készlettétel alá beépített tételek teszteredményeit" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" -msgstr "" +msgstr "Szűrés numerikus készlettétel azonosító szerint" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" +msgstr "A(z) {id} azonosítójú készlettétel nem létezik" + +#: stock/api.py:1516 +msgid "Include Part Variants" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "Készlethely típus" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "Készlethely típusok" -#: stock/models.py:98 +#: stock/models.py:100 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:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Készlet hely" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Készlethelyek" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Tulajdonos" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Tulajdonos kiválasztása" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "A szerkezeti raktári helyekre nem lehet direktben raktározni, csak az al-helyekre." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Külső" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Ez egy külső készlethely" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Helyszín típusa" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "Tárolóhely típus" -#: stock/models.py:308 +#: stock/models.py:296 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:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "a(z) {field} nem létezik" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Alkatrész kiválasztása kötelező" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "A szerkezeti raktári helyre nem lehet készletet felvenni!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "Virtuális alkatrészből nem lehet készletet létrehozni" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "A beszállítói alkatrész típusa ('{self.supplier_part.part}') mindenképpen {self.part} kellene, hogy legyen" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Mennyiség 1 kell legyen a sorozatszámmal rendelkező tételnél" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Nem lehet sorozatszámot megadni ha a mennyiség több mint egy" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "A tétel nem tartozhat saját magához" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "A tételnek kell legyen gyártási azonosítója ha az is_bulding igaz" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Gyártási azonosító nem ugyanarra az alkatrész objektumra mutat" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Szülő készlet tétel" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Kiindulási alkatrész" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Válassz egy egyező beszállítói alkatrészt ehhez a készlet tételhez" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Hol található ez az alkatrész?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 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:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Beépítve ebbe" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Ez a tétel be van építve egy másik tételbe?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Sorozatszám ehhez a tételhez" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Batch kód ehhez a készlet tételhez" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Készlet mennyiség" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Forrás gyártás" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Gyártás ehhez a készlet tételhez" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Felhasználva ebben" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Felhasználva ebben a gyártásban" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Forrás beszerzési rendelés" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Beszerzés ehhez a készlet tételhez" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Cél vevői rendelés" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Készlet tétel lejárati dátuma. A készlet lejártnak tekinthető ezután a dátum után" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Törlés ha kimerül" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Készlet tétel törlése ha kimerül" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Egy egység beszerzési ára a beszerzés időpontjában" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Alkatrésszé alakítva" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "Mennyiség meghaladja az elérhető készletet" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Az alkatrész nem követésre kötelezett" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Mennyiség egész szám kell legyen" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "A mennyiség nem haladhatja meg az elérhető készletet ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Sorozatszámokat listában kell megadni" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "A mennyiség nem egyezik a megadott sorozatszámok számával" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" -msgstr "" +msgstr "Nem lehet készletet strukturális helyre rendelni" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Ez a Teszt sablon nem létezik" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Készlet tétel hozzárendelve egy vevői rendeléshez" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Készlet tétel beépül egy másikba" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "A készlet tétel más tételeket tartalmaz" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Készlet tétel gyártás alatt" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Követésre kötelezett készlet nem vonható össze" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Duplikált készlet tételek vannak" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "A készlet tétel ugyanarra az alkatrészre kell vonatkozzon" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "A készlet tétel ugyanarra a beszállítói alkatrészre kell vonatkozzon" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Készlet tételek állapotainak egyeznie kell" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Készlet tétel nem mozgatható mivel nincs készleten" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Készlettörténet" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Bejegyzés megjegyzései" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Készlet Tétel Ellenőrzés Eredménye" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Ehhez a teszthez meg kell adni értéket" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Ehhez a teszthez fel kell tölteni mellékletet" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "A teszt eredménye érvénytelen" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Teszt eredménye" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Teszt kimeneti értéke" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Teszt eredmény melléklet" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Tesztek megjegyzései" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "Teszt állomás" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "A tesztet elvégző tesztállomás azonosítója" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "Elkezdődött" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "A teszt indításának időpontja" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "Befejezve" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "A teszt befejezésének időpontja" @@ -8663,246 +8820,246 @@ msgstr "Válassza ki az alkatrészt amihez sorozatszámot akar generálni" msgid "Quantity of serial numbers to generate" msgstr "Hány sorozatszámot generáljunk" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "Az eredmény Teszt sablonja" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "Ehhez az alkatrészhez nem tartozik ellenőrzés" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "Sablon azonosító vagy Teszt név szükséges" -#: stock/serializers.py:292 +#: stock/serializers.py:294 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:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Szülő tétel" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "Szülő készlet tétel" -#: stock/serializers.py:438 +#: stock/serializers.py:442 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:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "Csomagméret használata" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Írd be a sorozatszámokat az új tételekhez" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Beszállítói Cikkszám" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Lejárt" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Gyermek tételek" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "Nyilvántartott tételek" -#: stock/serializers.py:639 +#: stock/serializers.py:645 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:677 +#: stock/serializers.py:683 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:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "Nincsen készlettétel megadva" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, 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:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Cél készlet hely" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "Sorozatszámokat nem lehet hozzárendelni ehhez az alkatrészhez" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "A sorozatszámok már léteznek" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Válaszd ki a beépítésre szánt készlet tételt" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "Beépítendő mennyiség" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "Adja meg a beépítendő mennyiséget" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Tranzakció megjegyzés hozzáadása (opcionális)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "A beépítendő mennyiség legalább 1 legyen" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "Készlet tétel nem elérhető" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "A kiválasztott alkatrész nincs az alkatrészjegyzékben" -#: stock/serializers.py:854 +#: stock/serializers.py:860 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:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Cél hely a kiszedett tételeknek" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "Válassz alkatrészt amire konvertáljuk a készletet" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "A kiválasztott alkatrész nem megfelelő a konverzióhoz" -#: stock/serializers.py:957 +#: stock/serializers.py:963 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:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "Készlet tétel státusz kódja" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 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:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "Nincs készlet tétel kiválasztva" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Alhelyek" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "Felsőbb szintű készlet hely" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "Az alkatrésznek értékesíthetőnek kell lennie" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "A tétel egy vevő rendeléshez foglalt" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "A tétel egy gyártási utasításhoz foglalt" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Vevő akihez rendeljük a készlet tételeket" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "A kiválasztott cég nem egy vevő" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Készlet hozzárendelés megjegyzései" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "A készlet tételek listáját meg kell adni" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Készlet összevonás megjegyzései" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Nem egyező beszállítók megengedése" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 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:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Nem egyező állapotok megjelenítése" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 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:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Legalább két készlet tételt meg kell adni" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Nincs változás" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Készlet tétel elsődleges kulcs értéke" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "Készlettétel nincs készleten" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "Készlettétel már készleten van" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "Mennyiség nem lehet negatív" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Készlet tranzakció megjegyzései" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "Meglévő készletbe olvasztás" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "Visszaérkezett tételek beolvasztása a készlettételekbe ha lehetséges" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "Következő sorozatszám" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "Előző Sorozatszám" @@ -8960,7 +9117,7 @@ msgstr "Készlet manuálisan elvéve" #: stock/status_codes.py:56 msgid "Serialized stock items" -msgstr "" +msgstr "Sorozatszámos készlettételek" #: stock/status_codes.py:58 msgid "Returned to stock" @@ -9384,83 +9541,83 @@ msgstr "Vevői rendelések" msgid "Return Orders" msgstr "Visszavételek" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Felhasználónév" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Keresztnév" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "A felhasználó keresztneve" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Vezetéknév" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "A felhasználó vezetékneve" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "A felhasználó e-mail címe" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Személyzet" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Van-e a felhasználónak személyzeti jogosultsága" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Rendszergazda" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "A felhasználó rendszergazda-e" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Aktív a felhasználói fiók" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "Csak rendszergazda szerkesztheti ezt a mezőt" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "Jelszó" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "Felhasználó jelszava" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "Figyelmezetés felülbírálása" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "A jelszó szabályok figyelmeztetésének felülbírálata" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "Nincs jogosultsága felhasználót létrehozni" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "A fiókod sikeresen létrejött." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Kérlek használd a jelszó visszállítás funkciót a belépéshez" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Üdvözlet az InvenTree-ben" diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po index ca51f6e4a5..90416fa0db 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API endpoint tidak ditemukan" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Daftar item atau filter harus disediakan untuk Pekerjaan Banyak" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Barang harus disediakan sebagai daftar" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Pengguna tidak memiliki izin untuk melihat model ini" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Email (ulang)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Konfirmasi alamat email" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Masukkan email yang sama." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Alamat surel utama yang diberikan tidak valid." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Domain surel yang diberikan tidak perbolehkan." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Jumlah yang diberikan tidak valid" @@ -112,13 +104,13 @@ msgstr "Masukkan tanggal" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Catatan" @@ -131,75 +123,75 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "Nilai yang diberikan tidak sesuai dengan pola yang ditentukan: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Nomor seri kosong" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Gandakan Nomor Seri" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Tidak ada nomor seri ditemukan" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Hapus tag-tag HTML dari nilai ini" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Koneksi Galat" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Ukuran gambar terlalu besar" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "URL yang diberikan bukan file gambar yang valid" @@ -207,11 +199,11 @@ msgstr "URL yang diberikan bukan file gambar yang valid" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Surel" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Anda harus mengaktifkan autentikasi dua faktor sebelum melakukan hal lainnya." @@ -255,133 +247,124 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Pilihan tidak valid" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nama" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Keterangan" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Keterangan (opsional)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Direktori" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Data Barcode" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Data barcode pihak ketiga" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Hash unik data barcode" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Sudah ada barcode yang sama" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Terjadi Kesalahan Server" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Sebuah kesalahan telah dicatat oleh server." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Harus berupa angka yang valid" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Mata Uang" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Nilai tidak valid" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL file gambar external" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Unduhan gambar dari URL external tidak aktif" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "Bukan kode mata uang yang valid" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Produksi Induk" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "Bagian" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Pesanan harus dibatalkan sebelum dapat dihapus" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tersedia" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Order Produksi" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Lokasi" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Order Produksi" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Referensi Order Produksi" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Referensi Order Produksi" msgid "Reference" msgstr "Referensi" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Produksi induk dari produksi ini" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Pilih bagian untuk diproduksi" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referensi Order Penjualan" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Order penjualan yang teralokasikan ke pesanan ini" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Lokasi Sumber" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Pilih dari lokasi mana stok akan diambil untuk produksi ini (kosongkan untuk mengambil stok dari mana pun)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Lokasi Tujuan" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Pilih lokasi di mana item selesai akan disimpan" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Jumlah Produksi" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Jumlah item stok yang akan dibuat" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Item selesai" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Jumlah stok item yang telah diselesaikan" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Status pembuatan" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Kode status pembuatan" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Kode Kelompok" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Kode kelompok untuk hasil produksi ini" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Tanggal Pembuatan" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Target tanggal selesai" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Target tanggal selesai produksi. Produksi akan menjadi terlambat setelah tanggal ini." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Tanggal selesai" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "diselesaikan oleh" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Diserahkan oleh" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Pengguna yang menyerahkan order ini" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Penanggung Jawab" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Tautan eksternal" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Tautan menuju URL eksternal" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Tidak ada hasil produksi yang ditentukan" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Hasil produksi sudah selesai" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Hasil produksi tidak sesuai dengan order produksi" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Jumlah harus lebih besar daripada nol" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Jumlah" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item produksi harus menentukan hasil produksi karena bagian utama telah ditandai sebagai dapat dilacak" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Jumlah harus 1 untuk stok dengan nomor seri" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Item stok teralokasikan terlalu banyak" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Jumlah yang dialokasikan harus lebih dari nol" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Jumlah harus 1 untuk stok dengan nomor seri" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Stok Item" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Sumber stok item" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Jumlah stok yang dialokasikan ke produksi" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Pasang ke" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Tujuan stok item" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Hasil Produksi" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Hasil produksi tidak sesuai dengan produksi induk" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Hasil bagian tidak sesuai dengan bagian dalam order produksi" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Hasil produksi ini sudah diselesaikan" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Hasil produksi tidak dialokasikan sepenuhnya" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Masukkan jumlah hasil pesanan" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Jumlah harus angka bulat karena terdapat bagian yang dapat dilacak dalam daftar barang" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Nomor Seri" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Masukkan nomor seri untuk hasil pesanan" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Alokasikan nomor seri secara otomatis" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Nomor-nomor seri berikut sudah ada atau tidak valid" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Daftar hasil pesanan harus disediakan" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Lokasi hasil pesanan yang selesai" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Terima Alokasi Tidak Lengkap" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Tidak diizinkan" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Terima Tidak Teralokasikan" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Terima bahwa stok item tidak teralokasikan sepenuhnya ke pesanan ini" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Terima Tidak Selesai" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Terima bahwa jumlah hasil produksi yang diperlukan belum selesai" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Jumlah produksi yang diperlukan masih belum cukup" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Order memiliki hasil produksi yang belum dilengkapi" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Hasil produksi" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Hasil pesanan harus mengarah ke pesanan yang sama" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part harus mengarah ke bagian yang sesuai dengan order produksi" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "Item harus tersedia dalam stok" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Jumlah tersedia ({q}) terlampaui" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Hasil produksi harus ditentukan untuk mengalokasikan bagian yang terlacak" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Hasil produksi tidak dapat ditentukan untuk alokasi barang yang tidak terlacak" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Item yang dialokasikan harus disediakan" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lokasi stok, dari mana bahan/bagian akan diambilkan (kosongkan untuk mengambil dari lokasi mana pun)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Lokasi tidak termasuk" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Jangan ambil stok item dari lokasi yang dipilih" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Stok bergantian" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Item stok di beberapa lokasi dapat digunakan secara bergantian" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Stok pengganti" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Izinkan alokasi bagian pengganti" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Item tagihan material" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "Dibatalkan" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Selesai" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Stok dibutuhkan untuk order produksi" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Pengguna" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Harga" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktif" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Judul" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Tautan" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Kesimpulan" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Berkas Gambar" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Lampiran" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "File tidak ditemukan" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Tautan eksternal tidak ditemukan" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Pilih file untuk dilampirkan" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Komentar" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Ukuran Berkas" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Label" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Model" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Terbuat" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Pilihan" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Aktif" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Respon" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Barang diterima" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Nama File" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nama Perusahaan" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "Hari" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponen" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Aktifkan Laporan" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Ukuran Halaman" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Surel diperlukan" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Aktifkan Integrasi Antarmuka" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Perusahaan" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Perusahaan" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Deskripsi Perusahaan" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Laman" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Nomor Ponsel" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontak alamat surel" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontak" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Kode Pos" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "Diletakkan" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "File data" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Tidak diketahui" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Selesai" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Total Harga" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Pelanggan" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Harga Jual" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Dikirim" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Jumlah yang dialokasikan harus lebih dari nol" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "Order ID" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Salin Baris" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "Tolak" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Tanggal" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Harga Minimal" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Harga Maksimal" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Perbarui" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "Tidak ada tindakan yang ditentukan" msgid "No matching action found" msgstr "Aksi tidak ditemukan" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Tidak cukup informasi" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Nomor Seri" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Lampiran perlu diunggah untuk tes ini" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Nama Pengguna" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Nama Depan" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Nama depan dari pengguna" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Nama Belakang" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Nama belakang dari pengguna" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Alamat surel dari pengguna" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Staf" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Selamat Datang di InvenTree" diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po index 0d2015f20d..d3411f0087 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "Endpoint API non trovato" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "L'elenco degli articoli o dei filtri devono essere forniti per le operazioni di massa" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Gli articoli devono essere forniti come elenco" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Lista elementi fornita non valida" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "I filtri devono essere forniti come dizionario" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Filtri forniti non validi" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Tutti i filtri devono essere usati solo con true" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Nessun elemento corrisponde ai criteri forniti" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Nessun dato fornito" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Questo campo deve essere unico." -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "L'utente non ha i permessi per vedere questo modello" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Email (ancora)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Conferma indirizzo email" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "È necessario digitare la stessa e-mail ogni volta." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "L'indirizzo email principale fornito non è valido." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "L'indirizzo di posta elettronica fornito non è approvato." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Impossibile convertire {original} in {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Quantità inserita non valida" @@ -112,13 +104,13 @@ msgstr "Inserisci la data" msgid "Invalid decimal value" msgstr "Valore decimale non valido" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Note" @@ -131,75 +123,75 @@ msgstr "Il valore '{name}' non è nel formato del pattern" msgid "Provided value does not match required pattern: " msgstr "Il valore fornito non corrisponde al modello richiesto: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Impossibile serializzare più di 1000 elementi contemporaneamente" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Numero seriale vuoto" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Seriale Duplicato" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Gruppo non valido: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, 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:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nessun numero di serie trovato" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Il numero dei numeri seriali univoci ({n}) deve essere uguale alla quantità ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Rimuovi i tag HTML da questo valore" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "I dati contengono un contenuto in markdown proibito" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Errore di connessione" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Il server ha risposto con un codice di stato non valido" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Si è verificata un'eccezione" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Il server ha risposto con valore Content-Length non valido" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Immagine troppo grande" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Il download dell'immagine ha superato la dimensione massima" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Il server remoto ha restituito una risposta vuota" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "L'URL fornito non è un file immagine valido" @@ -207,11 +199,11 @@ msgstr "L'URL fornito non è un file immagine valido" msgid "Log in to the app" msgstr "Accedi all'app" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Devi abilitare l'autenticazione a due fattori prima di fare qualsiasi altra cosa." @@ -255,135 +247,126 @@ msgstr "Il campo deve corrispondere al modello richiesto" msgid "Reference number is too large" msgstr "Numero di riferimento troppo grande" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Scelta non valida" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Descrizione" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Descrizione (opzionale)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Percorso" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Nomi duplicati non possono esistere sotto lo stesso genitore" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Note di Markdown (opzionale)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Dati del Codice a Barre" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Dati Codice a Barre applicazioni di terze parti" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Codice a Barre" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Codice univoco del codice a barre" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Trovato codice a barre esistente" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Fallimento Attività" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Attività di lavoro in background '{f}' fallita dopo {n} tentativi" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Errore del server" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Un errore è stato loggato dal server." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Immagine" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Deve essere un numero valido" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Selezionare la valuta dalle opzioni disponibili" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "Questo campo non può essere nullo." -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Valore non valido" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Immagine Remota" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL del file immagine remota" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Il download delle immagini da URL remoto non è abilitato" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Impossibile scaricare l'immagine dall'URL remoto" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" -msgstr "" +msgstr "Formato tipo di contenuto non valido" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" -msgstr "" +msgstr "Tipo di Contenuto non trovato" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "Il tipo di contenuto non corrisponde alla classe mixin richiesta" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -537,11 +520,11 @@ msgstr "Cinese (Semplificato)" msgid "Chinese (Traditional)" msgstr "Cinese (Tradizionale)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "Aggiornamento disponibile" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "È disponibile un aggiornamento per InvenTree" @@ -553,30 +536,30 @@ msgstr "Unità fisica non valida" msgid "Not a valid currency code" msgstr "Non è un codice valuta valido" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Stato dell'ordine" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Produzione Genitore" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Includi Varianti" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Includi Varianti" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Includi Varianti" msgid "Part" msgstr "Articolo" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categoria" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Produzione Antenata" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Assegnato a me" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Assegnato a" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Creato prima" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Creato dopo" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Ha data d'inizio" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Data d'inizio prima" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Data d'inizio dopo" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Ha data di fine" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Data obiettivo prima" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Data obiettivo dopo" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Completato prima" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Completato dopo" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "Data minima" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "Data massima" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Escludi Albero" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "La produzione deve essere annullata prima di poter essere eliminata" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Opzionale" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Assemblaggio" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Monitorato" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Testabile" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Ordine In Corso" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Allocato" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Utilizzato" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponibile" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Ordinato" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordine di Produzione" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Posizione" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Output" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filtra per ID articolo stock di output. Usa 'null' per trovare elementi di produzione disinstallati." -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Ordini di Produzione" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Assembly BOM non è stato convalidato" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "L'ordine di generazione non può essere creato per una parte inattiva" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "L'ordine di compilazione non può essere creato per una parte sbloccata" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Gli ordini di costruzione possono essere eseguiti solo esternamente per gli articoli acquistabili" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "L'utente o il gruppo responsabile deve essere specificato" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "L'ordine di costruzione della parte non può essere cambiata" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "La data di scadenza deve essere successiva alla data d'inizio" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Riferimento Ordine Di Produzione" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Riferimento Ordine Di Produzione" msgid "Reference" msgstr "Riferimento" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Breve descrizione della build (facoltativo)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "Ordine di produzione a cui questa produzione viene assegnata" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Selezionare parte da produrre" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Numero di riferimento ordine di vendita" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "Ordine di vendita a cui questa produzione viene assegnata" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Posizione Di Origine" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Seleziona la posizione da cui prelevare la giacenza (lasciare vuoto per prelevare da qualsiasi posizione di magazzino)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "Build Esterno" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Questo ordine di produzione è eseguito esternamente" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Posizione Della Destinazione" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Seleziona il luogo in cui gli articoli completati saranno immagazzinati" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Quantità Produzione" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Numero di articoli da costruire" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Articoli completati" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Numero di articoli di magazzino che sono stati completati" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Stato Produzione" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Codice stato di produzione" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Codice Lotto" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Codice del lotto per questa produzione" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Data di creazione" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "Data inizio produzione" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Data d'inizio programmata per questo ordine di produzione" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Data completamento obiettivo" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data di completamento della produzione. Dopo tale data la produzione sarà in ritardo." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Data di completamento" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "Completato da" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Rilasciato da" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Utente che ha emesso questo ordine di costruzione" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsabile" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Utente o gruppo responsabile di questo ordine di produzione" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Collegamento esterno" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link a URL esterno" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Priorità di produzione" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Priorità di questo ordine di produzione" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Codice del progetto" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Codice del progetto per questo ordine di produzione" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Impossibile finalizzare l'ordine di produzione con ordini secondari aperti" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Impossibile finalizzare l'ordine di produzione con articolo incompleti" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Impossibile scaricare l'attività per completare le allocazioni di build" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "L'ordine di produzione {build} è stato completato" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "L'ordine di produzione è stato completato" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Deve essere fornita un numero di serie per gli articoli rintracciabili" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nessun output di produzione specificato" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "La produzione è stata completata" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "L'output della produzione non corrisponde all'ordine di compilazione" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantità non può essere maggiore della quantità in uscita" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "La produzione non ha superati tutti i test richiesti" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "L'output della build {serial} non ha superato tutti i test richiesti" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "Impossibile completare parzialmente un build output con gli elementi assegnati" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Elemento di Riga Ordine di Produzione" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Crea oggetto" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Crea oggetto" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Quantità" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Quantità richiesta per l'ordine di costruzione" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Quantità di articoli magazzino consumate" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "L'elemento di compilazione deve specificare un output poiché la parte principale è contrassegnata come rintracciabile" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "La quantità assegnata deve essere maggiore di zero" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "La quantità deve essere 1 per lo stock serializzato" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "La quantità assegnata ({q}) non deve essere maggiore della quantità disponibile ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "La quantità di assegnazione deve essere maggiore di zero" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "La quantità deve essere 1 per lo stock serializzato" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "La quantità assegnata supera la quantità disponibile a magazzino" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Articoli in magazzino" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Origine giacenza articolo" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Quantità di magazzino da assegnare per la produzione" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Installa in" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Destinazione articolo in giacenza" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Livello Produzione" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nome Articolo" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Etichetta Codice Progetto" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Genera Output" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "L'output generato non corrisponde alla produzione principale" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "L'output non corrisponde alle parti dell'ordine di produzione" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Questa produzione è stata già completata" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Questo output non è stato completamente assegnato" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Inserisci la quantità per l'output di compilazione" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Quantità totale richiesta per articoli rintracciabili" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantità totale richiesta, poiché la fattura dei materiali contiene articoli rintracciabili" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Codice Seriale" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Inserisci i numeri di serie per gli output di compilazione (build option)" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Posizione dello stock per l'output della produzione" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Numeri di Serie Assegnazione automatica" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "I seguenti numeri di serie sono già esistenti o non sono validi" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Deve essere fornito un elenco dei risultati di produzione" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Posizione dello stock per l'output di produzione rimosso" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Scarta Assegnazioni" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Scartare tutte le assegnazioni di magazzino per gli output rimossi" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Motivo dell'eliminazione degli output di compilazione" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Posizione per gli output di build completati" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Accetta Assegnazione Incompleta" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Completa l'output se le scorte non sono state interamente assegnate" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Consuma Giacenze Allocate" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Consuma tutte le scorte che sono già state assegnate a questa produzione" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Rimuovi Output Incompleti" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Elimina gli output di produzione che non sono stati completati" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Non permesso" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Accetta come consumato da questo ordine di produzione" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Non assegnare prima di aver completato questo ordine di produzione" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Giacenza in eccesso assegnata" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Come si desidera gestire gli elementi extra giacenza assegnati all'ordine di produzione" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Alcuni articoli di magazzino sono stati assegnati in eccedenza" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Accetta Non Assegnato" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accetta che gli elementi in giacenza non sono stati completamente assegnati a questo ordine di produzione" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "La giacenza richiesta non è stata completamente assegnata" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Accetta Incompleta" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Accetta che il numero richiesto di output di produzione non sia stato completato" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "La quantità di produzione richiesta non è stata completata" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "L'ordine di costruzione ha ancora degli ordini di costruzione figli" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "L'ordine di costruzione deve essere in stato di produzione" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "L'ordine di produzione ha output incompleti" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Linea di produzione" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Genera Output" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "L'output di produzione deve puntare alla stessa produzione" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Articolo linea di produzione" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "gli elementi degli articoli della distinta base devono puntare alla stessa parte dell'ordine di produzione" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "L'output di produzione deve essere specificato per l'ubicazione delle parti tracciate" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "L'output di produzione non deve essere specificato per l'ubicazione delle parti non tracciate" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Posizione dello stock in cui le parti devono prelevate (lasciare vuoto per prelevare da qualsiasi luogo)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Escludi Ubicazione" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Escludi gli elementi stock da questa ubicazione selezionata" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Scorte Intercambiabili" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Gli elementi in magazzino in più sedi possono essere utilizzati in modo intercambiabile" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Sostituisci Giacenze" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Consenti l'allocazione delle parti sostitutive" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Articoli Opzionali" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Assegna gli elementi opzionali della distinta base all'ordine di produzione" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Impossibile avviare l'attività di auto-allocazione" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Riferimento BOM" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "Identificativo dell'Articolo BOM" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Nome Articolo BOM" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Costruzione" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Articolo Fornitore" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Quantità assegnata" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Riferimento Ordine Di Costruzione" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Nome Categoria Articolo" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Tracciabile" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Ereditato" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Consenti Le Varianti" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "In Produzione" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Pianificato per la produzione" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Scorte esterne" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Disponibilità in magazzino" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Disponibili scorte alternative" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Disponibili varianti delle scorte" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "La quantità consumata supera la quantità assegnata" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Note facoltative per il consumo di magazzino" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "L'articolo prodotto deve puntare all'ordine di produzione corretto" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Duplica l'allocazione degli articoli da produrre" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "La riga di produzione deve puntare all'ordine di produzione corretto" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Duplica l'allocazione della riga di produzione" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Deve essere fornita almeno un articolo o riga" @@ -1474,67 +1478,71 @@ msgstr "In Attesa" msgid "Cancelled" msgstr "Annullato" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Completo" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Giacenza richiesta per l'ordine di produzione" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "L'ordine di produzione {build} richiede articoli aggiuntivi" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Ordine di produzione in ritardo" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "L'ordine di produzione {bo} è in ritardo" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "È Un Connegamento" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "E' un file" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "L'utente non ha il permesso di eliminare questi allegati" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "L'utente non ha il permesso di eliminare questo allegato" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Codice valuta non valido" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Codice valuta duplicato" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Nessun codice valuta valido fornito" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Nessun plugin" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Etichetta Codice Progetto" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Aggiornato" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Orario dell'ultimo aggiornamento" @@ -1546,778 +1554,778 @@ msgstr "Aggiornato da" msgid "User who last updated this object" msgstr "Utente che per ultimo ha aggiornato questo oggetto" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Codice unico del progetto" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Descrizione del progetto" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Utente o gruppo responsabile di questo progetto" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Tasto impostazioni" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Valore impostazioni" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Il valore specificato non è un opzione valida" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Il valore deve essere un valore booleano" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Il valore deve essere un intero" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "Il valore deve essere un numero valido" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "Il valore non supera i controlli di convalida" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "La stringa chiave deve essere univoca" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Utente" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Quantità prezzo limite" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Prezzo" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Prezzo unitario in quantità specificata" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Scadenza" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Scadenza in cui questa notifica viene ricevuta" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Nome per questa notifica" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Attivo" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "È questa notifica attiva" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Token per l'accesso" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Segreto" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Segreto condiviso per HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "ID Messaggio" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Identificatore unico per questo messaggio" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Host" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Host da cui questo messaggio è stato ricevuto" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Intestazione" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Intestazione di questo messaggio" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Contenuto" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Contenuto di questo messaggio" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Scadenza in cui questo messaggio è stato ricevuto" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Lavorato il" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Il lavoro su questo messaggio è terminato?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "Id" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Titolo" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Collegamento" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Pubblicato" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Autore" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Riepilogo" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Letto" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Queste notizie sull'elemento sono state lette?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "File immagine" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "Tipo di modello di destinazione per questa immagine" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "ID modello di destinazione per questa immagine" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Unità Personalizzata" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "Il simbolo dell'unità deve essere univoco" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Il nome dell'unità deve essere un identificatore valido" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Nome dell'unità" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Simbolo" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Simbolo unità opzionale" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definizione" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Definizione unità" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Allegato" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "File mancante" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Link esterno mancante" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Tipo modello" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "Tipo di modello di destinazione per l'immagine" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Seleziona file da allegare" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Commento" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Commento allegato" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Data caricamento" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Data di caricamento del file" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Dimensione file" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Dimensioni file in byte" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Tipo di modello specificato per l'allegato non valido" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "Stato Personalizzato" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "Stati Personalizzati" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "Imposta Stato Di Riferimento" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "Set di stato esteso con questo stato personalizzato" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Chiave Logica" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "Chiave logica dello stato che è uguale a questo stato personalizzato nella logica commerciale" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valore" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "Valore numerico che verrà salvato nel database dei modelli" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Nome dello Stato" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Etichetta" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Etichetta che verrà visualizzata nel frontend" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Colore" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Colore che verrà visualizzato nel frontend" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Modello" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "Modello a cui questo stato è associato" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "Il modello deve essere selezionato" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "La chiave deve essere selezionata" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "La chiave logica deve essere selezionata" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "La chiave deve essere diversa dalla chiave logica" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "Deve essere fornita una classe di stato di riferimento valida" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "La chiave deve essere diversa dalle chiavi logiche dello stato di riferimento" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "La chiave logica deve essere nelle chiavi logiche dello stato di riferimento" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "Il nome deve essere diverso dai nomi dello stato di riferimento" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Elenco Selezioni" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Elenchi di Selezione" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Nome dell'elenco di selezione" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Descrizione della lista di selezione" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Bloccato" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "Questa lista di selezione è bloccata?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "Questo elenco di selezione può essere utilizzato?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Plugin Sorgente" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Plugin che fornisce l'elenco di selezione" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Stringa Sorgente" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Stringa opzionale che identifica il sorgente usato per questa lista" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Voce Predefinita" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Voce predefinita per questo elenco di selezione" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Creato" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Data e ora in cui è stato creato l'elenco di selezione" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Ultimo aggiornamento" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "Data e ora in cui l'elenco di selezione è stato aggiornato" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Voce Lista Selezione" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Voci Lista Selezione" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Elenco di selezione a cui appartiene questa voce" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Valore della voce della lista di selezione" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Etichetta per la voce elenco di selezione" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Descrizione della voce della lista di selezione" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "Questa voce della lista di selezione è attiva?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Modello Parametro" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" -msgstr "" +msgstr "Modelli parametro" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "I parametri della casella di controllo non possono avere unità" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "I parametri della casella di controllo non possono avere scelte" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "Le scelte devono essere uniche" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "Il nome del modello del parametro deve essere univoco" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" -msgstr "" +msgstr "Tipo di modello di destinazione per questo modello di parametro" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Nome Parametro" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Unità" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Unità fisiche per questo parametro" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Descrizione del parametro" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Casella di spunta" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Questo parametro è una casella di spunta?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Scelte" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Scelte valide per questo parametro (separato da virgola)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "Lista di selezione per questo parametro" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Abilitato" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "Questo modello di parametro è abilitato?" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" -msgstr "" +msgstr "Parametro" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" -msgstr "" +msgstr "Parametri" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Scelta non valida per il valore del parametro" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "Tipo di modello specificato per parametro non valido" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" -msgstr "" +msgstr "ID Modello" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "ID del modello di destinazione per questo parametro" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Modello" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" -msgstr "" +msgstr "Modello Parametro" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Dati" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Valore del Parametro" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Nota" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Note opzionali elemento" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Scansione Codice A Barre" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Dati del Codice a Barre" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Utente che ha scannerizzato il codice a barre" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Data e ora" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Data e ora della scansione del codice a barre" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "Endpoint URL che ha elaborato il codice a barre" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Contesto" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Dati contestuali per la scansione del codice a barre" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Risposta" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Dati di risposta dalla scansione del codice a barre" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Risultato" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "La scansione del codice a barre è riuscita?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "Si è verificato un errore" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: La cancellazione del log email è protetta. Imposta INVENTREE_PROTECT_EMAIL_LOG a Falso per consentire la cancellazione." -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "Messaggio email" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "Messaggi email" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "Annunciato" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "Inviato" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "Fallito" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "Consegnato" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "Confermato" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "Ricevuti" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "In uscita" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "Nessuna risposta" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "Traccia La Consegna" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "Conferma di lettura" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "Tracciare i clic delle email" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "ID Globale" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identificatore per questo messaggio (potrebbe essere fornito da un sistema esterno)" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "ID discussione" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identificatore per questo thread del messaggio (potrebbe essere fornito da un sistema esterno)" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "Discussione" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "Thread collegato a questo messaggio" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" -msgstr "" +msgstr "Priorità" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "Discussione Email" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "Discussioni Email" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Chiave" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "Chiave univoca per questa discussione (usata per identificare la discussione)" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "Identificatore univoco per questa discussione" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "Avviato internamente" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "Questa discussione è iniziata internamente?" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "Data e ora in cui la discussione è stata creata" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "Data e ora in cui la discussione è stata aggiornata" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} cancellato" msgid "A order that is assigned to you was canceled" msgstr "Un ordine assegnato a te è stato annullato" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Elemento ricevuto" @@ -2351,93 +2359,101 @@ msgstr "Gli elementi sono stati ricevuti a fronte di un ordine di acquisto" msgid "Items have been received against a return order" msgstr "Gli articoli sono stati ricevuti contro un ordine di reso" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "Indica se modificare questa impostazione richiede conferma" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "Questa impostazione richiede conferma prima di cambiare. Si prega di confermare la modifica." + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "Indica se l'impostazione è sovrascritta da una variabile ambiente" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "Sovrascrivi" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "In Esecuzione" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Attività in sospeso" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Attività pianificate" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Attività Fallite" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID Attività" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "ID attività univoco" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Blocco" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Tempo di blocco" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Nome attività" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Funzione" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Nome della funzione" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argomenti" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argomenti attività" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Argomenti Parole Chiave" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Argomenti parole chiave attività" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Nome del file" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Tipo di modello" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "L'utente non ha il permesso di creare o modificare allegati per questo modello" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" -msgstr "" +msgstr "L'utente non ha il permesso di creare o modificare parametri per questo modello" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lista di selezione bloccata" @@ -2445,1128 +2461,1157 @@ msgstr "Lista di selezione bloccata" msgid "No group" msgstr "Nessun gruppo" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "L'URL del sito è bloccato dalla configurazione" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Riavvio richiesto" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "È stata modificata un'impostazione che richiede un riavvio del server" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Migrazioni in sospeso" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Numero di migrazioni del database in sospeso" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "Codici di avviso attivi" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "Un dizionario di codici di avviso attivi" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "ID istanza" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "Identificatore unico per questa istanza InvenTree" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "Annuncio ID" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Annuncia l'ID dell'istanza del server nelle informazioni sullo stato del server (non autenticato)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Nome Istanza Del Server" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Descrittore stringa per l'istanza del server" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Utilizza nome istanza" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Usa il nome dell'istanza nella barra del titolo" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Limita visualizzazione `Informazioni`" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Mostra la modalità `Informazioni` solo ai superusers" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nome azienda" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Nome interno dell'azienda" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "URL Base" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "URL di base per l'istanza del server" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Valuta predefinita" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Selezionare la valuta di base per i calcoli dei prezzi" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Valute Supportate" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Elenco dei codici valuta supportati" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Intervallo Aggiornamento Valuta" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Quanto spesso aggiornare i tassi di cambio (impostare a zero per disabilitare)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "giorni" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Plugin di aggiornamento della valuta" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Plugin di aggiornamento valuta da usare" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Scarica dall'URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Consenti il download di immagini e file remoti da URL esterno" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Limite Dimensione Download" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Dimensione massima consentita per il download dell'immagine remota" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "User-agent utilizzato per scaricare dall'URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Consenti di sovrascrivere l'user-agent utilizzato per scaricare immagini e file da URL esterno (lasciare vuoto per il predefinito)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Convalida URL rigoroso" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Richiede specifico schema quando si convalidano gli URL" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Aggiorna intervallo di controllo" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Quanto spesso controllare gli aggiornamenti (impostare a zero per disabilitare)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Backup automatico" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Abilita il backup automatico di database e file multimediali" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Intervallo Di Backup Automatico" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Definisci i giorni intercorrenti tra un backup automatico e l'altro" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Intervallo Eliminazione Attività" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "I risultati delle attività in background verranno eliminati dopo un determinato numero di giorni" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Intervallo Di Cancellazione Registro Errori" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "I log di errore verranno eliminati dopo il numero specificato di giorni" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Intervallo Di Cancellazione Notifica" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Le notifiche dell'utente verranno eliminate dopo il numero di giorni specificato" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "Intervallo Eliminazione Email" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "I messaggi e-mail verranno eliminati dopo il numero specificato di giorni" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "Proteggi Log Email" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "Impedisci l'eliminazione delle voci di log email" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Supporto Codice A Barre" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Abilita il supporto per lo scanner di codice a barre nell'interfaccia web" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "Memorizza Risultati Barcode" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "Memorizza i risultati della scansione del codice a barre nel database" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "Numero Massimo Scansioni Barcode" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "Numero massimo di risultati della scansione del codice a barre da memorizzare" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Codice a barre inserito scaduto" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Tempo di ritardo di elaborazione codice a barre" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Codice a Barre Supporto Webcam" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Consenti la scansione del codice a barre tramite webcam nel browser" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "Visualizza dati codice a barre" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Visualizza i dati del codice a barre nel browser come testo" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Plugin Generazione Codice A Barre" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Plugin da usare per la generazione interna di codice a barre" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Revisioni Articolo" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Abilita il campo revisione per l'articolo" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "Solo revisione assemblaggio" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "Consenti revisioni solo per articoli di assemblaggio" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Consenti l'eliminazione dall'assemblaggio" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permetti l'eliminazione degli articoli che sono usati in un assemblaggio" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Schema di espressione regolare per l'articolo corrispondente IPN" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Consenti duplicati IPN" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Permetti a più articoli di condividere lo stesso IPN" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Permetti modifiche al part number interno (IPN)" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Consenti di modificare il valore del part number durante la modifica di un articolo" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Copia I Dati Della distinta base dell'articolo" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Copia i dati della Distinta Base predefinita quando duplichi un articolo" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Copia I Dati Parametro dell'articolo" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Copia i dati dei parametri di default quando si duplica un articolo" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Copia I Dati dell'Articolo Test" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Copia i dati di prova di default quando si duplica un articolo" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Copia Template Parametri Categoria" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Copia i modelli dei parametri categoria quando si crea un articolo" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Gli articoli sono modelli per impostazione predefinita" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Gli articoli possono essere assemblate da altri componenti per impostazione predefinita" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Componente" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Gli articoli possono essere assemblati da altri componenti per impostazione predefinita" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Acquistabile" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Vendibile" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Gli articoli sono tracciabili per impostazione predefinita" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtuale" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Gli articoli sono virtuali per impostazione predefinita" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Mostra articoli correlati" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Visualizza parti correlate per ogni articolo" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Dati iniziali dello stock" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Consentire la creazione di uno stock iniziale quando si aggiunge una nuova parte" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Dati iniziali del fornitore" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Consentire la creazione dei dati iniziali del fornitore quando si aggiunge una nuova parte" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Formato di visualizzazione del nome articolo" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Formato per visualizzare il nome dell'articolo" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Icona predefinita Categoria Articolo" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Icona predefinita Categoria Articolo (vuoto significa nessuna icona)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Prezzi Minimi Decimali" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Numero minimo di decimali da visualizzare quando si visualizzano i dati dei prezzi" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Prezzi Massimi Decimali" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Numero massimo di decimali da visualizzare quando si visualizzano i dati dei prezzi" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Usa Prezzi Fornitore" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Includere le discontinuità di prezzo del fornitore nei calcoli generali dei prezzi" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Ignora la Cronologia Acquisti" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Cronologia dei prezzi dell'ordine di acquisto del fornitore superati con discontinuità di prezzo" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Utilizzare i prezzi degli articoli in stock" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Utilizzare i prezzi dei dati di magazzino inseriti manualmente per il calcolo dei prezzi" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Età dei prezzi degli articoli in stock" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Escludere dal calcolo dei prezzi gli articoli in giacenza più vecchi di questo numero di giorni" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Utilizza Variazione di Prezzo" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Includi la variante dei prezzi nei calcoli dei prezzi complessivi" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Solo Varianti Attive" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Utilizza solo articoli di varianti attive per calcolare i prezzi delle varianti" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "Aggiornamento Automatico Prezzi" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "Aggiorna automaticamente il prezzo degli articoli quando i dati interni cambiano" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Intervallo Di Ricostruzione Dei Prezzi" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Numero di giorni prima che il prezzo dell'articolo venga aggiornato automaticamente" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Prezzi interni" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Abilita prezzi interni per gli articoli" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Sovrascrivi Prezzo Interno" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Se disponibile, i prezzi interni sostituiscono i calcoli della fascia di prezzo" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Abilita stampa etichette" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Abilita la stampa di etichette dall'interfaccia web" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "Etichetta Immagine DPI" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Risoluzione DPI quando si generano file di immagine da fornire ai plugin di stampa per etichette" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Abilita Report di Stampa" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Abilita generazione di report di stampa" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Modalità Debug" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Genera report in modalità debug (output HTML)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Registro errori" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Errori di log che si verificano durante la generazione dei report" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Dimensioni pagina" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Dimensione predefinita della pagina per i report PDF" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Forza Unità Parametro" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Se le unità sono fornite, i valori dei parametri devono corrispondere alle unità specificate" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Seriali Unici Globali" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "I numeri di serie per gli articoli di magazzino devono essere univoci" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Elimina scorte esaurite" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina il comportamento predefinito quando un articolo a magazzino è esaurito" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Modello Codice a Barre" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Modello per la generazione di codici batch predefiniti per gli elementi stock" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Scadenza giacenza" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Abilita funzionalità di scadenza della giacenza" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Vendi giacenza scaduta" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Consenti la vendita di stock scaduti" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Tempo di Scorta del Magazzino" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Numero di giorni in cui gli articoli in magazzino sono considerati obsoleti prima della scadenza" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Crea giacenza scaduta" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Permetti produzione con stock scaduto" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Controllo della proprietà della giacenza" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Abilita il controllo della proprietà sulle posizioni e gli oggetti in giacenza" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Icona Predefinita Ubicazione di Magazzino" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Icona Predefinita Ubicazione di Magazzino (vuoto significa nessuna icona)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Mostra articoli a magazzino installati" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Visualizza gli articoli a magazzino installati nelle tabelle magazzino" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Verificare la distinta base durante l'installazione degli articoli" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Gli articoli di magazzino installati devono esistere nella distinta base per l'articolo principale" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Consenti trasferimento magazzino esaurito" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Consenti il trasferimento di articoli non disponibili a magazzino tra le diverse ubicazioni di magazzino" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Produzione" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di produzione" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "È richiesto il Proprietario Responsabile" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "A ogni ordine deve essere assegnato un proprietario responsabile" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "Richiede Articolo Attivo" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "Impedisci la creazione di ordini di produzione per gli articolo inattivi" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Richiede Articolo Bloccato" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "Impedisci la creazione di ordini di costruzione per le parti sbloccate" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "Richiede un BOM valido" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "Previene la creazione di ordini di costruzione a meno che BOM non sia stato convalidato" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "Richiedi Ordini Dei Figli Chiusi" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "Impedisci il completamento dell'ordine di costruzione fino alla chiusura di tutti gli ordini figli" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "Ordini di Produzione Esterni" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "Abilita funzionalità ordini di produzione esterni" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Blocca Fino Al Passaggio Dei Test" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Impedisci che gli output di costruzione siano completati fino al superamento di tutti i test richiesti" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Abilita Ordini Di Reso" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Abilita la funzionalità ordine di reso nell'interfaccia utente" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Motivo di Riferimento per ordine di reso" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di reso" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Modifica Ordini Di Reso Completati" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Consenti la modifica degli ordini di reso dopo che sono stati completati" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Vendita" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di vendita" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Spedizione Predefinita Ordine Di Vendita" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Abilita la creazione di spedizioni predefinite con ordini di vendita" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Modifica Ordini Di Vendita Completati" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Consenti la modifica degli ordini di vendita dopo che sono stati spediti o completati" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" -msgstr "" +msgstr "La Spedizione Richiede Controllo" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" -msgstr "" +msgstr "Impedire il completamento delle spedizioni fino a quando gli articoli sono stati controllati" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Segna gli ordini spediti come completati" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Gli ordini di vendita contrassegnati come spediti saranno automaticamente completati, bypassando lo stato \"spedito\"" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Modello di Riferimento Ordine D'Acquisto" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modello richiesto per generare il campo di riferimento ordine di acquisto" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Modifica Ordini Di Acquisto Completati" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Consenti la modifica degli ordini di acquisto dopo che sono stati spediti o completati" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "Converti Valuta" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "Converti il valore dell'elemento in valuta base quando si riceve lo stock" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Completa Automaticamente Gli Ordini D'Acquisto" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Contrassegna automaticamente gli ordini di acquisto come completi quando tutti gli elementi della riga sono ricevuti" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Abilita password dimenticata" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Abilita la funzione password dimenticata nelle pagine di accesso" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Abilita registrazione" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Abilita auto-registrazione per gli utenti nelle pagine di accesso" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "SSO abilitato" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Abilita SSO nelle pagine di accesso" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Abilita registrazione SSO" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Abilita l'auto-registrazione tramite SSO per gli utenti nelle pagine di accesso" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "Abilita sincronizzazione dei gruppi SSO" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Abilita la sincronizzazione dei gruppi InvenTree con i gruppi forniti dall'IdP" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "Chiave gruppo SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Il nome dell'attributo di richiesta di gruppi fornito dall'IdP" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "Mappa del gruppo SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Una mappatura dai gruppi SSO ai gruppi InvenTree locali. Se il gruppo locale non esiste, verrà creato." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "Rimuovere i gruppi al di fuori dell'SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Indica se i gruppi assegnati all'utente debbano essere rimossi se non sono backend dall'IdP. La disattivazione di questa impostazione potrebbe causare problemi di sicurezza" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Email richiesta" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Richiedi all'utente di fornire una email al momento dell'iscrizione" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Riempimento automatico degli utenti SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Compila automaticamente i dettagli dell'utente dai dati dell'account SSO" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Posta due volte" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Al momento della registrazione chiedere due volte all'utente l'indirizzo di posta elettronica" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Password due volte" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Al momento della registrazione chiedere agli utenti due volte l'inserimento della password" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Domini consentiti" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Limita la registrazione a determinati domini (separati da virgola, a partire da @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Gruppo iscrizione" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Gruppo a cui i nuovi utenti sono assegnati alla registrazione. Se la sincronizzazione di gruppo SSO è abilitata, questo gruppo è impostato solo se nessun gruppo può essere assegnato dall'IdP." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Applica MFA" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Gli utenti devono utilizzare la sicurezza a due fattori." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "Abilitare questa impostazione richiederà a tutti gli utenti di impostare l'autenticazione multi fattore. Tutte le sessioni saranno disconnesse immediatamente." + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Controlla i plugin all'avvio" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Controlla che tutti i plugin siano installati all'avvio - abilita in ambienti contenitore" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Controlla gli aggiornamenti dei plugin" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Abilita controlli periodici per gli aggiornamenti dei plugin installati" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Abilita l'integrazione URL" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Attiva plugin per aggiungere percorsi URL" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Attiva integrazione navigazione" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Abilita i plugin per l'integrazione nella navigazione" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Abilita l'app integrata" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Abilita plugin per aggiungere applicazioni" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Abilita integrazione pianificazione" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Abilita i plugin per eseguire le attività pianificate" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Abilita eventi integrati" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Abilita plugin per rispondere agli eventi interni" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Abilita integrazione interfaccia" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Abilita i plugin per l'integrazione nell'interfaccia utente" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "Abilita integrazione email" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Abilita i plugin per elaborare le email in uscita/in arrivo" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "Abilita codici progetto" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "Abilita i codici del progetto per tracciare i progetti" -#: common/setting/system.py:1083 -msgid "Enable Stock History" -msgstr "Abilita Cronologia Magazzino" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" +msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "Abilita la funzionalità per registrare i livelli storici e il valore del magazzino" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Escludi Posizioni Esterne" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" -msgstr "Escludere le giacenze in sedi esterne dai calcoli della cronologia delle giacenze" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Inventario periodico automatico" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" -msgstr "Numero di giorni tra la registrazione automatica dello storico magazzino" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" +msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "Elimina Vecchie Voci Storiche magazzino" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" +msgstr "" -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "Elimina voci della cronologia giacenze più vecchie del numero specificato di giorni" +#: common/setting/system.py:1135 +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "Intervallo Di Cancellazione Storico Magazzino" +#: common/setting/system.py:1141 +msgid "Stocktake Deletion Interval" +msgstr "" -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "Le voci della cronologia magazzino verranno eliminate dopo il numero specificato di giorni" +#: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 msgid "Display Users full names" msgstr "Visualizza i nomi completi degli utenti" -#: common/setting/system.py:1124 +#: common/setting/system.py:1168 msgid "Display Users full names instead of usernames" msgstr "Mostra nomi completi degli utenti invece che nomi utente" -#: common/setting/system.py:1129 +#: common/setting/system.py:1173 msgid "Display User Profiles" msgstr "Visualizza Profili Utente" -#: common/setting/system.py:1130 +#: common/setting/system.py:1174 msgid "Display Users Profiles on their profile page" msgstr "Visualizza i profili degli utenti sulla pagina del loro profilo" -#: common/setting/system.py:1135 +#: common/setting/system.py:1179 msgid "Enable Test Station Data" msgstr "Abilita Dati Stazione Di Prova" -#: common/setting/system.py:1136 +#: common/setting/system.py:1180 msgid "Enable test station data collection for test results" msgstr "Abilita la raccolta dati della stazione di prova per i risultati del test" -#: common/setting/system.py:1141 +#: common/setting/system.py:1185 msgid "Enable Machine Ping" msgstr "Abilita Ping Macchina" -#: common/setting/system.py:1143 +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Abilita l'attività di ping periodico delle macchine registrate per controllarne lo stato" @@ -3596,11 +3641,11 @@ msgstr "Visualizza le etichette PDF nel browser, invece di scaricare come file" #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "Scanner di codici a barre nei campi del modulo" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "Consenti l'ingresso dello scanner di codici a barre nei campi del modulo" #: common/setting/user.py:51 msgid "Search Parts" @@ -3868,7 +3913,7 @@ msgstr "Salva le ultime stampanti usate da un'utente" #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "Tutti i modelli" #: common/validators.py:63 msgid "No attachment model type provided" @@ -3911,366 +3956,370 @@ msgstr "L'articolo è attivo" msgid "Manufacturer is Active" msgstr "Il produttore è attivo" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "L'articolo fornitore è attivo" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "L'articolo interno è attivo" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "Il fornitore è attivo" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Produttore" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Azienda" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "Ha Scorte" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Aziende" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Descrizione azienda" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Descrizione dell'azienda" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Sito Web" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "Sito web aziendale" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Telefono" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Numero di telefono di contatto" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Indirizzo email" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contatto" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Punto di contatto" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Collegamento alle informazioni aziendali esterne" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "Questa azienda è attiva?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "È un cliente" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Vendi oggetti a questa azienda?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "È un fornitore" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Acquistate articoli da questa azienda?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "È un produttore" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Questa azienda produce articoli?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Valuta predefinita utilizzata per questa azienda" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "Partita IVA" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "Codice Fiscale Azienda" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Indirizzo" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Indirizzi" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Seleziona azienda" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Titolo indirizzo" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Titolo che descrive la voce indirizzo" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Indirizzo Principale" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Imposta come indirizzo primario" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Linea 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Indirizzo (linea 1)" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Linea 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Indirizzo (linea 2)" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "CAP" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Città/Regione" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Codice postale città/regione" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Stato/Provincia" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Stato o provincia" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Nazione" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Indirizzo Paese" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Note di spedizione del corriere" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Note per il corriere di spedizione" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Note di spedizione interne" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Note di spedizione per uso interno" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Collegamento alle informazioni sull'indirizzo (esterno)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Codice articolo produttore" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Articolo di base" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Seleziona articolo" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Seleziona Produttore" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "Codice articolo produttore (MPN)" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Codice articolo produttore" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL dell'articolo del fornitore" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Descrizione articolo costruttore" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Le unità del pacchetto devono essere compatibili con le unità dell'articolo base" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Le unità del pacchetto devono essere maggiori di zero" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Fornitore" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Seleziona fornitore" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Unità di giacenza magazzino fornitore" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Questo articolo fornitore è attivo?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Selezionare un produttore" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL dell'articolo del fornitore" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Descrizione articolo fornitore" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "costo base" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Confezionamento" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Imballaggio del pezzo" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Quantità Confezione" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantità totale fornita in una singola confezione. Lasciare vuoto per gli articoli singoli." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "multiplo" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Ordine multiplo" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Quantità disponibile dal fornitore" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Disponibilità Aggiornata" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Data dell’ultimo aggiornamento dei dati sulla disponibilità" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Sconto Prezzo Fornitore" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "Restituisce la rappresentazione stringa per l'indirizzo primario. Questa proprietà esiste per la compatibilità all'indietro." - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Valuta predefinita utilizzata per questo fornitore" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Nome Azienda" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "In magazzino" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" -msgstr "" +msgstr "Sconti a scalare" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Errore durante l'esportazione dei dati" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "Il plugin di esportazione dati ha restituito un formato di dati errato" @@ -4318,119 +4367,119 @@ msgstr "Inviato" msgid "Invalid status code" msgstr "Codice di stato non valido" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "File dati" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "File dati da importare" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Colonne" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "Tipo di modello di destinazione per questa sessione di importazione" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "Stato importazione" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Valori predefiniti del campo" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "Sostituisci campo" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Filtri campo" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "Aggiorna i record esistenti" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "Se abilitato, i record esistenti verranno aggiornati con i nuovi dati" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "Alcuni campi richiesti non sono stati mappati" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "ID" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "Identificatore del database esistente per il record" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "La colonna è già mappata a un campo del database" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "Il campo è già mappato a una colonna di dati" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "La mappatura delle colonne deve essere collegata a una sessione di importazione valida" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "La colonna non esiste nel file dati" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "Il campo non esiste nel modello di destinazione" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "Il campo selezionato è di sola lettura" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Sessione d'importazione" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Campo" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Colonna" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Indice riga" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "Dati riga originali" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Errori" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Valido" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "L'ID è richiesto per aggiornare i record esistenti." -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Nessun record trovato con l'ID fornito" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Formato ID fornito non valido" @@ -4530,7 +4579,7 @@ msgstr "Numero di copie da stampare per ogni etichetta" msgid "Connected" msgstr "Connesso" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Sconosciuto" @@ -4658,105 +4707,117 @@ msgstr "Progresso Massimo" msgid "Maximum value for progress type, required if type=progress" msgstr "Valore massimo per il tipo di avanzamento, richiesto se tipo = progresso" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Riferimento ordine" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "In Sospeso" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "Ha il codice del progetto" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Creato Da" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "Creato prima" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Creato dopo" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "Ha data d'inizio" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "Data d'inizio prima" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "Data d'inizio dopo" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "Ha data di fine" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "Data obiettivo prima" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "Data obiettivo dopo" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Prezzo Articolo" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "Completato prima" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "Completato dopo" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "Ordine di Produzione Esterno" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Ordine" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "Ordine completato" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Articolo interno" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Ordine in sospeso" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Completato" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "Ha Spedizione" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Ordine D'Acquisto" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Ordine D'Acquisto" msgid "Sales Order" msgstr "Ordini di Vendita" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Prezzo Totale" msgid "Total price for this order" msgstr "Prezzo totale dell'ordine" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Valuta ordine" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta per questo ordine (lasciare vuoto per usare il valore predefinito dell'azienda)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "Questo ordine è bloccato e non può essere modificato" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Il contatto non corrisponde all'azienda selezionata" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "La data d'inizio deve essere precedente alla data di fine" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" -msgstr "" +msgstr "L'indirizzo non corrisponde all'azienda selezionata" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Descrizione dell'ordine (opzionale)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Seleziona il codice del progetto per questo ordine" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Collegamento a un sito web esterno" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "Data iniziale" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Data d'inizio programmata per questo ordine" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data scadenza" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Data prevista per la consegna dell'ordine. L'ordine scadrà dopo questa data." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Data di emissione" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Data di emissione ordine" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Utente o gruppo responsabile di questo ordine" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Punto di contatto per questo ordine" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Indirizzo dell'azienda per questo ordine" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Riferimento ordine" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Stato" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Stato ordine d'acquisto" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Azienda da cui sono stati ordinati gli articoli" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Riferimento fornitore" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Codice di riferimento ordine fornitore" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "ricevuto da" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Data ordine completato" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Destinazione" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "Destinazione per gli elementi ricevuti" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Il fornitore dell'articolo deve corrispondere al fornitore dell'ordine di produzione" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "L'elemento di riga non corrisponde all'ordine di acquisto" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Manca un elemento collegato" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "La quantità deve essere un numero positivo" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Azienda da cui sono stati ordinati gli elementi" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "Stato ordine di vendita" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Riferimento Cliente " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Codice di riferimento Ordine del Cliente" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Data di spedizione" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "spedito da" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "L'ordine è già stato completato" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "L'ordine è già stato annullato" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Solo un ordine aperto può essere contrassegnato come completo" -#: order/models.py:1425 +#: order/models.py:1440 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:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "L'ordine non può essere completato perché ci sono allocazioni incomplete" -#: order/models.py:1439 +#: order/models.py:1454 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:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "L'ordine è bloccato e non può essere modificato" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Quantità Elementi" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Riferimento Linea Elemento" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Note linea elemento" -#: order/models.py:1797 +#: order/models.py:1812 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:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Descrizione della parte (opzionale)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Contesto aggiuntivo per questa voce" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Prezzo unitario" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "Riga ordine d'acquisto" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "L'articolo del fornitore deve corrispondere al fornitore" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "L'ordine di produzione deve essere contrassegnato come esterno" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "Gli ordini di costruzione possono essere collegati solo alle parti di assemblaggio" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "L'articolo dell'ordine di produzione deve corrispondere all'articolo della riga" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Articolo Fornitore" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Ricevuto" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Numero di elementi ricevuti" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Prezzo di Acquisto" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Prezzo di acquisto unitario" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "Ordine di produzione esterno che deve essere eseguito da questo articolo" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "Riga Extra ordine di acquisto" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "Articolo ordine di vendita" -#: order/models.py:2093 +#: order/models.py:2111 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:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Prezzo di Vendita" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Prezzo unitario di vendita" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Spedito" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Quantità spedita" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "Spedizione dell'ordine di vendita" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" -msgstr "" +msgstr "L'indirizzo di spedizione deve corrispondere al cliente" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" -msgstr "" +msgstr "Indirizzo di consegna per questa spedizione" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Data di spedizione" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Data di consegna" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Data di consegna della spedizione" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Verificato Da" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Utente che ha controllato questa spedizione" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Spedizione" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Numero di spedizione" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Numero di monitoraggio" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Informazioni di monitoraggio della spedizione" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Numero Fattura" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Numero di riferimento per la fattura associata" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "La spedizione è già stata spedita" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "La spedizione non ha articoli di stock assegnati" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" -msgstr "" +msgstr "La spedizione deve essere controllata prima che possa essere completata" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "Riga Extra ordine di vendita" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "Assegnazione Ordini Di Vendita" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "L'elemento di magazzino non è stato assegnato" -#: order/models.py:2528 +#: order/models.py:2537 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:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "Impossibile allocare stock a una riga senza un articolo" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantità di ripartizione non puo' superare la disponibilità della giacenza" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "La quantità di assegnazione deve essere maggiore di zero" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantità deve essere 1 per l'elemento serializzato" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "L'ordine di vendita non corrisponde alla spedizione" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "La spedizione non corrisponde all'ordine di vendita" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Linea" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Riferimento della spedizione ordine di vendita" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Elemento" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Seleziona elemento stock da allocare" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Inserisci la quantità assegnata alla giacenza" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Riferimento ordine di reso" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Società a cui vengono restituiti gli articoli" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Stato ordine di reso" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "Articolo Linea Ordine Reso" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "L'elemento stock deve essere specificato" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "Quantità di reso superiore alla quantità di scorta" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "La quantità di reso deve essere maggiore di zero" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "Quantità non valida per l'elemento stock serializzato" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Seleziona l'elemento da restituire dal cliente" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Data di ricezione" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "La data in cui questo articolo restituito è stato ricevuto" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Risultati" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Risultato per questa voce di riga" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Costo associato alla restituzione o riparazione per questa voce di linea" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "Riga Extra ordine di reso" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID Ordine" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID dell'ordine da duplicare" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Copia Linee" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Copia gli elementi di riga dall'ordine originale" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Copia Linee Extra" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Copia gli elementi di riga extra dall'ordine originale" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Copia parametri" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Elementi Riga" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Righe Completate" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Duplica Ordine" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Specifica le opzioni per duplicare questo ordine" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "ID dell'ordine non corretto" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Nome Fornitore" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "L'ordine non può essere cancellato" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Consenti di chiudere l'ordine con elementi di riga incompleti" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "L'ordine ha elementi di riga incompleti" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "L'ordine non è aperto" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "Prezzo Automatico" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Calcola automaticamente il prezzo di acquisto in base ai dati del fornitore articolo" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Valuta prezzo d'acquisto" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Unisci elementi" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Unisce gli elementi con lo stesso articolo, destinazione e data di destinazione in una riga" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "Codice articolo" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Numero Dell'articolo Interno" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "Numero Articolo Interno" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "L'articolo del fornitore deve essere specificato" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "L'ordine di acquisto deve essere specificato" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "Il fornitore deve essere abbinato all'ordine d'acquisto" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "L'ordine di acquisto deve essere abbinato al fornitore" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Elemento Riga" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Inserisci il codice univoco per gli articoli in arrivo" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data di Scadenza" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "Inserisci la data di scadenza per gli articoli in arrivo" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Inserisci i numeri di serie per gli articoli stock in arrivo" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "Sovrascrivi le informazioni d'imballaggio per gli articoli in arrivo" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "Nota aggiuntiva per gli articoli in arrivo" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Codice a Barre" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Codice a barre scansionato" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Il codice a barre è già in uso" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Gli elementi di linea devono essere forniti" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "I valori dei codici a barre forniti devono essere univoci" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "Spedizioni" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Spedizioni Completate" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Valuta prezzo di vendita" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "Elementi Assegnati" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Nessun dettaglio di spedizione fornito" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "L'elemento di riga non è associato a questo ordine" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "La quantità deve essere positiva" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Inserisci i numeri di serie da assegnare" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "La spedizione è già stata spedita" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "La spedizione non è associata con questo ordine" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "Nessuna corrispondenza trovata per i seguenti numeri di serie" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "I seguenti numeri di serie non sono disponibili" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Articoli Linea Ordine Reso" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "L'elemento di riga non corrisponde all'ordine di reso" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "L'elemento di riga è già stato ricevuto" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" -msgstr "" +msgstr "Gli elementi possono essere ricevuti solo con ordini in corso" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "Quantità da restituire" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Valuta del prezzo" @@ -5532,1174 +5613,1226 @@ msgstr "Rimborso" msgid "Reject" msgstr "Rifiuta" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Ordine D'Acquisto in ritardo" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "L'ordine d'acquisto {po} è in ritardo" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Ordini Di Vendita in ritardo" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "L'ordine di vendita {so} è ora in ritardo" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Ordini di Reso in Ritardo" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "L'ordine di reso {ro} è ora in ritardo" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Preferiti" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Filtra per categorie preferite" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Profondità" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtra per profondità categoria" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Livello principale" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtra per categorie di primo livello" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Cascata" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Includi sottocategorie nei risultati filtrati" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Genitore" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Filtra per categoria genitore" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Escludi sottocategorie sotto la categoria specificata" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Ha Risultati" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "È una Variante" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "E' una revisione" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Ha revisioni" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "BOM Valido" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "Categorie a Cascata" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "Se Vero, includere gli elementi nelle categorie figlie della categoria specificata" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtra per categoria ID numerica o per la stringa 'null'" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "L'articolo assemblato è provabile" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "Il componente è provabile" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "Utilizzi" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Categoria Articoli" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Categorie Articolo" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Posizione Predefinita" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Posizione predefinita per gli articoli di questa categoria" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Strutturale" -#: part/models.py:120 +#: part/models.py:119 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:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Keywords predefinite" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Parole chiave predefinite per gli articoli in questa categoria" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Icona" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Icona (facoltativa)" -#: part/models.py:182 +#: part/models.py:181 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:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "Modello Parametro Categoria Articolo" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Valore Predefinito" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Valore Parametro Predefinito" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Articoli" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" -msgstr "" +msgstr "Impossibile eliminare i parametri di una parte bloccata" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" -msgstr "" +msgstr "Impossibile modificare i parametri di una parte bloccata" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "Impossibile eliminare questo articolo perché è bloccato" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "Impossibile eliminare questo articolo perché è ancora attivo" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "Non è possibile eliminare questo articolo in quanto è utilizzato in una costruzione" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "L'articolo '{self}' non può essere usata nel BOM per '{parent}' (ricorsivo)" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "L'articolo '{parent}' è usato nel BOM per '{self}' (ricorsivo)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN deve corrispondere al modello regex {pattern}" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "L'articolo non può essere una revisione di se stesso" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "Non puoi fare la revisione di un articolo che è già una revisione" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "Il codice di revisione deve essere specificato" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "Le revisioni sono consentite solo per le parti di assemblaggio" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "Non è possibile effettuare la revisione di un articolo modello" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "L'articolo genitore deve puntare allo stesso modello" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Esiste già un elemento stock con questo numero seriale" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Non è consentito duplicare IPN nelle impostazioni dell'articolo" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "La revisione dell'articolo duplicata esiste già." -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Un articolo con questo Nome, IPN e Revisione esiste già." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Gli articoli non possono essere assegnati a categorie articolo principali!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Nome articolo" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "È Template" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Quest'articolo è un articolo di template?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Questa parte è una variante di un altro articolo?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante Di" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Descrizione della parte (opzionale)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Parole Chiave" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN - Numero di riferimento interno" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Numero di revisione o di versione" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Revisione" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Questo articolo è una revisione di un altro articolo?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "Revisione di" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Dove viene normalmente immagazzinato questo articolo?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Fornitore predefinito" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Articolo fornitore predefinito" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Scadenza Predefinita" -#: part/models.py:1266 +#: part/models.py:1229 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:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Scorta Minima" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Livello minimo di giacenza consentito" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Unita di misura per questo articolo" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Questo articolo può essere costruito da altri articoli?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "Questo articolo può essere utilizzato per costruire altri articoli?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "Questo articolo ha il tracciamento per gli elementi unici?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "Questo articolo può avere delle prove registrate?" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "Quest'articolo può essere acquistato da fornitori esterni?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "Questo pezzo può essere venduto ai clienti?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Quest'articolo è attivo?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "Gli articoli bloccati non possono essere modificati" -#: part/models.py:1337 +#: part/models.py:1300 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:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "BOM Convalidata" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "Il BOM per questa parte è valido?" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Somma di controllo Distinta Base" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Somma di controllo immagazzinata Distinta Base" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "Distinta Base controllata da" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "Data di verifica Distinta Base" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Creazione Utente" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Utente responsabile di questo articolo" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Vendita multipla" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Valuta utilizzata per calcolare i prezzi" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Costo Minimo Distinta Base" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Costo minimo dei componenti dell'articolo" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Costo Massimo Distinta Base" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Costo massimo dei componenti dell'articolo" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Importo Acquisto Minimo" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Costo minimo di acquisto storico" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Importo massimo acquisto" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Costo massimo di acquisto storico" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Prezzo Interno Minimo" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Costo minimo basato su interruzioni di prezzo interne" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Prezzo Interno Massimo" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Costo massimo basato su interruzioni di prezzo interne" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Prezzo Minimo Fornitore" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Prezzo minimo articolo da fornitori esterni" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Prezzo Massimo Fornitore" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Prezzo massimo dell'articolo proveniente da fornitori esterni" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Variazione di costo minimo" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Costo minimo calcolato di variazione dell'articolo" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Massima variazione di costo" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Costo massimo calcolato di variazione dell'articolo" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Costo Minimo" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Sovrascrivi il costo minimo" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Costo Massimo" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Sovrascrivi il costo massimo" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Costo minimo totale calcolato" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Costo massimo totale calcolato" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Prezzo Di Vendita Minimo" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Prezzo minimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Prezzo Di Vendita Massimo" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Prezzo massimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Prezzo storico minimo di vendita" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Prezzo storico massimo di vendita" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Articolo per l'inventario" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Contatore Elemento" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "Numero di scorte individuali al momento dell'inventario" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "Totale delle scorte disponibili al momento dell'inventario" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Data" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Data in cui è stato effettuato l'inventario" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Costo Minimo Scorta" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Costo minimo stimato di magazzino a disposizione" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Costo Massimo Scorte" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "Costo massimo stimato di magazzino a disposizione" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "Aggiungi Prezzo Ribassato di Vendita dell'Articolo" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "Modello Prove Articolo" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Nome modello non valido - deve includere almeno un carattere alfanumerico" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Il modello di prova può essere creato solo per gli articoli testabili" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "Il modello di test con la stessa chiave esiste già per l'articolo" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Nome Test" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Inserisci un nome per la prova" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "Chiave Di Prova" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "Chiave semplificata per la prova" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Descrizione Di Prova" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Inserisci descrizione per questa prova" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "Questo test è attivo?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Richiesto" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Questa prova è necessaria per passare?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Valore richiesto" -#: part/models.py:3781 +#: part/models.py:3747 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:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Allegato Richiesto" -#: part/models.py:3788 +#: part/models.py:3754 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:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "Scelte valide per questo test (separate da virgole)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "L'articolo nella distinta base non può essere modificato - l'assemblaggio è bloccato" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "L'articolo nella distinta base non può essere modificato - l'assemblaggio della variante è bloccato" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Seleziona articolo principale" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Articolo subordinato" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Seleziona l'articolo da utilizzare nella Distinta Base" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "Quantità Distinta Base per questo elemento Distinta Base" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Questo elemento della Distinta Base è opzionale" -#: part/models.py:4028 +#: part/models.py:4006 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:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "Imposta quantità" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" -msgstr "" +msgstr "Quantità extra necessaria per una generazione, per tenere conto delle perdite di configurazione" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "Logoramento" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Stima del logoramento per una build, espressa in percentuale (0-100)" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "Arrotondamento Multiplo" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Arrotonda la quantità di produzione richiesta al multiplo più vicino di questo valore" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Riferimento Elemento Distinta Base" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Note Elemento Distinta Base" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Codice di controllo" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "Codice di controllo Distinta Base" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Convalidato" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Questo articolo della distinta base è stato validato" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Viene Ereditato" -#: part/models.py:4095 +#: part/models.py:4073 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:4101 +#: part/models.py:4079 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:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "La quantità deve essere un valore intero per gli articoli rintracciabili" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "L'articolo subordinato deve essere specificato" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "Elemento Distinta Base Sostituito" -#: part/models.py:4392 +#: part/models.py:4370 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:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Elemento principale Distinta Base" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Sostituisci l'Articolo" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Articolo 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Articolo 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Seleziona Prodotto Relativo" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "Nota per questa relazione" -#: part/models.py:4464 +#: part/models.py:4442 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:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "La relazione duplicata esiste già" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Categoria Superiore" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Categoria articolo principale" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Sottocategorie" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "Risultati" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Numero di risultati registrati rispetto a questo modello" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Valuta di acquisto di questo articolo in stock" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Il file non è un immagine" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Articolo Originale" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Seleziona l'articolo originale da duplicare" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Copia immagine" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Copia immagine dall'articolo originale" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Copia Distinta Base" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Copia fattura dei materiali dall'articolo originale" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Copia parametri" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Copia i dati dei parametri dall'articolo originale" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Copia note" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Copia note dall'articolo originale" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Copia Test" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Copia modelli di test dall'articolo originale" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Quantità iniziale" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Specificare la quantità iniziale disponibile per questo Articolo. Se la quantità è zero, non viene aggiunta alcuna quantità." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Ubicazione Iniziale Magazzino" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Seleziona il fornitore (o lascia vuoto per saltare)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleziona il produttore (o lascia vuoto per saltare)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Codice articolo Produttore" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "L'azienda selezionata non è un fornitore valido" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "L'azienda selezionata non è un produttore valido" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Nome Categoria" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "In Costruzione" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Quantità di questo articolo attualmente in produzione" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" -msgstr "" +msgstr "Eccezionale quantità di questa parte prevista da costruire" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Articoli in magazzino" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "Revisioni" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Fornitori" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Giacenze Totali" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Scorte Non Assegnate" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Scorta Variante" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Duplica articolo" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Copia i dati iniziali da un altro Articolo" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Stock iniziale" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Crea Articolo con quantità di scorta iniziale" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Informazioni Fornitore" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Copia Parametri Categoria" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Copia i parametri dai modelli della categoria articolo selezionata" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Immagine esistente" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Nome del file di un'immagine articolo esistente" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Il file immagine non esiste" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Convalida l'intera Fattura dei Materiali" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Puoi produrre" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Richiesto per gli Ordini di Produzione" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Assegnato agli Ordini di Produzione" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Richiesto per gli Ordini di Vendita" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Assegnato agli Ordini di Vendita" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Prezzo Minimo" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Sovrascrivi valore calcolato per il prezzo minimo" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Valuta del prezzo minimo" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Prezzo Massimo" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Sovrascrivi valore calcolato per il prezzo massimo" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Valuta del prezzo massimo" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Aggiorna" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Aggiorna i prezzi per questo articolo" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Impossibile convertire dalle valute fornite in {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Il prezzo minimo non può essere maggiore del prezzo massimo" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Il prezzo massimo non può essere minore del prezzo minimo" -#: part/serializers.py:1580 -msgid "Select the parent assembly" +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1697 +msgid "Select the parent assembly" +msgstr "Seleziona l'assemblaggio padre" + +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Seleziona la componente" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Seleziona l'articolo da cui copiare la distinta base" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Rimuovi Dati Esistenti" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Rimuovi elementi distinta base esistenti prima di copiare" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Includi Ereditato" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Includi gli elementi Distinta Base ereditati da prodotti template" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Salta Righe Non Valide" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Abilita questa opzione per saltare le righe non valide" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Copia Articoli sostitutivi" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Notifica di magazzino bassa" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Lo stock disponibile per {part.name} è sceso sotto il livello minimo configurato" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Notifica di magazzino" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "Hai 1 oggetto in magazzino che si avvicina alla data di scadenza" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "Hai {item_count} oggetti in magazzino che si avvicinano alla data di scadenza" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Nessuna data di scadenza." -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "Scaduto {abs(days_diff)} giorni fa" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Scade oggi" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} giorni" @@ -6732,108 +6865,108 @@ msgstr "Nessuna azione specificata" msgid "No matching action found" msgstr "Nessuna azione corrispondente trovata" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Nessuna corrispondenza trovata per i dati del codice a barre" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Corrispondenza trovata per i dati del codice a barre" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "Il modello non è supportato" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "Istanza del modello non trovata" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Il codice a barre corrisponde a un elemento esistente" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "Nessun articolo corrispondente trovato" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "Nessun fornitore articolo corrispondente trovato" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "Trovati più articoli fornitori corrispondenti" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "Nessuna plugin corrispondente trovato per i dati del codice a barre" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Corrispondenza Articoli del Fornitore" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "L'articolo è già stato ricevuto" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "Nessun plugin corrisponde al codice a barre del fornitore" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "Trovati più articoli corrispondenti" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "Nessun elemento corrispondente trovato" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "Nessun ordine di vendita fornito" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "Il codice a barre non corrisponde a un articolo di magazzino valido" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "L'elemento in magazzino non corrisponde alla riga" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Scorte insufficienti disponibili" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "Articolo di magazzino assegnato all'ordine di vendita" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Informazioni non sufficienti" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "Trovato elemento corrispondente" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "L'articolo del fornitore non corrisponde alla riga" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "La riga è già stata completata" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "Ulteriori informazioni richieste per ricevere la voce" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Ricevuta la linea dell'ordine d'acquisto" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "Impossibile ricevere l'elemento della linea" @@ -6879,15 +7012,15 @@ msgstr "Non è possibile selezionare una posizione strutturale" #: plugin/base/barcodes/serializers.py:196 msgid "Purchase order line item to receive items against" -msgstr "" +msgstr "Voce d’ordine di acquisto a cui ricevere gli articoli" #: plugin/base/barcodes/serializers.py:202 msgid "Automatically allocate stock items to the purchase order" -msgstr "" +msgstr "Assegna automaticamente gli articoli di magazzino all'ordine di acquisto" #: plugin/base/barcodes/serializers.py:215 msgid "Sales Order to allocate items against" -msgstr "" +msgstr "Ordine di vendita a cui allocare gli articoli" #: plugin/base/barcodes/serializers.py:221 msgid "Sales order is not open" @@ -6895,15 +7028,15 @@ msgstr "L'ordine di vendita non è aperto" #: plugin/base/barcodes/serializers.py:229 msgid "Sales order line item to allocate items against" -msgstr "" +msgstr "Voce d'ordine di vendita a cui allocare gli articoli" #: plugin/base/barcodes/serializers.py:236 msgid "Sales order shipment to allocate items against" -msgstr "" +msgstr "Spedizione d’ordine di vendita a cui allocare gli articoli" #: plugin/base/barcodes/serializers.py:242 msgid "Shipment has already been delivered" -msgstr "" +msgstr "La spedizione è stata già consegnata" #: plugin/base/barcodes/serializers.py:247 msgid "Quantity to allocate" @@ -6972,7 +7105,7 @@ msgstr "Fornisce supporto nativo per codici a barre" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7012,15 +7145,15 @@ msgstr "Prefisso Codice A Barre Corto" #: 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 "" +msgstr "Personalizzare il prefisso utilizzato per codici a barre corti, può essere utile per ambienti con più istanze InvenTree" #: plugin/builtin/events/auto_create_builds.py:28 msgid "Auto Create Builds" -msgstr "" +msgstr "Creazione automatica di produzioni" #: plugin/builtin/events/auto_create_builds.py:31 msgid "Automatically create build orders for assemblies" -msgstr "" +msgstr "Crea automaticamente ordini di produzione per gli assemblaggi" #: plugin/builtin/events/auto_issue_orders.py:17 msgid "Auto Issue Orders" @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "Livelli" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "Quantità Totale" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "Dati Scorte" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "Dati fornitore" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "Includi dati fornitore" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "Dati produttore" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "Includi dati produttore" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "Rallentamenti in entrata notifiche url" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Key dei plugin" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "PluginName del plugin" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Nessun autore trovato" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "Installazione non confermata" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "Deve essere fornito uno dei nomi del pacchetto URL" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8072,7 +8205,7 @@ msgstr "Totale" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Numero Seriale" @@ -8097,7 +8230,7 @@ msgstr "Test Report Elemento Stock" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Elementi installati" @@ -8130,495 +8263,519 @@ msgstr "Nessun risultato (richiesto)" msgid "No result" msgstr "Nessun risultato" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "File immagine non trovato" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Nome della parte (maiuscole e minuscole)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Il nome della parte contiene (maiuscole e minuscole)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Nome della parte (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "IPN della parte (maiuscole e minuscole)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "IPN della parte contiene (maiuscole e minuscole)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "IPN della parte (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Giacenza minima" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Giacenza massima" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Codici di stato" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Ubicazione Esterna" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Obsoleto" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "La quantità è richiesta" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Deve essere fornita un articolo valido" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "I numeri di serie non possono essere forniti per un articolo non tracciabile" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Ubicazione magazzino" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Posizioni magazzino" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Proprietario" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Seleziona Owner" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Gli elementi di magazzino non possono essere direttamente situati in un magazzino strutturale, ma possono essere situati in ubicazioni secondarie." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Esterno" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Si tratta di una posizione esterna al magazzino" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 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:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "L'articolo deve essere specificato" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Gli articoli di magazzino non possono essere ubicati in posizioni di magazzino strutturali!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "Non è possibile creare un elemento di magazzino per articoli virtuali" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "La quantità deve essere 1 per elementi con un numero di serie" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Il numero di serie non può essere impostato se la quantità è maggiore di 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "L'elemento non può appartenere a se stesso" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "L'elemento deve avere un riferimento di costruzione se is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Il riferimento di costruzione non punta allo stesso oggetto dell'articolo" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Elemento di magazzino principale" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Articolo base" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Seleziona un fornitore articolo corrispondente per questo elemento di magazzino" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Dove si trova questo articolo di magazzino?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "Imballaggio di questo articolo di magazzino è collocato in" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Installato In" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Questo elemento è stato installato su un altro elemento?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Numero di serie per questo elemento" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Codice lotto per questo elemento di magazzino" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Quantità disponibile" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Genera Costruzione" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Costruisci per questo elemento di magazzino" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Origina Ordine di Acquisto" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Ordine d'acquisto per questo articolo in magazzino" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Destinazione Ordine di Vendita" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Data di scadenza per l'elemento di magazzino. Le scorte saranno considerate scadute dopo questa data" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Elimina al esaurimento" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Cancella questo Elemento di Magazzino quando la giacenza è esaurita" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Prezzo di acquisto unitario al momento dell’acquisto" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Convertito in articolo" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "L'articolo non è impostato come tracciabile" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "La quantità deve essere un numero intero" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "I numeri di serie devono essere forniti come elenco" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "La quantità non corrisponde ai numeri di serie" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "L'elemento di magazzino è stato assegnato a un ordine di vendita" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "L'elemento di magazzino è installato in un altro elemento" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "L'elemento di magazzino contiene altri elementi" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "L'elemento di magazzino è stato assegnato a un cliente" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "L'elemento di magazzino è attualmente in produzione" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Il magazzino serializzato non può essere unito" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Duplica elementi di magazzino" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo fornitore" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "I codici di stato dello stock devono corrispondere" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Le giacenze non possono essere spostate perché non disponibili" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Note d'ingresso" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Il valore deve essere fornito per questo test" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "L'allegato deve essere caricato per questo test" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Risultato Test" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Test valore output" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Risultato della prova allegato" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Note del test" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Elemento principale" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Inserisci i numeri di serie per i nuovi elementi" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Scaduto" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Elementi secondari" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Inserisci il numero di elementi di magazzino da serializzare" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, 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:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Posizione magazzino di destinazione" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "Numeri di serie non possono essere assegnati a questo articolo" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Numeri di serie già esistenti" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Seleziona elementi di magazzino da installare" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Aggiungi nota di transazione (opzionale)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "Elemento di magazzino non disponibile" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "L'articolo selezionato non è nella Fattura dei Materiali" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Posizione di destinazione per gli elementi disinstallati" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "Seleziona l'articolo in cui convertire l'elemento di magazzino" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "L'articolo selezionato non è una valida opzione per la conversione" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Sottoallocazioni" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "L'articolo deve essere vendibile" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "L'elemento è assegnato a un ordine di vendita" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "Elemento assegnato a un ordine di costruzione" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Cliente a cui assegnare elementi di magazzino" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "L'azienda selezionata non è un cliente" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Note sull'assegnazione delle scorte" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "Deve essere fornito un elenco degli elementi di magazzino" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Note di fusione di magazzino" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Consenti fornitori non corrispondenti" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 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:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Consenti stato non corrispondente" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 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:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Devono essere riforniti almeno due elementi in magazzino" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Nessun cambiamento" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Valore di chiave primaria StockItem" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Note sugli spostamenti di magazzino" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "Ordini di Vendita" msgid "Return Orders" msgstr "Ordini di reso" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Nome utente" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Nome" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Nome dell'utente" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Cognome" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Cognome dell'utente" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Indirizzo email dell'utente" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Staff" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Questo utente ha i permessi dello staff" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Superuser" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Questo utente è un superutente" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Questo account utente è attivo" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Il tuo account è stato creato." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Si prega di utilizzare la funzione di reimpostazione password per accedere" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Benvenuto in InvenTree" diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po index 977bf33a12..26ab542927 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "APIエンドポイントが見つかりません" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "バルク運転には、品目またはフィルターのリストが必要です" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "項目はリストとして提供されなければなりません" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "無効なアイテムリスト" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "フィルタはディクショナリとして提供されなければなりません" +#: InvenTree/api.py:458 +msgid "All filter must only be used with true" +msgstr "すべてのフィルターは真の場合にのみ使用されなければならない" #: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "提供されたフィルタが無効" - -#: InvenTree/api.py:468 -msgid "All filter must only be used with true" -msgstr "" - -#: InvenTree/api.py:473 msgid "No items match the provided criteria" msgstr "指定された条件に一致する項目がありません" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" -msgstr "" +msgstr "データの提供がありません。" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "この項目は一意である必要があります。" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "ユーザーにこのモデルを表示する権限がありません" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "メールアドレス(確認用)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "メールアドレスの確認" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "毎回同じメールアドレスを入力する必要があります。" -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "指定されたプライマリEメールアドレスは無効です。" -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "指定されたメールドメインは承認されていません。" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "{original}を{unit}に変換できませんでした。" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "数量コードが無効です" @@ -112,13 +104,13 @@ msgstr "日付を入力する" msgid "Invalid decimal value" msgstr "無効な10進数値" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "メモ" @@ -131,75 +123,75 @@ msgstr "値 '{name}' はパターン形式で表示されません" msgid "Provided value does not match required pattern: " msgstr "指定された値が必要なパターンと一致しません: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "一度に1000以上のアイテムをシリアライズすることはできません。" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "シリアル番号は空です" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "重複シリアル" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "無効なグループです:{group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "グループ範囲 {group} が許容数量を超過 ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "シリアル番号が見つかりません" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" -msgstr "" +msgstr "固有のシリアル番号の数({n})は数量({q})と一致する必要があります。" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "この値からHTMLタグを削除" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "データに禁止されているマークダウン・コンテンツが含まれています。" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "接続エラー" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "サーバは無効なステータスコードで応答しました" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "例外が発生しました" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "サーバーが無効なContent-Length値で応答しました" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "画像サイズが大きすぎます" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "画像のダウンロードが最大サイズを超えました" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "リモートサーバーが空のレスポンスを返しました" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "指定されたURLは有効な画像ファイルではありません" @@ -207,11 +199,11 @@ msgstr "指定されたURLは有効な画像ファイルではありません" msgid "Log in to the app" msgstr "アプリにログイン" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "メールアドレス" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "二要素認証を有効にする必要があります。" @@ -255,135 +247,126 @@ msgstr "参照は必須パターンに一致する必要があります。" msgid "Reference number is too large" msgstr "参照番号が大きすぎる" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "無効な選択です" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "お名前" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "説明" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "説明 (オプション)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "パス" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "同じ親に重複した名前は存在しません。" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "マークダウンメモ (オプション)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "バーコード情報" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "サードパーティ製バーコードデータ" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "バーコードハッシュ" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "バーコードデータのユニークなハッシュ" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "既存のバーコードが見つかりました" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "タスクの失敗" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "バックグラウンドワーカータスク'{f}'が{n}回試行した後に失敗しました" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "サーバーエラー" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "サーバーによってエラーが記録されました。" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "画像" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "有効な数字でなければなりません" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "通貨" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "利用可能なオプションから通貨を選択してください" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "この項目は空欄にできません。" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "無効な値です。" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "遠隔画像" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "外部画像ファイルのURL" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "外部URLからの画像ダウンロードは許可されていません" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "リモートURLからの画像ダウンロードに失敗しました" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" -msgstr "" +msgstr "無効なコンテンツタイプ形式です" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" -msgstr "" +msgstr "コンテンツタイプが見つかりません" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "コンテンツタイプが必須のミックスインクラスと一致しません" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -537,13 +520,13 @@ msgstr "中国語 (簡体字)" msgid "Chinese (Traditional)" msgstr "中国語 (繁体字)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" -msgstr "" +msgstr "アップデートが利用可能" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" -msgstr "" +msgstr "InvenTreeの更新版が利用可能になりました" #: InvenTree/validators.py:28 msgid "Invalid physical unit" @@ -553,30 +536,30 @@ msgstr "無効な物理単位" msgid "Not a valid currency code" msgstr "有効な通貨コードではありません。" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "注文ステータス" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "親ビルド" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "バリアントを含む" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "バリアントを含む" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "バリアントを含む" msgid "Part" msgstr "パーツ" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "カテゴリ" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "祖先ビルド" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "担当" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "割り当て" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "作成前" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "の後に作成されました。" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "開始日あり" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "開始日 前" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "開始日 後" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "目標期日あり" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "目標期日" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "以降の目標日" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "完成前" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "終了後" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "最小日付" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "最大日付" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "ツリーを除く" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "削除するには、ビルドをキャンセルする必要があります。" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "消耗品" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "オプション" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "アセンブリ" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "追跡" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "テスト可能" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "受注残高" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "割り当てられた" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" -msgstr "" +msgstr "消費されました" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "利用可能" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "注文中" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "組立注文" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "場所" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" -msgstr "" +msgstr "出力" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." -msgstr "" +msgstr "出力ストックアイテムIDでフィルタリングします。未インストールビルドアイテムを検索するには「null」をご使用ください。" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "組立注文" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "アセンブリBOMが検証されていません" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "非アクティブな部品にビルドオーダーを作成できません。" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "ロックされていない部品にビルドオーダーを作成できません。" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" -msgstr "" +msgstr "ビルドオーダーを外部委託できるのは、購入可能部品のみです" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "担当ユーザーまたはグループを指定する必要があります。" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "ビルドオーダー部品は変更できません" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "目標期日は開始日以降であること" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "ビルド・オーダー・リファレンス" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "ビルド・オーダー・リファレンス" msgid "Reference" msgstr "参照" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "建築の簡単な説明(任意)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "このビルドが割り当てられる ビルドオーダー" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "製造する部品の選択" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "セールス・オーダー・リファレンス" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "このビルドが割り当てられる SalesOrder" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "ソース・ロケーション" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "このビルドで在庫を取得する場所を選択します(任意の在庫場所から取得する場合は空白のままにしてください)。" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" -msgstr "" +msgstr "外部ビルド" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" -msgstr "" +msgstr "このビルドオーダーは外部委託されます。" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "目的地" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "完成したアイテムの保管場所を選択" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "数量" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "構築するストックアイテムの数" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "完成品" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "完了した在庫アイテムの数" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "組立状況" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "ビルドステータスコード" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "バッチコード" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "このビルド出力のバッチコード" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "作成日時" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "ビルド開始日" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "この注文の開始予定日" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "完成目標日" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "ビルド完了目標日。この日付を過ぎると、ビルドは期限切れになります。" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "完了日" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "完了者" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "発行者" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "このビルドオーダーを発行したユーザー" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "責任" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "このビルドオーダーを担当するユーザーまたはグループ" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "外部リンク" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "外部 サイト へのリンク" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "組立優先度" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "建設順序の優先順位" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "プロジェクトコード" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "プロジェクトコード" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" -msgstr "" +msgstr "製造中の子ビルドがあるため、ビルドオーダーを完了できません" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" -msgstr "" +msgstr "不完全な出力があるため、ビルドオーダーを完了できません" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "ビルドの割り当てを完了するタスクのオフロードに失敗しました。" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "ビルドオーダー{build}が完了しました" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "建設発注が完了しました" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "追跡可能な部品については、シリアル番号の提示が必要です。" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "ビルド出力が指定されていません" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "ビルド出力はすでに完了しています" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "ビルド出力がビルド順序と一致しません" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "数量はゼロより大きくなければなりません" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "数量が出力数量を上回ることはできません" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" -msgstr "" +msgstr "ビルド出力は、必要なすべてのテストを通過していません" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "ビルド出力 {serial} は、必要なすべてのテストに合格していません。" -#: build/models.py:1230 -msgid "Cannot partially complete a build output with allocated items" +#: build/models.py:1203 +msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1628 +#: build/models.py:1211 +msgid "Cannot partially complete a build output with allocated items" +msgstr "割り当てられた項目を含むビルド出力の一部のみを完了することはできません" + +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "ビルドオーダーラインアイテム" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "ビルドオブジェクト" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,435 +1016,447 @@ msgstr "ビルドオブジェクト" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "数量" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "注文数量" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" -msgstr "" +msgstr "消費された在庫の数量" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "ビルド項目は、ビルド出力を指定する必要があります。" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "選択された在庫品目が部品表に一致しません。" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "シリアル在庫の場合、数量は1でなければなりません。" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "割当数量({q})は在庫可能数量({a})を超えてはなりません。" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "在庫が過剰配分" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "割当数量はゼロより大きくなければなりません" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "シリアル在庫の場合、数量は1でなければなりません。" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "選択された在庫品目が部品表に一致しません。" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "在庫商品" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "ソース在庫品" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "建設に割り当てる在庫量" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "インストール" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "仕向け地在庫品" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "ビルドレベル" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "部品名" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "プロジェクトコードラベル" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "ビルド出力" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "ビルド出力が親ビルドと一致しません" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "出力部分が BuildOrder 部分と一致しません。" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "このビルド出力はすでに完了しています" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "このビルド出力は完全に割り当てられていません" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "ビルド出力の数量を入力" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "追跡可能な部品に必要な整数個数" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "部品表には追跡可能な部品が含まれるため、必要な数量は整数" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "シリアル番号" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "ビルド出力のためのシリアル番号の入力" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "ビルド出力のストック位置" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "シリアル番号の自動割り当て" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "シリアル番号が一致する必要なアイテムを自動的に割り当て" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "以下のシリアル番号は既に存在するか、無効です。" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "ビルド出力のリストを提供する必要があります。" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "スクラップされたアウトプットの在庫場所" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "廃棄割り当て" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "廃棄されたアウトプットに割り当てられた在庫の破棄" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "ビルドアウトプットを廃棄する理由" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "完成した建造物のアウトプットの場所" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "不完全割当の受入れ" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "在庫が完全に割り当てられていない場合は、出力を完了します。" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "割当在庫の消費" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "このビルドに割り当て済みのストックを消費します。" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "不完全な出力の削除" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "完了していないビルド出力を削除します。" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "不可" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "このビルド・オーダーで消費されるものとして受け入れます。" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "このビルドオーダーを完了する前に割り当てを解除します。" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "総合在庫" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "製造オーダーに割り当てられた余分な在庫品をどのように処理しますか?" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "一部の在庫品目は全体的に配分されています。" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "未割り当ての受け入れ" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "在庫アイテムがこのビルド・オーダーに完全に割り当てられていないことを受け入れます。" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "必要在庫の配分が完了していません" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "インコンプリートの受け入れ" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "必要な数のビルドアウトプットが完了していないことを受け入れます。" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "必要な構築数量が完了していません" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "ビルド・オーダーには未完成の子ビルド・オーダーがあります。" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "受注生産状態であること" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "ビルド・オーダーの出力が不完全" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "組立ライン" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "ビルド出力" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "ビルド出力は同じビルド" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "ビルドラインアイテム" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.partは、ビルドオーダーと同じパーツを指す必要があります。" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "在庫があること" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "使用可能数量({q})を超過" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "追跡部品の割り当てには、ビルド出力を指定する必要があります。" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "追跡されていない部品の割り当てでは、ビルド出力を指定できません。" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "割り当て項目の提供" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "部品を調達する在庫場所(任意の場所から調達する場合は空白にしてください。)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "場所を除く" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "この選択された場所から在庫商品を除外" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "交換可能ストック" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "複数の拠点にある在庫品を交換可能" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "代替ストック" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "代替部品の割り当て" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "オプション" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "オプションのBOMアイテムをビルドオーダーに割り当てます。" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "自動割り当てタスクの開始に失敗しました" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "BOMリファレンス" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "BOMパーツID" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "部品表 部品名" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "ビルド" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "サプライヤー" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "割当数量" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "ビルドリファレンス" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "部品分類名" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "追跡可能" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "継承" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "バリアントを許可" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "BOMアイテム" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "生産中" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" -msgstr "" +msgstr "ビルド予定" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "外部在庫" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "在庫状況" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "利用可能な代替ストック" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "在庫状況" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" -msgstr "" +msgstr "消費量が割り当て量を超過しています" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" -msgstr "" +msgstr "在庫消費に関する任意の注記" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" -msgstr "" +msgstr "ビルド項目は正しいビルドオーダーを指す必要があります" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" -msgstr "" +msgstr "重複したビルド項目の割り当て" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" -msgstr "" +msgstr "ビルドラインは正しいビルドオーダーを指す必要があります" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" -msgstr "" +msgstr "重複したビルドラインの割り当て" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" -msgstr "" +msgstr "少なくとも1つの項目または行を指示する必要があります" #: build/status_codes.py:11 generic/states/tests.py:21 #: generic/states/tests.py:131 order/status_codes.py:12 @@ -1474,852 +1478,856 @@ msgstr "保留中" msgid "Cancelled" msgstr "キャンセル済" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "完了" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "受注生産に必要な在庫" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" -msgstr "" +msgstr "ビルドオーダー{build}には追加の在庫が必要となります" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "期限切れ注文" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "ビルドオーダー{bo}は現在期限切れです" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "リンク" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "ファイル" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "ユーザーにはこれらの添付ファイルを削除する権限がありません。" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "ユーザーにはこの添付ファイルを削除する権限がありません" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "無効な通貨コード" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "通貨コードの重複" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "有効な通貨コードはありません" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "プラグインなし" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "プロジェクトコードラベル" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "更新しました" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "最終更新のタイムスタンプ" #: common/models.py:143 msgid "Update By" -msgstr "" +msgstr "更新者:" #: common/models.py:144 msgid "User who last updated this object" -msgstr "" +msgstr "このオブジェクトを最後に更新したユーザー" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "独自のプロジェクトコード" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "プロジェクトの説明" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "このプロジェクトを担当するユーザーまたはグループ" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "設定キー" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "設定値" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "選択された値は有効なオプションではありません。" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "値はブール値でなければなりません。" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "値は整数値でなければなりません。" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "値は有効な数値でなければなりません。" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "値がバリデーション・チェックに合格しない" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "キー文字列は一意でなければなりません。" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "ユーザー" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "価格破壊数量" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "価格" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "指定数量での単価" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "エンドポイント" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "このウェブフックを受信するエンドポイント" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "このウェブフックの名前" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "有効" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "このウェブフックはアクティブですか" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "トークン" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "アクセス用トークン" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "シークレット" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "HMACの共有秘密" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "メッセージ ID:" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "このメッセージの一意な識別子" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "ホスト" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "このメッセージを受信したホスト" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "ヘッダー" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "このメッセージのヘッダー" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "本文" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "メッセージ本文" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "このメッセージを受信したエンドポイント" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "作業内容" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "このメッセージに関する作業は終わったのですか?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "Id" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "タイトル" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "リンク" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "公開済み" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "投稿者" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "概要" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "既読" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "このニュースは読まれましたか?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "画像ファイル" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "この画像の対象モデルタイプ" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "この画像の対象モデルID" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "カスタムユニット" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "単位記号は一意でなければなりません。" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "ユニット名は有効な識別子でなければなりません。" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "ユニット名" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "シンボル" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "オプションの単位記号" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "定義" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "ユニットの定義" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "添付ファイル" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "ファイルがありません" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "外部リンクが見つかりません。" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "モデルタイプ" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "画像の対象モデルタイプ" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "添付ファイルを選択" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "コメント:" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "添付コメント" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "アップロード日" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "ファイルがアップロードされた日付" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "ファイルサイズ" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "ファイルサイズ(バイト" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "添付ファイルに指定されたモデルタイプが無効です" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "カスタムステート" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "カスタムステート" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "リファレンス・ステータス・セット" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "このカスタム状態で拡張されたステータスセット" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "論理キー" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "ビジネスロジックでこのカスタムステートに等しいステート論理キー" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "値" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "モデルのデータベースに保存される数値" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "都道府県名" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "ラベル" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "フロントエンドに表示されるラベル" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "色" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "フロントエンドに表示される色" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "モデル" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "この状態が関連するモデル" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "モデルを選択する必要があります" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "キーを選択する必要があります。" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "論理キーを選択する必要があります。" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "キーは論理キーと異なる必要があります。" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "有効な参照ステータスクラスが提供されなければならない" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "キーは、参照ステータスの論理キーとは異なる必要があります。" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "論理キーは、参照ステータスの論理キーに含まれていなければなりません。" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "リファレンス・ステータスの名前とは異なっていなければならない。" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "セレクションリスト" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "セレクション・リスト" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "選択リストの名前" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "選択リストの説明" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "ロック中" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "この選択リストはロックされていますか?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "このセレクションリストは使えますか?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "ソースプラグイン" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "選択リストを提供するプラグイン" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "ソースストリング" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "このリストに使用されているソースを示すオプションの文字列" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "デフォルトエントリー" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "この選択リストのデフォルト項目" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "作成日" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "選択リストが作成された日時" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "最終更新" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "選択リストが最後に更新された日時" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "セレクションリスト入力" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "セレクションリスト" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "このエントリーが属する選択リスト" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "選択リストエントリーの値" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "選択リスト項目のラベル" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "選択リスト項目の説明" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "この選択リストはアクティブですか?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "パラメータテンプレート" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" -msgstr "" +msgstr "パラメータテンプレート" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "チェックボックスのパラメータに単位を指定することはできません。" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "チェックボックスパラメータに選択肢を持たせることはできません。" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "選択肢はユニークでなければなりません" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "パラメータ・テンプレート名は一意でなければなりません。" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" -msgstr "" +msgstr "このパラメータテンプレートにおける対象モデルタイプ" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "パラメータ名" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "単位" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "このパラメータの物理単位" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "パラメータの説明" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "チェックボックス" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "このパラメータはチェックボックスですか?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "選択肢" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "このパラメータの有効な選択肢(カンマ区切り)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "このパラメータの選択リスト" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "有効" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "このパラメータテンプレートは有効ですか?" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" -msgstr "" +msgstr "パラメータ" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" -msgstr "" +msgstr "パラメータ" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "パラメータ値の選択が無効" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "パラメータに対して無効なモデルタイプが指定されています" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" -msgstr "" +msgstr "モデルID" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "このパラメータの対象となるモデルのID" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "テンプレート" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" -msgstr "" +msgstr "パラメータテンプレート" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "データ" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "パラメータ値" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "備考" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "任意のメモ欄" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "バーコードスキャン" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "バーコードデータ" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "バーコードをスキャンしたユーザー" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "タイムスタンプ" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "バーコードスキャンの日時" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "バーコードを処理したURLエンドポイント" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "コンテキスト" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "バーコードスキャンのコンテキストデータ" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "返答" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "バーコードスキャンによるレスポンスデータ" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "結果" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "バーコードスキャンは成功しましたか?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" -msgstr "" +msgstr "エラーが発生しました" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." -msgstr "" +msgstr "INVE-E8: メールログの削除は保護されています。削除を許可するには、INVENTREE_PROTECT_EMAIL_LOG を False に設定してください。" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" -msgstr "" +msgstr "メールメッセージ" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" -msgstr "" +msgstr "メールメッセージ" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" -msgstr "" - -#: common/models.py:2999 -msgid "Sent" -msgstr "" - -#: common/models.py:3000 -msgid "Failed" -msgstr "" - -#: common/models.py:3003 -msgid "Delivered" -msgstr "" - -#: common/models.py:3011 -msgid "Confirmed" -msgstr "" - -#: common/models.py:3017 -msgid "Inbound" -msgstr "" +msgstr "発表されました" #: common/models.py:3018 +msgid "Sent" +msgstr "送信" + +#: common/models.py:3019 +msgid "Failed" +msgstr "失敗" + +#: common/models.py:3022 +msgid "Delivered" +msgstr "配送済み" + +#: common/models.py:3030 +msgid "Confirmed" +msgstr "確認済み" + +#: common/models.py:3036 +msgid "Inbound" +msgstr "インバウンド" + +#: common/models.py:3037 msgid "Outbound" -msgstr "" - -#: common/models.py:3023 -msgid "No Reply" -msgstr "" - -#: common/models.py:3024 -msgid "Track Delivery" -msgstr "" - -#: common/models.py:3025 -msgid "Track Read" -msgstr "" - -#: common/models.py:3026 -msgid "Track Click" -msgstr "" - -#: common/models.py:3029 common/models.py:3132 -msgid "Global ID" -msgstr "" +msgstr "アウトバウンド" #: common/models.py:3042 -msgid "Identifier for this message (might be supplied by external system)" -msgstr "" +msgid "No Reply" +msgstr "返信なし" -#: common/models.py:3049 -msgid "Thread ID" -msgstr "" +#: common/models.py:3043 +msgid "Track Delivery" +msgstr "配送状況を記録" -#: common/models.py:3051 -msgid "Identifier for this message thread (might be supplied by external system)" -msgstr "" +#: common/models.py:3044 +msgid "Track Read" +msgstr "読み取りを記録" -#: common/models.py:3060 -msgid "Thread" -msgstr "" +#: common/models.py:3045 +msgid "Track Click" +msgstr "クリックを記録" + +#: common/models.py:3048 common/models.py:3151 +msgid "Global ID" +msgstr "グローバルID" #: common/models.py:3061 +msgid "Identifier for this message (might be supplied by external system)" +msgstr "このメッセージの識別子(外部システムから提供される場合があります)" + +#: common/models.py:3068 +msgid "Thread ID" +msgstr "スレッドID" + +#: common/models.py:3070 +msgid "Identifier for this message thread (might be supplied by external system)" +msgstr "このメッセージスレッドの識別子(外部システムから提供される場合があります)" + +#: common/models.py:3079 +msgid "Thread" +msgstr "スレッド" + +#: common/models.py:3080 msgid "Linked thread for this message" -msgstr "" +msgstr "このメッセージに関連するスレッド" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" -msgstr "" +msgstr "優先順位" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" -msgstr "" +msgstr "メールのスレッド" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" -msgstr "" +msgstr "メールのスレッド" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "キー" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" -msgstr "" +msgstr "このスレッドの固有キー(スレッドを識別するために使用されます)" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" -msgstr "" +msgstr "このスレッドの固有識別子" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" -msgstr "" +msgstr "内部を開始しました" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" -msgstr "" +msgstr "このスレッドは内部で開始されたものですか?" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" -msgstr "" +msgstr "スレッドが作成された日時" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" -msgstr "" +msgstr "スレッドが最後に更新された日時" #: common/notifications.py:57 #, python-brace-format @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} キャンセル" msgid "A order that is assigned to you was canceled" msgstr "あなたに割り当てられた注文がキャンセルされました。" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "受領品目" @@ -2351,93 +2359,101 @@ msgstr "発注書と照らし合わせて商品を受領" msgid "Items have been received against a return order" msgstr "返品注文に反して商品が届いた場合" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" -msgstr "" +msgstr "環境変数によって設定が上書きされるかどうかを示します" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" -msgstr "" +msgstr "上書き" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "走行中" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "保留タスク" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "スケジュールされたタスク" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "失敗したタスク" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "タスクID" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "ユニークなタスクID" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "ロック" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "ロック時間" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "タスク名" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "関数" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "機能名" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "引数" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "タスク引数" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "キーワード論争" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "タスクキーワード引数" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "ファイル名" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "モデルタイプ" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "このモデルの添付ファイルを作成または編集する権限がありません。" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" -msgstr "" +msgstr "ユーザーは、このモデルのパラメータを作成または編集する権限がありません。" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "選択リストがロックされています" @@ -2445,1131 +2461,1160 @@ msgstr "選択リストがロックされています" msgid "No group" msgstr "グループなし" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "サイトのURLが設定によってロックされています" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "再起動が必要" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "サーバーの再起動を必要とする設定が変更されました。" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "保留中の移行" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "保留中のデータベース移行数" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" -msgstr "" +msgstr "有効な警告コード" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" -msgstr "" +msgstr "有効な警告コードの辞書" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "インスタンスID" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "このInvenTreeインスタンスの一意識別子" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "アナウンスID" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "サーバーのインスタンスIDをサーバーステータス情報でアナウンス(認証なし)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "サーバーインスタンス名" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "サーバーインスタンスの文字列記述子" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "インスタンス名を使用" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "タイトルバーにインスタンス名を使用" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "about`を表示する制限" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "スーパーユーザーにのみ `about` モーダルを表示します。" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "会社名" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "社内社名" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "ベース URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "サーバーインスタンスのベースURL" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "デフォルトの通貨" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "価格計算のベース通貨を選択" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "対応通貨" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "対応通貨コード一覧" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "通貨の更新間隔" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "為替レートの更新頻度 (ゼロに設定すると無効になります)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "日" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "通貨更新プラグイン" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "通貨更新プラグイン" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "URLからダウンロード" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "外部URLからの画像ダウンロードを許可する" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "ダウンロードサイズ制限" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "外部URL画像の最大サイズ" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "URLからのダウンロードに使用されるユーザーエージェント" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "外部URLから画像やファイルをダウンロードする際に使用するユーザーエージェントを上書きすることができます。" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "厳格なURLバリデーション" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "URL検証時にスキーマ指定を要求" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "更新チェック間隔" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "アップデートをチェックする頻度 (ゼロに設定すると無効になります)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "自動バックアップ" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "データベースとメディアファイルの自動バックアップ" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "自動バックアップ間隔" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "自動バックアップイベント間の日数を指定" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "タスク削除間隔" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "バックグラウンドタスクの結果は、指定した日数後に削除されます。" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "エラーログ削除間隔" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "エラーログは指定した日数後に削除されます。" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "通知削除間隔" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "ユーザー通知は指定された日数後に削除されます。" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" -msgstr "" +msgstr "メール削除間隔" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" -msgstr "" +msgstr "メールメッセージは、指定された日数が経過後に削除されます。" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" -msgstr "" +msgstr "メールログの保護" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" -msgstr "" +msgstr "メールログエントリの削除を防止します" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "バーコードサポート" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "ウェブインターフェイスでバーコードスキャナのサポートを有効にします。" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "店舗バーコード結果" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "バーコードスキャン結果をデータベースに保存" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "バーコードスキャン最大カウント" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "バーコードスキャン結果の最大保存数" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "バーコード入力遅延" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "バーコード入力処理遅延時間" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "バーコードウェブカメラサポート" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "ブラウザのウェブカメラでバーコードのスキャンが可能" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "バーコード表示データ" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "バーコードデータをテキストとしてブラウザに表示" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "バーコード生成プラグイン" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "内部バーコードデータ生成に使用するプラグイン" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "部品改訂" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "パートのリビジョンフィールドを有効にします。" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "アセンブリ改訂のみ" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "組立部品のみ修正可能" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "アセンブリからの削除を許可" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "アセンブリで使用されている部品の削除を許可します。" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "IPN 正規表現" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "部分IPNにマッチする正規表現パターン" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "IPNの重複を許可" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "複数のパートが同じIPNを共有できるようにします。" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "IPNの編集を許可" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "部品編集中にIPN値の変更を許可" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "部品表データのコピー" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "部品複製時にBOMデータをデフォルトでコピー" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "部品パラメータデータのコピー" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "部品複製時にデフォルトでパラメータデータをコピー" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "コピー部品テストデータ" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "部品複製時にテストデータをデフォルトでコピー" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "カテゴリー・パラメーター・テンプレートのコピー" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "部品作成時のカテゴリー・パラメーター・テンプレートのコピー" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "パーツはデフォルトのテンプレートです" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "コンポーネント" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "パーツはデフォルトでサブコンポーネントとして使用できます" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "購入可能" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "パーツはデフォルトで購入可能です" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "販売可能" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "パーツはデフォルトで販売可能です" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "パーツはデフォルトで追跡可能です" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "バーチャル" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "パーツはデフォルトでバーチャル" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "関連部品を表示" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "部品の関連部品を表示" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "初期在庫データ" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "新規部品追加時に初期在庫を作成可能" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "サプライヤー初期データ" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "新しい部品を追加する際に、最初のサプライヤーデータを作成できるようにします。" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "部品名表示形式" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "部品名の表示形式" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "パーツカテゴリー デフォルトアイコン" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "パートカテゴリのデフォルトアイコン(空はアイコンがないことを意味します)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "価格の最小桁数" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "価格データのレンダリング時に表示する最小小数点以下の桁数" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "価格の小数点以下の桁数" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "価格データのレンダリング時に表示する小数点以下の桁数の最大値" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "サプライヤー価格の利用" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "全体的な価格計算にサプライヤーの価格破壊を含めること" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "購入履歴の上書き" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "過去の発注価格がサプライヤーの価格変動を上書き" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "ストックアイテム価格を使用" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "手動入力された在庫データから価格計算を行います。" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "在庫商品の価格設定年齢" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "この日数より古い在庫品を価格計算から除外します。" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "バリアント価格を使用" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "全体的な価格計算にバリアント価格を含む" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "アクティブバリアントのみ" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "バリアント価格の計算には、アクティブなバリアントパーツのみを使用します。" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" -msgstr "" +msgstr "自動更新の価格設定" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" -msgstr "" +msgstr "内部データが変更された際に、部品価格を自動的に更新します。" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "価格の再構築間隔" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "部品価格が自動的に更新されるまでの日数" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "社内価格" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "部品の内部価格の有効化" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "内部価格オーバーライド" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "利用可能な場合、内部価格は価格帯の計算より優先されます。" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "ラベル印刷の有効化" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "ウェブインターフェースからラベル印刷を有効にします。" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "ラベル画像DPI" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "ラベル印刷プラグインに供給する画像ファイルを生成する際のDPI解像度" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "レポートの有効化" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "レポートの作成" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "デバッグモード" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "デバッグモードでのレポート生成(HTML出力)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "ログレポートエラー" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "レポート生成時に発生するエラーのログ" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "ページサイズ" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "PDFレポートのデフォルトのページサイズ" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "パラメータ単位の強制" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "単位が指定されている場合、パラメータ値は指定された単位に一致する必要があります。" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "世界的にユニークな連載" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "在庫品のシリアル番号はグローバルに一意でなければなりません。" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "枯渇在庫の削除" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "ストックアイテムが枯渇した場合のデフォルトの動作を決定します。" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "バッチコードテンプレート" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "ストックアイテムのデフォルトバッチコード生成用テンプレート" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "有効期限" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "在庫期限切れ機能の有効化" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "期限切れ株式の売却" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "期限切れ株式の売却を許可" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "在庫切れ時間" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "在庫品が期限切れとみなされるまでの日数" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "賞味期限切れ在庫の処理" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "期限切れの在庫を使用した建物の建築を許可" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "株式所有権" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "ストックロケーションとアイテムの所有権管理" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "在庫場所 デフォルトアイコン" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "在庫場所のデフォルトアイコン(空はアイコンがないことを意味します。)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "インストール済みストックアイテムの表示" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "ストックテーブルにインストールされたストックアイテムを表示" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "アイテム取り付けの際はBOMをチェック" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "親部品のBOMには、インストールされたストックアイテムが存在する必要があります。" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "在庫切れの転送を許可" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "在庫のないストックアイテムをストックロケーション間で移動可能" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "ビルド・オーダー参照パターン" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Build Order参照フィールドの生成に必要なパターン" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "責任ある所有者を要求" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "各注文には、責任ある所有者を指定する必要があります。" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "アクティブパートが必要" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "非稼動部品の製造オーダー作成を防止" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "ロックされた部分を要求" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "ロックされていない部品の製造オーダー作成を防止" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "有効なBOMが必要" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "BOMが検証されない限り、製造オーダーが作成されないようにします。" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "クローズド・チャイルド・オーダー" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "すべてのチャイルドオーダーが終了するまで、ビルドオーダーの完了を防止します。" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" -msgstr "" +msgstr "外部ビルドオーダー" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" -msgstr "" +msgstr "外部ビルドオーダー機能の有効化" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "テストがパスするまでブロック" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "必要なテストがすべて合格するまで、ビルド出力が完了しないようにします。" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "返品注文の有効化" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "ユーザーインターフェイスで返品注文機能を有効にします。" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "リターンオーダー参照パターン" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "返品注文参照フィールドの生成に必要なパターン" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "完了した返品注文の編集" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "注文完了後の返品注文の編集が可能" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "販売注文参照パターン" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "販売注文参照フィールドの生成に必要なパターン" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "販売注文のデフォルト出荷" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "販売注文でデフォルト出荷を作成可能" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "完了した販売注文の編集" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "出荷または完了後の販売注文の編集を許可します。" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" -msgstr "" +msgstr "出荷には確認が必要です" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" -msgstr "" +msgstr "商品が確認されるまで、出荷の完了をお控えください。" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "出荷された注文を完了としてマーク" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "出荷済みと表示された販売注文は、「出荷済み」ステータスを回避して自動的に完了します。" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "発注書参照パターン" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "発注書参照フィールドの生成に必要なパターン" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "完了した発注書の編集" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "出荷後または完了後の発注書の編集が可能" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "通貨の変換" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "在庫を受け取る際、商品価値を基準通貨に変換" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "自動発注" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "すべての品目を受領した時点で、発注書を完了として自動的にマーク" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "パスワード忘れ" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "ログインページでのパスワード忘れ防止機能の有効化" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "登録の有効化" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "ログインページでユーザーの自己登録を可能にします。" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "SSOの有効化" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "ログインページでSSOを有効化" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "SSO登録の有効化" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "ログインページでSSOによるユーザーの自己登録を可能にします。" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "SSOグループ同期の有効化" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "InvenTreeグループとIdPが提供するグループの同期を有効にします。" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "SSOグループキー" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "IdP が提供する groups claim 属性の名前。" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "SSOグループマップ" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "SSOグループからローカルのInvenTreeグループへのマッピング。ローカル・グループが存在しない場合は、作成されます。" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "SSO外のグループを削除" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "ユーザーに割り当てられたグループがIdPによってバックエンドされていない場合に削除するかどうか。この設定を無効にすると、セキュリティ上の問題が発生する可能性があります。" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "メールアドレスは必須です" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "サインアップ時にメールの入力を要求" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "SSOユーザーの自動入力" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "SSOアカウントデータからユーザー詳細を自動入力" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "メール2回" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "サインアップの際、ユーザーに2度メールを尋ねます。" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "パスワード2回" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "サインアップ時にパスワードを2回要求" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "許可ドメイン" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "特定のドメイン(@で始まるカンマ区切り)へのサインアップを制限します。" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "登録時のグループ" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "新規ユーザ登録時に割り当てられるグループ。SSOグループ同期が有効な場合、このグループはIdPからグループを割り当てられない場合にのみ設定されます。" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "MFAの実施" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "ユーザーは多要素セキュリティを使用する必要があります。" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "起動時にプラグインをチェック" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "起動時にすべてのプラグインがインストールされていることを確認 - コンテナ環境では有効にします。" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "プラグインのアップデートの確認" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "インストールされているプラグインのアップデートを定期的にチェックします。" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "URL統合の有効化" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "プラグインがURLルートを追加できるようにします" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "ナビゲーション統合の有効化" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "プラグインをナビゲーションに統合可能" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "アプリとの統合" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "プラグインを有効にしてアプリを追加" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "スケジュール統合の有効化" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "スケジュールタスクを実行するプラグインの有効化" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "イベント統合の有効化" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "プラグインが内部イベントに応答できるようにします。" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "インターフェース統合の有効化" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "プラグインがユーザー・インターフェースに統合できるようにします。" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" -msgstr "" +msgstr "メール連携を有効にする" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" -msgstr "" +msgstr "プラグインを有効にして、送信/受信メールを処理できるようにします" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "プロジェクトコードの有効化" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "プロジェクトを追跡するためのプロジェクトコードの有効化" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" -msgstr "" +msgstr "過去の在庫数量および価値を記録する機能を有効にします" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "外部ロケーションを除く" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "自動引取期間" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "ユーザーのフルネームを表示" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "ユーザー名の代わりにフルネームを表示" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "ユーザープロファイルの表示" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" -msgstr "プロフィールページにユーザーのプロフィールを表示" - #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "テストステーションデータの有効化" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" -msgstr "テスト結果のテストステーションデータ収集の有効化" +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 -msgid "Enable periodic ping task of registered machines to check their status" +msgid "Stocktake entries will be deleted after specified number of days" msgstr "" +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "ユーザーのフルネームを表示" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "ユーザー名の代わりにフルネームを表示" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "ユーザープロファイルの表示" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "プロフィールページにユーザーのプロフィールを表示" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "テストステーションデータの有効化" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "テスト結果のテストステーションデータ収集の有効化" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "マシン ping を有効にする" + +#: common/setting/system.py:1187 +msgid "Enable periodic ping task of registered machines to check their status" +msgstr "登録されたマシンの状態を確認するため、定期的なpingタスクを有効にしてください" + #: common/setting/user.py:23 msgid "Inline label display" msgstr "インラインラベル表示" @@ -3596,11 +3641,11 @@ msgstr "ファイルとしてダウンロードする代わりに、ブラウザ #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "フォームフィールド内のバーコードスキャナー" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "フォームフィールドへのバーコードスキャナー入力の許可" #: common/setting/user.py:51 msgid "Search Parts" @@ -3788,19 +3833,19 @@ msgstr "ナビバーの位置は画面上部に固定されます。" #: common/setting/user.py:195 msgid "Fixed Table Headers" -msgstr "" +msgstr "固定された表の見出し" #: common/setting/user.py:196 msgid "Table headers are fixed to the top of the table" -msgstr "" +msgstr "表の見出しは表の上部に固定されています" #: common/setting/user.py:201 msgid "Show Spotlight" -msgstr "" +msgstr "スポットライトを表示する" #: common/setting/user.py:202 msgid "Enable spotlight navigation functionality" -msgstr "" +msgstr "スポットライトナビゲーション機能を有効にする" #: common/setting/user.py:207 msgid "Navigation Icons" @@ -3820,11 +3865,11 @@ msgstr "日付の表示形式" #: common/setting/user.py:227 msgid "Show Stock History" -msgstr "" +msgstr "在庫履歴を表示する" #: common/setting/user.py:228 msgid "Display stock history information in the part detail page" -msgstr "" +msgstr "部品詳細ページに在庫履歴情報を表示します" #: common/setting/user.py:233 msgid "Show Last Breadcrumb" @@ -3836,19 +3881,19 @@ msgstr "現在のページをパンくずで表示" #: common/setting/user.py:239 msgid "Show full stock location in tables" -msgstr "" +msgstr "表に在庫場所をすべて表示します" #: common/setting/user.py:241 msgid "Disabled: The full location path is displayed as a hover tooltip. Enabled: The full location path is displayed as plain text." -msgstr "" +msgstr "無効時:完全な場所のパスがホバーツールチップとして表示されます。有効時:完全な場所のパスがプレーンテキストとして表示されます。" #: common/setting/user.py:247 msgid "Show full part categories in tables" -msgstr "" +msgstr "表内の全カテゴリを表示します" #: common/setting/user.py:249 msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled: The full category path is displayed as plain text." -msgstr "" +msgstr "無効時:カテゴリの完全なパスがホバー時のツールチップとして表示されます。有効時:カテゴリの完全なパスがプレーンテキストとして表示されます。" #: common/setting/user.py:255 msgid "Receive error reports" @@ -3868,7 +3913,7 @@ msgstr "ユーザーの最後に使用した印刷機を保存" #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "全モデル" #: common/validators.py:63 msgid "No attachment model type provided" @@ -3911,366 +3956,370 @@ msgstr "パートはアクティブ" msgid "Manufacturer is Active" msgstr "メーカーはアクティブ" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "サプライヤーが活動中" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "内部はアクティブ" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "サプライヤーの活動" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "製造元" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "会社名" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "在庫あり" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "会社" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "会社概要" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "会社概要" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "ウェブサイト" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "会社ホームページURL" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "電話番号" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "連絡先電話番号" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "連絡先メールアドレス" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "お問い合わせ" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "連絡先" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "外部企業情報へのリンク" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "この会社は活動していますか?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "お客様" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "この会社に商品を販売していますか?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "サプライヤー" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "この会社から商品を購入しますか?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "メーカーは" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "この会社は部品を製造しているのですか?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "この会社で使用されるデフォルト通貨" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" -msgstr "" +msgstr "納税者番号" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" -msgstr "" +msgstr "法人税番号" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "住所" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "マイアカウント" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "会社を選択" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "住所" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "アドレスエントリを説明するタイトル" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "主な住所" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "プライマリアドレスに設定" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "1行目" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "丁目、番地、号など" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "2行目" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "建物名、部屋番号など" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "郵便番号" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "都市/地域" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "郵便番号 都市/地域" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "都道府県" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "都道府県" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "国" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "住所国" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "宅配便発送に関する注意事項" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "宅配便発送時の注意事項" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "社内出荷に関する注意事項" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "社内用出荷注意事項" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "住所情報へのリンク(外部)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "メーカー・パーツ" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "ベース部" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "部品を選択" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "メーカー選択" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "メーカー品番" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "外部メーカー部品リンク用URL" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "メーカー部品説明" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "パックユニットは、ベースユニットと互換性がある必要があります。" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "パック単位はゼロより大きくなければなりません。" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "リンクされたメーカー部品は、同じベース部品を参照する必要があります。" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "仕入先" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "サプライヤーを選択" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "サプライヤー在庫管理ユニット" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "このサプライヤーは活動していますか?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "メーカー部品の選択" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "外部サプライヤー部品リンク用URL" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "サプライヤーの部品説明" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "基本料金" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "ミニマムチャージ(例:仕入れ手数料)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "パッケージング" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "部品梱包" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "パック数量" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "1パックに供給される総量。単品の場合は空のままにしてください。" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "複数" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "複数注文" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "サプライヤーから入手可能な数量" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "空席状況更新" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "アベイラビリティ・データの最終更新日" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "サプライヤーの価格破壊" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "プライマリ・アドレスの文字列表現を返します。このプロパティは後方互換性のために存在します。" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "このサプライヤーで使用されるデフォルト通貨" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "会社名" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "在庫あり" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" -msgstr "" +msgstr "価格割り引き" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "データのエクスポート中にエラーが発生しました" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "データエクスポートプラグインが不正なデータ形式を返しました" @@ -4318,121 +4367,121 @@ msgstr "設置済" msgid "Invalid status code" msgstr "無効なステータスコード" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "データファイル" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "インポートするデータファイル" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "カラム" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "このインポートセッションのターゲットモデルタイプ" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "インポートの状態" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "フィールドのデフォルト" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "フィールドのオーバーライド" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "フィールドフィルター" -#: importer/models.py:126 -msgid "Update Existing Records" -msgstr "" - #: importer/models.py:127 -msgid "If enabled, existing records will be updated with new data" -msgstr "" +msgid "Update Existing Records" +msgstr "既存の記録を更新する" -#: importer/models.py:259 +#: importer/models.py:128 +msgid "If enabled, existing records will be updated with new data" +msgstr "有効にされた場合、既存のレコードは新しいデータで更新されます" + +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "一部の必須フィールドがマッピングされていません" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" -msgstr "" +msgstr "ID" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" -msgstr "" +msgstr "レコードの既存データベース識別子" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "カラムはすでにデータベースのフィールドにマッピングされています。" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "フィールドはすでにデータ列にマッピングされています。" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "カラムマッピングは有効なインポートセッションにリンクされている必要があります。" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "カラムがデータファイルに存在しません。" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "対象モデルにフィールドが存在しない" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "選択されたフィールドは読み取り専用です。" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "インポートセッション" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "フィールド" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "列" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "行インデックス" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "元の行データ" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "エラー" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "有効" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." -msgstr "" +msgstr "既存の記録を更新するにはIDが必要です。" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" -msgstr "" +msgstr "指定のIDで該当する記録は見つかりませんでした" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" -msgstr "" +msgstr "無効なID形式が指定されました" #: importer/operations.py:31 importer/operations.py:52 msgid "Unsupported data file format" @@ -4530,7 +4579,7 @@ msgstr "各ラベルの印刷部数" msgid "Connected" msgstr "接続済み" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "不明" @@ -4540,7 +4589,7 @@ msgstr "印刷" #: machine/machine_types/label_printer.py:234 msgid "Warning" -msgstr "" +msgstr "警告" #: machine/machine_types/label_printer.py:235 msgid "No media" @@ -4556,7 +4605,7 @@ msgstr "ネットワーク接続なし" #: machine/machine_types/label_printer.py:238 msgid "Error" -msgstr "" +msgstr "エラー" #: machine/machine_types/label_printer.py:245 msgid "Label Printer" @@ -4628,11 +4677,11 @@ msgstr "設定タイプ" #: machine/serializers.py:24 msgid "Key of the property" -msgstr "" +msgstr "プロパティーキー" #: machine/serializers.py:27 msgid "Value of the property" -msgstr "" +msgstr "プロパティー値" #: machine/serializers.py:30 users/models.py:238 msgid "Group" @@ -4640,123 +4689,135 @@ msgstr "グループ" #: machine/serializers.py:30 msgid "Grouping of the property" -msgstr "" +msgstr "プロパティーのグループ" #: machine/serializers.py:33 msgid "Type" -msgstr "" +msgstr "タイプ" #: machine/serializers.py:35 msgid "Type of the property" -msgstr "" +msgstr "プロパティーの種類" #: machine/serializers.py:40 msgid "Max Progress" -msgstr "" +msgstr "最大進捗" #: machine/serializers.py:41 msgid "Maximum value for progress type, required if type=progress" -msgstr "" +msgstr "進行状況タイプの場合の最大値。type=progress の場合に必須です。" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "注文参照" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "並外れた" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "プロジェクトコード" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "作成者" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "作成前" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "の後に作成されました。" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "開始日あり" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "開始日 前" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "開始日 後" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "目標期日あり" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "目標期日" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "以降の目標日" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "価格" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "完成前" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "終了後" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" -msgstr "" +msgstr "外部ビルドオーダー" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "注文" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "注文完了" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "内部パーツ" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "注文保留" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "完了" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "出荷あり" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "注文" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "注文" msgid "Sales Order" msgstr "セールスオーダー" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "合計金額" msgid "Total price for this order" msgstr "この注文の合計金額" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "注文通貨" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "この注文の通貨(会社のデフォルトを使用する場合は空白のままにしてください。)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "この注文はロックされており、変更できません。" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "連絡先が選択した会社と一致しません" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "開始日は目標期日より前でなければなりません。" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" -msgstr "" +msgstr "指定の会社と住所が一致しません" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "ご注文内容(任意)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "この注文のプロジェクトコードを選択してください。" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "外部ページへのリンク" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "開始日" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "本注文の開始予定日" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "終了日に達したら" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "お届け予定日この期日を過ぎますと延滞となります。" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "発行日" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "オーダー発行日" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "この注文を担当するユーザーまたはグループ" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "本注文に関する連絡先" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "本注文の会社住所" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "注文参照" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "ステータス" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "発注状況" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "注文元の会社" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "サプライヤー・リファレンス" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "サプライヤー注文参照コード" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "受信" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "注文完了日" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "目的地" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "入荷商品のお届け先" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "部品サプライヤーは、POサプライヤーと一致する必要があります。" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "品目が発注書と一致しません" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" -msgstr "" +msgstr "行項目にリンクされた部品が不足しています" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "数量は正の数でなければなりません。" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "顧客" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "販売先" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "販売注文状況" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "お客様リファレンス" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "顧客注文参照コード" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "出荷日" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "出荷元" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "注文はすでに完了しています。" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "注文はすでにキャンセルされました" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "未完了の注文にのみ完了マークを付けることができます。" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "出荷に不備があるため、注文を完了できません。" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "割り当てに不備があるため、注文を完了できません。" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "不完全な項目があるため、注文を完了できません。" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "注文はロックされ、変更できません。" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "品目数量" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "行項目参照" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "項目" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "この行項目の目標期日(注文の目標期日を使用する場合は空白のままにしてください。)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "行項目の説明(オプション)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "この行の補足説明" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "単価" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "発注書項目" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "サプライヤーの部品はサプライヤーと一致しなければなりません。" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" -msgstr "" +msgstr "ビルドオーダーは外部としてマークする必要があります" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" -msgstr "" +msgstr "ビルドオーダーはアセンブリ部品にのみリンクできます" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" -msgstr "" +msgstr "ビルドオーダーの部品は、ラインアイテムの部品と一致する必要があります。" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "サプライヤー" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "受信" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "受領品目数" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "購入金額" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "購入単価" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" -msgstr "" +msgstr "本品目により完成する外部ビルドオーダー" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "発注書追加行" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "販売注文明細" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "販売可能な部品のみを販売オーダーに割り当てることができます。" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "セール価格" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "販売単価" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "発送済み" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "出荷数量" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "販売注文の出荷" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" -msgstr "" +msgstr "配送先住所はお客様と一致している必要があります" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" -msgstr "" +msgstr "こちらの発送先住所" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "出荷日" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "配達日" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "貨物の引渡日" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "チェック済み" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "この貨物をチェックしたユーザー" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "発送" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "出荷番号" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "追跡番号" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "貨物追跡情報" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "請求書番号" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "関連する請求書の参照番号" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "発送済み" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "出荷品目に割り当てられた在庫がありません" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" -msgstr "" +msgstr "出荷は完了前に必ず確認が必要となります" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "セールスオーダー追加ライン" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "販売注文の割り当て" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "在庫アイテムが割り当てられていません" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "在庫品を別部品のラインに割り当てることはできません。" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "部品のないラインに在庫を割り当てることはできません。" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "割当数量が在庫数量を超えることはできません" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "割当数量はゼロより大きくなければなりません" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "シリアル化された在庫品の場合、数量は1でなければなりません。" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "販売注文と出荷が一致しません" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "出荷が販売注文と一致しません" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "ライン" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "販売注文の出荷参照" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "アイテム" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "割り当てるストックアイテムを選択" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "在庫割当数量の入力" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "リターンオーダー参照" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "返品元の会社" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "返品状況" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "返品注文項目" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "在庫品の指定が必要です。" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "返品数量が在庫数量を超える場合" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "返品数量はゼロより大きくなければなりません。" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "シリアル化されたストックアイテムの数量が無効です。" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "お客様から返品する商品を選択" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "受領日" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "この返品商品が届いた日付" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "転帰" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "この項目の成果" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "この品目の返品または修理に関連する費用" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "リターンオーダー追加ライン" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "注文ID" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "複製する注文のID" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "コピーライン" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "元の注文から行項目をコピー" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "余分な行をコピー" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "元の注文から余分な項目をコピー" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "コピーパラメータ" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "ラインアイテム" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "完成路線" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "重複した注文" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "この注文を複製するためのオプションを指定します。" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "無効なオーダーID" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "サプライヤー名" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "ご注文のキャンセルはできません。" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "未完了の行項目で注文を閉じることができます。" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "注文に不備がある場合" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "ご注文は受け付けておりません。" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "自動車価格" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "サプライヤーの部品データに基づいて購入価格を自動計算" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "購入価格通貨" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "アイテムのマージ" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "同じ品目、同じ仕向け地、同じ日付の品目を1つの品目に統合します。" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "内部部品番号" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "内部部品名" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "サプライヤー部品の指定が必要" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "注文書の指定が必要" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "サプライヤーは発注書と一致しなければなりません。" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "発注書はサプライヤーと一致している必要があります。" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "明細" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "受取商品の配送先選択" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "入荷在庫品のバッチコード入力" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有効期限" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "入荷在庫の有効期限の入力" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "入荷した在庫品のシリアル番号の入力" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "入荷在庫品の包装情報の上書き" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "在庫品の入荷に関する注意事項" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "バーコード" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "スキャンされたバーコード" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "バーコードはすでに使用されています" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "項目は必ずご記入ください。" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "デスティネーション・ロケーションを指定する必要があります。" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "バーコードの値は一意でなければなりません。" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "発送" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "完了した出荷" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "販売価格通貨" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "割当項目" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "出荷の詳細は記載されていません" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "ラインアイテムは、この注文に関連付けられていません。" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "数量は正数でなければなりません。" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "割り当てるシリアル番号を入力" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "出荷済み" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "この注文には出荷が関連付けられていません" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "以下のシリアル番号に該当するものは見つかりませんでした。" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "以下のシリアル番号はご利用いただけません。" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "返品注文項目" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "ラインアイテムが返品オーダーと一致しません" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "ラインアイテムはすでに受領済み" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "商品の受け取りは、進行中の注文に対してのみ可能です。" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "返品数量" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "ライン価格通貨" @@ -5532,1177 +5613,1229 @@ msgstr "返金" msgid "Reject" msgstr "拒否" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "期限切れ発注書" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "発注書{po}は現在期限切れです" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "期限切れ販売注文" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "セールスオーダー{so}は現在期限切れです。" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "期限切れ返品注文" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "リターンオーダー{ro}は現在期限切れです" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "スター付き" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "星の数で絞り込む" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "深さ" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "カテゴリの深さでフィルタリング" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "最多メンバーレベル" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "トップレベルカテゴリーによるフィルタリング" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "カスケード表示" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "フィルタリング結果にサブカテゴリーを含めることができます。" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "親" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "親カテゴリーによる絞り込み" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "指定したカテゴリの下にあるサブカテゴリを除外します。" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "実績あり" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "バリエーション?" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "改訂版" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "改定あり" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "BOM有効" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" -msgstr "" +msgstr "カスケードカテゴリ" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" -msgstr "" +msgstr "もし該当する場合には、指定されたカテゴリの子カテゴリ内のアイテムを含めてください。" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" +msgstr "数値カテゴリIDまたはリテラル'null'でフィルタリングしてください" + +#: part/api.py:1280 +msgid "Assembly part is active" msgstr "" -#: part/api.py:1258 +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "組み立て部分はテスト可能" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "コンポーネント部分はテスト可能" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "用途" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "パーツカテゴリ" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "パーツカテゴリ" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "デフォルトの場所" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "このカテゴリの部品のデフォルトの場所" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "構造に関するパターン" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "部品は構造カテゴリーに直接割り当てることはできませんが、子カテゴリーに割り当てることはできます。" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "デフォルトキーワード" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "このカテゴリの部品のデフォルトキーワード" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "アイコン" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "アイコン (オプション)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "いくつかの部品がすでに割り当てられているため、この部品カテゴリを構造化することはできません!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "部品分類パラメータテンプレート" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "初期値" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "パラメータのデフォルト値" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "パーツ" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" -msgstr "" +msgstr "ロックされた部品のパラメータは削除できません" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" -msgstr "" +msgstr "ロックされた部品のパラメータを変更することはできません" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "この部分はロックされているため削除できません" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "このパートはまだアクティブなので削除できません。" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "この部品はアセンブリで使用されているため、削除できません。" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "パート'{self}'は'{parent}'(再帰的)のBOMでは使用できません。" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "パート'{parent}'は'{self}'のBOMで使用(再帰的)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPNは正規表現パターン{pattern}に一致しなければなりません。" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "パートはそれ自体の改訂にはなりえません" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "すでにリビジョンとなっている部分のリビジョンを作成することはできません。" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "リビジョンコードの指定が必要" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "修正が許されるのは組立部品のみ" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "テンプレート部品のリビジョンを作成できません" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "親部品は同じテンプレートを指す必要があります。" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "このシリアル番号の在庫品はすでに存在します" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "パート設定でIPNの重複が許可されていません。" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "重複する部品リビジョンが既に存在します。" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "この名前、IPN、リビジョンを持つ部品は既に存在します。" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "部品を構造部品のカテゴリーに割り当てることはできません!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "部品名" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "テンプレート" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "この部品はテンプレート部品ですか?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "この部品は他の部品の変形ですか?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "変種" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "部品の説明(オプション)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "キーワード" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "検索結果での視認性を向上させる部分キーワード" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "パーツカテゴリ" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "即時支払通知" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "部品のリビジョンまたはバージョン番号" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "リビジョン" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "この部品は他の部品の改訂版ですか?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "改訂版" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "この商品は通常どこに保管されていますか?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "デフォルト・サプライヤー" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "サプライヤーのデフォルト部品" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "デフォルトの有効期限" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "この部品の在庫品の有効期限(日単位" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "最小在庫" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "最低許容在庫量" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "この部品の単位" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "この部品は他の部品から作ることができますか?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "この部品を使って他の部品を作ることはできますか?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "このパーツはユニークなアイテムの追跡が可能ですか?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "この部品にテスト結果を記録することはできますか?" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "この部品は外部のサプライヤーから購入できますか?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "この部品は顧客に販売できますか?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "この部分はアクティブですか?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "ロックされた部分は編集できません" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "これは、ソフトウェア製品やライセンスなどの仮想部品ですか?" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" -msgstr "" +msgstr "部品表の検証が完了しました" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" -msgstr "" +msgstr "こちらの部品の部品表(BOM)は有効でしょうか?" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "BOMチェックサム" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "保存されたBOMのチェックサム" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "BOMチェック済み" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "BOMチェック日" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "作成ユーザー" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "この部分の責任者" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "複数販売" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "価格計算のキャッシュに使用される通貨" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "最小BOMコスト" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "構成部品の最低コスト" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "最大BOMコスト" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "構成部品の最大コスト" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "最低購入価格" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "過去の最低購入価額" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "最大購入費用" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "過去の最高購入価格" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "最低社内価格" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "社内価格ブレークに基づく最低コスト" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "社内最高価格" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "社内価格ブレークに基づく最大コスト" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "最低供給価格" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "外部サプライヤーからの部品の最低価格" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "サプライヤー最高価格" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "外部サプライヤーからの部品の最高価格" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "最小バリアントコスト" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "バリアントパーツの最小コストの計算" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "最大バリアントコスト" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "バリアント部品の最大コストの計算" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "最低料金" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "最低コストのオーバーライド" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "最大コスト" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "最大コストのオーバーライド" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "総合的な最小コストの計算" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "総合最大コストの計算" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "最低販売価格" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "価格破壊に基づく最低販売価格" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "最高販売価格" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "価格破壊に基づく最高販売価格" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "最低販売価格" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "過去の最低売却価格" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "最大販売価格" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "過去の最高売却価格" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "ストックテイク用部品" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "個数" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "棚卸時の個別在庫数" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "ストックテイク時の在庫可能量" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "日付" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "ストックテイク実施日" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "最低在庫コスト" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "手元在庫の最低見積原価" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "最大在庫コスト" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "手元在庫の最大見積原価" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "パーツセール価格" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "部品試験テンプレート" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "無効なテンプレート名 - 英数字を1文字以上含む必要があります。" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "テストテンプレートは、テスト可能な部分に対してのみ作成できます。" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "同じキーを持つテスト・テンプレートがパートに既に存在します。" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "試験名" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "テストの名前を入力します。" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "テストキー" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "テストの簡易キー" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "試験内容" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "このテストの説明を入力してください。" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "このテストは有効ですか?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "必須" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "このテストは合格するために必要ですか?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "価値が必要" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "このテストは、テスト結果を追加する際に値を必要としますか?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "アタッチメントが必要" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "この試験では、試験結果を追加する際にファイルの添付が必要ですか。" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "このテストで有効な選択肢(カンマ区切り)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOMアイテムは変更できません - アセンブリがロックされています。" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM アイテムは変更できません - バリアントアセンブリがロックされています。" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "親部品を選択" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "サブパート" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "BOMで使用する部品を選択" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "このBOMアイテムのBOM数量" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "この部品表はオプションです。" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "このBOMアイテムは消耗品です。" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" -msgstr "" +msgstr "設定数量" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" -msgstr "" +msgstr "ビルドに必要な追加の必要量(セットアップ時の損失を考慮した分)" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" -msgstr "" +msgstr "歩留まり損失" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" -msgstr "" +msgstr "ビルドにおける推定歩留まり率(0~100%で表されます)" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" -msgstr "" +msgstr "丸め倍数" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" -msgstr "" +msgstr "必要な生産数量を、この値の倍数に切り上げてください。" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "BOMアイテムリファレンス" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "BOMアイテムノート" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "チェックサムi" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "BOMラインのチェックサム" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "検証済み" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "このBOMアイテムは検証済みです" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "継承" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "この BOM アイテムは、バリアントパーツの BOM に継承されます。" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "このBOMアイテムには、バリアントパーツのストックアイテムを使用できます。" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "数量は追跡可能な部品の場合、整数値でなければなりません。" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "サブパーツの指定が必要" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "BOMアイテム代替" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "代用部品はマスター部品と同じにすることはできません。" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "親BOMアイテム" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "代用部品" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "パート #1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "パート #2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "関連部品を選択" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "この関係について" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "部品とそれ自身との間に部品関係を作ることはできません。" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "重複する関係が既に存在します。" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "親カテゴリ" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "親部品カテゴリー" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "サブカテゴリ" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "結果" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "このテンプレートに対して記録された結果の数" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "この在庫商品の購入通貨" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "ファイルが画像ではありません" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "オリジナルパート" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "複製する元の部品を選択" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "コピー画像" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "元の部分から画像をコピー" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "コピーBOM" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "元の部品から部品表をコピー" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "コピーパラメータ" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "元の部品からパラメータデータをコピー" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "コピーノート" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "元のパートからメモをコピー" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" -msgstr "" +msgstr "コピーテスト" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" -msgstr "" +msgstr "元の部品からテスト用テンプレートをコピーしてください" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "初期在庫量" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "この部品の初期在庫数量を指定します。数量が0の場合、在庫は追加されません。" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "初期在庫場所" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "この部品の初期在庫場所を指定してください。" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "サプライヤーを選択してください。" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "メーカーを選択してください。" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "メーカー品番" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "選択された企業は有効なサプライヤーではありません。" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "選択された会社は有効な製造業者ではありません。" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "このMPNに一致するメーカー部品はすでに存在します。" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "このSKUに一致するサプライヤー部品は既に存在します。" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "カテゴリ名" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "建物" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" -msgstr "" +msgstr "現在生産中の当該部品の数量" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" -msgstr "" +msgstr "この部品の予定生産数量" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "在庫商品" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "リビジョン" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "仕入先" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "総在庫" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "未割当株式" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "バリアントストック" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "重複部分" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "別のパートから初期データをコピー" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "初期在庫" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "初期在庫数で部品を作成" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "サプライヤー情報" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "この部品の初期サプライヤー情報を追加します。" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "コピーカテゴリパラメータ" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "選択したパーツカテゴリーからパラメータテンプレートをコピー" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "既存イメージ" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "既存の部品画像のファイル名" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "画像ファイルが存在しません" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "部品表全体の検証" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "ビルド" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" -msgstr "" +msgstr "ビルドオーダーに必要なもの" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" -msgstr "" +msgstr "ビルドオーダーに割り当てられました" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" -msgstr "" +msgstr "セールスオーダーに必要なもの" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" +msgstr "セールスオーダーに割り当てられました" + +#: part/serializers.py:1260 +msgid "Part IPN" msgstr "" -#: part/serializers.py:1340 +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "最小価格" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "最低価格の計算値の上書き" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "最低価格通貨" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "最大価格" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "最高価格の計算値を上書き" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "最高価格通貨" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "更新" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "この部品の価格を更新" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "提供された通貨から{default_currency}に変換できませんでした。" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "最低価格は最高価格を超えてはなりません。" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "最高価格は最低価格を下回ってはなりません。" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "親アセンブリを選択" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "構成部品の選択" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "BOMをコピーする部品を選択します。" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "既存データの削除" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "コピー前に既存のBOMアイテムを削除" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "インクルード継承" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "テンプレート化された部品から継承されたBOM項目を含めます。" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "無効な行をスキップ" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "無効な行をスキップするには、このオプションを有効にします。" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "コピー代用部品" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOMアイテムの重複時に代替部品をコピー" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "在庫不足通知" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "{part.name}の在庫が設定された最低レベルを下回りました。" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" -msgstr "" +msgstr "在庫切れ通知" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" -msgstr "" +msgstr "在庫品1点について、有効期限が近づいています。" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" -msgstr "" +msgstr "在庫品のうち、{item_count}点の商品がまもなく期限切れとなります。" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" -msgstr "" +msgstr "有効期限なし" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" -msgstr "" +msgstr "期限切れ {abs(days_diff)} 日前" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" -msgstr "" +msgstr "本日が期限となります" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" -msgstr "" +msgstr "{days_until_expiry} 日" #: plugin/api.py:80 msgid "Builtin" @@ -6732,108 +6865,108 @@ msgstr "アクションが指定されていません" msgid "No matching action found" msgstr "一致するアクションが見つかりませんでした" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "バーコードデータが見つかりません" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "バーコードデータとの一致が確認されました。" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "モデルはサポートされていません" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "モデルインスタンスが見つかりません" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "バーコードが既存のアイテムと一致" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "一致する部品データが見つかりません" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "一致するサプライヤー部品は見つかりませんでした" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "一致するサプライヤー部品が複数見つかりました" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "バーコードデータに一致するプラグインは見つかりませんでした" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "適合部品" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "商品はすでに受領済みです。" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "サプライヤーのバーコードに一致するプラグインがない" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "複数の一致する行項目が見つかりました" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "該当する項目が見つかりません" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "販売注文はありません" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "バーコードが既存の在庫品と一致しません" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "在庫品目が行品目と一致しません" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "在庫不足" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "販売注文に割り当てられた在庫品目" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "情報が不足しています" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "一致するアイテムが見つかりました" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "サプライヤーの部品が品目と一致しない" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "ライン・アイテムはすでに完了している" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "ライン・アイテムを受け取るために必要な詳細情報" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "受領済み発注書項目" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "ラインアイテムの受信に失敗" @@ -6972,7 +7105,7 @@ msgstr "バーコードのネイティブサポートを提供" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7016,165 +7149,165 @@ msgstr "複数のInvenTreeインスタンスがある環境で便利です。" #: plugin/builtin/events/auto_create_builds.py:28 msgid "Auto Create Builds" -msgstr "" +msgstr "自動ビルド作成" #: plugin/builtin/events/auto_create_builds.py:31 msgid "Automatically create build orders for assemblies" -msgstr "" +msgstr "アセンブリのビルドオーダーを自動的に作成します" #: plugin/builtin/events/auto_issue_orders.py:17 msgid "Auto Issue Orders" -msgstr "" +msgstr "自動発行オーダー" #: plugin/builtin/events/auto_issue_orders.py:20 msgid "Automatically issue orders on the assigned target date" -msgstr "" +msgstr "指定された目標日に自動的にオーダーを発行します" #: plugin/builtin/events/auto_issue_orders.py:30 msgid "Auto Issue Build Orders" -msgstr "" +msgstr "自動発行ビルドオーダー" #: plugin/builtin/events/auto_issue_orders.py:32 msgid "Automatically issue build orders on the assigned target date" -msgstr "" +msgstr "割り当てられた目標日に、自動的にビルドオーダーを発行します。" #: plugin/builtin/events/auto_issue_orders.py:38 msgid "Auto Issue Purchase Orders" -msgstr "" +msgstr "自動発行発注書" #: plugin/builtin/events/auto_issue_orders.py:40 msgid "Automatically issue purchase orders on the assigned target date" -msgstr "" +msgstr "割り当てられた目標日に、自動的に発注書を発行します。" #: plugin/builtin/events/auto_issue_orders.py:46 msgid "Auto Issue Sales Orders" -msgstr "" +msgstr "自動発行セールスオーダー" #: plugin/builtin/events/auto_issue_orders.py:48 msgid "Automatically issue sales orders on the assigned target date" -msgstr "" +msgstr "割り当てられた目標日に、自動的にセールスオーダーを発行します。" #: plugin/builtin/events/auto_issue_orders.py:54 msgid "Auto Issue Return Orders" -msgstr "" +msgstr "自動発行返品オーダー" #: plugin/builtin/events/auto_issue_orders.py:56 msgid "Automatically issue return orders on the assigned target date" -msgstr "" +msgstr "割り当てられた目標日に、自動的に返品オーダーを発行します。" #: plugin/builtin/events/auto_issue_orders.py:62 msgid "Issue Backdated Orders" -msgstr "" +msgstr "過去日付でのオーダー発行" #: plugin/builtin/events/auto_issue_orders.py:63 msgid "Automatically issue orders that are backdated" -msgstr "" +msgstr "過去日付のオーダーを自動的に発行します" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "レベル" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" -msgstr "" - -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 -msgid "Total Quantity" -msgstr "" +msgstr "エクスポートするレベル数 - すべてのBOMレベルをエクスポートするにはゼロに設定してください" #: plugin/builtin/exporter/bom_exporter.py:31 -msgid "Include total quantity of each part in the BOM" -msgstr "" +#: plugin/builtin/exporter/bom_exporter.py:118 +msgid "Total Quantity" +msgstr "総量" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:32 +msgid "Include total quantity of each part in the BOM" +msgstr "BOMには、各部品の総数量を含めてください" + +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "在庫データ" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "部品在庫データを含む" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "価格データ" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "部品価格データを含む" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "サプライヤーデータ" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "サプライヤーデータを含む" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "メーカーデータ" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "メーカーデータを含む" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "代替データ" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "代替部品データを含む" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "パラメータデータ" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "部品パラメータデータを含む" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "マルチレベルBOMエクスポート" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "マルチレベルBOMのエクスポートをサポートします。" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "BOMレベル" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "代替{n}" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "サプライヤー {n}" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "サプライヤー {n} SKU" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "サプライヤー {n} MPN" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "メーカー {n}" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "メーカー {n} MPN" @@ -7189,95 +7322,95 @@ msgstr "InvenTreeからのデータエクスポートをサポートします。 #: plugin/builtin/exporter/parameter_exporter.py:16 msgid "Exclude Inactive" -msgstr "" +msgstr "非アクティブを除外する" #: plugin/builtin/exporter/parameter_exporter.py:17 msgid "Exclude parameters which are inactive" -msgstr "" +msgstr "非アクティブなパラメータを除外します" #: plugin/builtin/exporter/parameter_exporter.py:29 msgid "Parameter Exporter" -msgstr "" +msgstr "パラメータエクスポーター" #: plugin/builtin/exporter/parameter_exporter.py:30 msgid "Exporter for model parameter data" -msgstr "" +msgstr "モデルパラメータデータ用エクスポーター" #: plugin/builtin/exporter/stocktake_exporter.py:25 msgid "Include External Stock" -msgstr "" +msgstr "外部在庫を含める" #: plugin/builtin/exporter/stocktake_exporter.py:26 msgid "Include external stock in the stocktake data" -msgstr "" +msgstr "棚卸データに外部在庫を含めてください" #: plugin/builtin/exporter/stocktake_exporter.py:31 msgid "Include Variant Items" -msgstr "" +msgstr "バリエーション品目を含める" #: plugin/builtin/exporter/stocktake_exporter.py:32 msgid "Include part variant stock in pricing calculations" -msgstr "" +msgstr "価格計算に部品のバリエーション在庫を含める" #: plugin/builtin/exporter/stocktake_exporter.py:44 msgid "Part Stocktake Exporter" -msgstr "" +msgstr "部品在庫棚卸データ用エクスポーター" #: plugin/builtin/exporter/stocktake_exporter.py:45 msgid "Exporter for part stocktake data" -msgstr "" +msgstr "部品在庫棚卸データ用エクスポーター" #: plugin/builtin/exporter/stocktake_exporter.py:108 msgid "Minimum Unit Cost" -msgstr "" +msgstr "最小単位コスト" #: plugin/builtin/exporter/stocktake_exporter.py:109 msgid "Maximum Unit Cost" -msgstr "" +msgstr "最大単位コスト" #: plugin/builtin/exporter/stocktake_exporter.py:110 msgid "Minimum Total Cost" -msgstr "" +msgstr "最低総費用" #: plugin/builtin/exporter/stocktake_exporter.py:111 msgid "Maximum Total Cost" -msgstr "" +msgstr "最大総費用" #: plugin/builtin/integration/core_notifications.py:23 msgid "InvenTree UI Notifications" -msgstr "" +msgstr "InvenTree UI 通知" #: plugin/builtin/integration/core_notifications.py:26 msgid "Integrated UI notification methods" -msgstr "" +msgstr "統合されたUI通知方法" #: plugin/builtin/integration/core_notifications.py:67 msgid "InvenTree Email Notifications" -msgstr "" +msgstr "InvenTree メール通知" #: plugin/builtin/integration/core_notifications.py:70 msgid "Integrated email notification methods" -msgstr "" +msgstr "統合されたメール通知方法" #: plugin/builtin/integration/core_notifications.py:75 msgid "Allow email notifications" -msgstr "" +msgstr "メール通知を許可します" #: plugin/builtin/integration/core_notifications.py:76 msgid "Allow email notifications to be sent to this user" -msgstr "" +msgstr "このユーザーへのメール通知を許可します" #: plugin/builtin/integration/core_notifications.py:123 msgid "InvenTree Slack Notifications" -msgstr "" +msgstr "InvenTree Slack通知" #: plugin/builtin/integration/core_notifications.py:126 msgid "Integrated Slack notification methods" -msgstr "" +msgstr "統合されたSlack通知方法" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "Slack受信ウェブフックURL" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7297,11 +7430,11 @@ msgstr "デフォルトの為替統合" #: plugin/builtin/integration/machine_types.py:15 msgid "InvenTree Machines" -msgstr "" +msgstr "InvenTree マシーンズ" #: plugin/builtin/integration/machine_types.py:16 msgid "Built-in machine types for InvenTree" -msgstr "" +msgstr "InvenTreeの組み込みマシンタイプ" #: plugin/builtin/integration/part_notifications.py:20 msgid "Part Notifications" @@ -7354,11 +7487,11 @@ msgstr "ラベルプリンター" msgid "Provides support for printing using a machine" msgstr "機械による印刷をサポートします。" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "最終使用" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "オプション" @@ -7392,11 +7525,11 @@ msgstr "ラベルシートを横向きに印刷" #: plugin/builtin/labels/label_sheet.py:55 msgid "Page Margin" -msgstr "" +msgstr "ページ余白" #: plugin/builtin/labels/label_sheet.py:56 msgid "Margin around the page in mm" -msgstr "" +msgstr "ページの周囲の余白(単位:mm)" #: plugin/builtin/labels/label_sheet.py:69 msgid "InvenTree Label Sheet Printer" @@ -7501,15 +7634,15 @@ msgstr "プラグインがアクティブなため、アンインストールで #: plugin/installer.py:347 msgid "Plugin cannot be uninstalled as it is mandatory" -msgstr "" +msgstr "このプラグインは必須のため、アンインストールすることはできません。" #: plugin/installer.py:352 msgid "Plugin cannot be uninstalled as it is a sample plugin" -msgstr "" +msgstr "このプラグインはサンプルプラグインのため、アンインストールすることはできません。" #: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is a built-in plugin" -msgstr "" +msgstr "プラグインは組み込みプラグインのため、アンインストールすることはできません。" #: plugin/installer.py:361 msgid "Plugin is not installed" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "プラグインのキー" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "プラグインのプラグイン名" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,48 +7704,48 @@ msgstr "パッケージプラグイン" msgid "Plugin" msgstr "プラグイン" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "著者は見つかりませんでした" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "プラグイン'{p}'は現在のInvenTreeバージョン{v}と互換性がありません。" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "プラグインには少なくともバージョン {v} が必要です。" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "プラグインに必要なバージョンは最大で{v}です。" #: plugin/samples/integration/sample.py:52 msgid "User Setting 1" -msgstr "" +msgstr "ユーザー設定1" #: plugin/samples/integration/sample.py:53 msgid "A user setting that can be changed by the user" -msgstr "" +msgstr "ユーザーが変更可能なユーザー設定" #: plugin/samples/integration/sample.py:57 msgid "User Setting 2" -msgstr "" +msgstr "ユーザー設定2" #: plugin/samples/integration/sample.py:58 msgid "Another user setting" -msgstr "" +msgstr "別のユーザー設定" #: plugin/samples/integration/sample.py:63 msgid "User Setting 3" -msgstr "" +msgstr "ユーザー設定3" #: plugin/samples/integration/sample.py:64 msgid "A user setting with choices" -msgstr "" +msgstr "ユーザー設定(選択肢付き)" #: plugin/samples/integration/sample.py:72 msgid "Enable PO" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "設置未確認" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "URL のパッケージ名のどちらかを指定する必要があります。" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -7800,7 +7933,7 @@ msgstr "このプラグインを有効化します" #: plugin/serializers.py:243 msgid "Mandatory plugin cannot be deactivated" -msgstr "" +msgstr "必須プラグインは無効化できません" #: plugin/serializers.py:261 msgid "Delete configuration" @@ -7812,7 +7945,7 @@ msgstr "データベースからプラグイン設定を削除します" #: plugin/serializers.py:293 msgid "The user for which this setting applies" -msgstr "" +msgstr "この設定が適用されるユーザー" #: report/api.py:44 report/serializers.py:102 report/serializers.py:152 msgid "Items" @@ -7912,11 +8045,11 @@ msgstr "レポートを横向きにレンダリング" #: report/models.py:393 msgid "Merge" -msgstr "" +msgstr "統合" #: report/models.py:394 msgid "Render a single report against selected items" -msgstr "" +msgstr "選択された項目に対して単一のレポートを生成します" #: report/models.py:449 #, python-brace-format @@ -7925,11 +8058,11 @@ msgstr "テンプレート{self.name}から生成されたレポート" #: report/models.py:546 report/models.py:585 report/models.py:586 msgid "Template syntax error" -msgstr "" +msgstr "テンプレートの構文エラー" #: report/models.py:553 report/models.py:592 msgid "Error rendering report" -msgstr "" +msgstr "レポートの表示にエラーが発生しました" #: report/models.py:612 msgid "Error generating report" @@ -7937,7 +8070,7 @@ msgstr "レポート生成エラー" #: report/models.py:644 msgid "Error merging report outputs" -msgstr "" +msgstr "レポート出力の統合エラー" #: report/models.py:676 msgid "Width [mm]" @@ -8051,7 +8184,7 @@ msgstr "サプライヤーが削除されました" #: report/templates/report/inventree_purchase_order_report.html:22 msgid "Order Details" -msgstr "" +msgstr "ご注文の詳細" #: report/templates/report/inventree_purchase_order_report.html:37 #: report/templates/report/inventree_sales_order_report.html:30 @@ -8072,7 +8205,7 @@ msgstr "合計" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "シリアル番号" @@ -8097,7 +8230,7 @@ msgstr "在庫品テストレポート" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "設置項目" @@ -8130,495 +8263,519 @@ msgstr "結果なし(必須)" msgid "No result" msgstr "何も結果はありません" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "アセットファイルが存在しません" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "画像ファイルが見つかりません" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "part_image タグには Part インスタンスが必要です。" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "company_image タグには Company インスタンスが必要です。" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "場所の深さによる絞り込み" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "トップレベルのロケーションによるフィルタリング" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "フィルタリング結果にサブロケーションを含めることができます。" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "親の位置" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "親の所在地でフィルタリング" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "部品名(大文字・小文字を区別しません)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "パート名に含まれるもの(大文字・小文字を区別しません)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "部品名(正規表現)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "パートIPN(大文字と小文字を区別しません)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "パートIPNに含まれるもの(大文字と小文字は区別されません)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "パートIPN(正規表現)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "最小在庫" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "最大在庫" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "ステータスコード" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "外部ロケーション" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "ビルド・オーダーで消費" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "その他在庫品に装着" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "パートツリー" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "更新前" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "更新後" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "ストックテイク前" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "ストックテイク後" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "有効期限" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "有効期限" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "期限失効" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" -msgstr "" +msgstr "そのアイテムおよびそのすべての子孫を除外するためのStockItemのプライマリキーをご提供ください。" + +#: stock/api.py:980 +msgid "Cascade Locations" +msgstr "カスケードの所在地" #: stock/api.py:981 -msgid "Cascade Locations" -msgstr "" - -#: stock/api.py:982 msgid "If true, include items in child locations of the given location" -msgstr "" +msgstr "もし真であれば、指定された場所の子要素に含まれる項目を含めます" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" -msgstr "" +msgstr "数値のロケーションID、またはリテラル文字列の「null」でフィルタリングしてください。" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "数量が必要です" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "有効な部品を供給する必要があります。" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "指定されたサプライヤの部品が存在しません。" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "サプライヤー部品にはパックサイズが定義されていますが、use_pack_sizeフラグが設定されていません。" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "追跡不可能な部品については、シリアル番号は提供できません。" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" -msgstr "" +msgstr "組み込み済みを含める" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" -msgstr "" +msgstr "もし真であれば、指定した在庫アイテムの中に組み込まれている構成部品のテスト結果を含める" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" -msgstr "" +msgstr "数値による在庫品IDでの絞り込み" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" +msgstr "ID {id} の在庫品は存在しません" + +#: stock/api.py:1516 +msgid "Include Part Variants" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "在庫ロケーションタイプ" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "ストックロケーションの種類" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "アイコンが設定されていないすべての場所のデフォルトアイコン (オプション)" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "ストックロケーション" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "在庫場所" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "所有者" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "所有者を選択" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "ストックアイテムは、構造的なストックロケーションに直接配置されることはありませんが、子ロケーションに配置されることはあります。" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "外部" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "これは外部の在庫場所です。" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "ロケーションタイプ" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "このロケーションのロケーションタイプ" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "いくつかのストックアイテムがすでにストックロケーションに配置されているため、このストックロケーションを構造化することはできません!" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" -msgstr "" +msgstr "{field}は存在しません" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "部品の指定が必要" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "在庫品は、構造的な在庫場所に配置することはできません!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "仮想部品にストックアイテムを作成できません" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "パートタイプ('{self.supplier_part.part}')は{self.part}でなければなりません。" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "シリアル番号のある商品は数量が1でなければなりません。" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "数量が1以上の場合、シリアル番号は設定できません。" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "アイテムはそれ自身に属することはできません" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "is_building=Trueの場合、アイテムはビルド・リファレンスを持っていなければならない。" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "ビルド参照が同じ部品オブジェクトを指していません。" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "親株式" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "ベース部" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "この在庫品に一致するサプライヤー部品を選択してください" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "この在庫品はどこにありますか?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "この在庫品は以下の梱包で保管されています。" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "設置場所" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "このアイテムは他のアイテムにインストールされていますか?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "この商品のシリアル番号" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "このストックアイテムのバッチコード" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "在庫数" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "ソースビルド" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "このストックアイテムのビルド" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "消費者" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "このストックアイテムを消費したビルドオーダー" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "発注元" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "この在庫商品の購入注文" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "販売先オーダー" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "在庫品の有効期限。この日を過ぎると在庫は期限切れとなります。" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "枯渇時に削除" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "在庫がなくなったら、このストックアイテムを削除します。" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "購入時の単品購入価格" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "パートに変換" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" -msgstr "" +msgstr "数量が在庫数を超えています" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "部品が追跡可能に設定されていません" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "数量は整数でなければなりません。" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "数量は在庫数 ({self.quantity}) を超えてはなりません。" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "シリアル番号はリストとして提供されなければなりません" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "数量がシリアル番号と一致しません" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" -msgstr "" +msgstr "構造上ロケーションに在庫を割り当てることはできません" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "テストテンプレートが存在しません" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "在庫商品が販売注文に割り当てられました" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "ストックアイテムが他のアイテムに装着されている場合" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "在庫商品には他の商品が含まれています。" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "在庫商品が顧客に割り当てられました" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "在庫品は現在生産中です。" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "連番在庫の統合はできません" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "在庫品の重複" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "在庫品目は同じ部品を参照してください。" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "在庫品は同じサプライヤーの部品を参照する必要があります。" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "在庫状況コードが一致していること" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "在庫がないため移動できません。" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "ストックアイテムのトラッキング" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "記入上の注意" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "在庫品テスト結果" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "このテストには値を指定する必要があります。" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "このテストには添付ファイルをアップロードする必要があります。" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "このテストでは無効な値です。" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "試験結果" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "テスト出力値" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "試験結果添付" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "テストノート" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "テストステーション" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "試験が実施された試験ステーションの識別子。" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "開始" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "テスト開始のタイムスタンプ" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "修了済み" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "テスト終了のタイムスタンプ" @@ -8662,246 +8819,246 @@ msgstr "シリアル番号を生成する部品を選択します。" msgid "Quantity of serial numbers to generate" msgstr "生成するシリアル番号の数" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "この結果のテストテンプレート" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" -msgstr "" +msgstr "この部品に該当するテストが見つかりませんでした" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "テンプレートIDまたはテスト名が必要です。" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "試験終了時刻を試験開始時刻より早くすることはできません。" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "親アイテム" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "親株式" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "数量はパック数です。" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" -msgstr "" +msgstr "パッケージサイズを使用" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "新しい商品のシリアル番号の入力" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "サプライヤー品番" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "期限切れ" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "子供用品" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "追跡項目" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "この在庫品の購入価格、単位またはパックあたり" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "シリアル化するストックアイテムの数を入力" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" -msgstr "" +msgstr "在庫品目がしていされていません" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "数量は在庫数 ({q}) を超えてはなりません。" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "仕向け地" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "この部品にシリアル番号を割り当てることはできません" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "シリアル番号が既に存在します" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "インストールするストックアイテムを選択" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "設置数量" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "インストールするアイテムの数量を入力してください。" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "取引メモの追加(オプション)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "設置数量は1台以上" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "在庫がありません" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "選択した部品が部品表にない" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "設置する数量は、利用可能な数量を超えてはなりません。" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "アンインストール先の場所" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "在庫品を変換する部品を選択" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "選択された部分は、変換のための有効なオプションではありません。" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "SupplierPartが割り当てられている在庫品を変換できません。" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "在庫商品ステータスコード" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "ステータスを変更するストックアイテムを選択" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "ストックアイテムが選択されていません" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "サブロケーション" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "親株式所在地" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "パーツは販売可能でなければなりません" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "商品が販売オーダーに割り当てられています。" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "アイテムがビルドオーダーに割り当てられています。" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "在庫アイテムを割り当てるお客様" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "選択された企業は顧客ではありません" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "株式譲渡に関する注意事項" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "在庫品のリストが必要です。" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "株式併合に関する注意事項" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "不一致のサプライヤーを許可" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "異なるサプライヤの部品を持つ在庫品目をマージできるようにします。" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "不一致の状態を許可" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "異なるステータスコードを持つストックアイテムをマージすることができます。" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "少なくとも2つのストックアイテムを提供する必要があります。" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "変化なし" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "StockItem 主キー値" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "在庫がありません" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" -msgstr "" +msgstr "在庫品目は既に在庫にあります" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" -msgstr "" +msgstr "数量は負の数であってはなりません。" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "株式取引に関する注記" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" -msgstr "" +msgstr "既存の在庫に統合します" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" -msgstr "" +msgstr "可能なら、返品された商品を既存の在庫商品に統合してください" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "次のシリアル番号" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "以前のシリアル番号" @@ -8959,11 +9116,11 @@ msgstr "手動在庫削除が完了しました" #: stock/status_codes.py:56 msgid "Serialized stock items" -msgstr "" +msgstr "シリアル番号管理の在庫品目" #: stock/status_codes.py:58 msgid "Returned to stock" -msgstr "" +msgstr "在庫に戻りました" #: stock/status_codes.py:61 msgid "Location changed" @@ -9108,12 +9265,12 @@ msgstr "保留中のデータベース移行があり、注意が必要です。 #: templates/config_error.html:6 templates/config_error.html:10 msgid "Configuration Error" -msgstr "" +msgstr "設定エラー" #: templates/config_error.html:11 #, python-format msgid "The %(inventree_title)s server raised a configuration error" -msgstr "" +msgstr "%(inventree_title)sサーバーで設定エラーが発生しました" #: templates/email/build_order_completed.html:9 #: templates/email/canceled_order_assigned.html:9 @@ -9169,15 +9326,15 @@ msgstr "この部品またはその部品の一部であるカテゴリの通知 #: templates/email/stale_stock_notification.html:10 msgid "The following stock items are approaching their expiry dates:" -msgstr "" +msgstr "以下の在庫品目は、まもなく有効期限が切れます:" #: templates/email/stale_stock_notification.html:23 msgid "Days Until Expiry" -msgstr "" +msgstr "有効期限までの日数" #: templates/email/stale_stock_notification.html:57 msgid "You are receiving this email because you are subscribed to notifications for these parts" -msgstr "" +msgstr "このメールを受け取ったのは、これらの部品に関する通知を購読しているためです" #: users/admin.py:101 msgid "Users" @@ -9383,83 +9540,83 @@ msgstr "セールスオーダー" msgid "Return Orders" msgstr "返品注文" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "ユーザー名" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "名" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "ユーザーの名" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "姓" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "ユーザーの姓" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "ユーザーのメールアドレス" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "スタッフ" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "このユーザーにはスタッフ権限がありますか?" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "スーパーユーザー" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "このユーザーはスーパーユーザーですか?" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "このユーザーアカウントはアクティブですか" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "このフィールドを調整できるのはスーパーユーザーのみです。" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" -msgstr "" +msgstr "パスワード" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" -msgstr "" +msgstr "ユーザーのパスワード" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" -msgstr "" +msgstr "警告を上書きします" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" -msgstr "" +msgstr "パスワードルールに関する警告を無効にする" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "ユーザーを作成する権限がありません" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "アカウントが作成されました" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "パスワードリセット機能を使ってログインしてください" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "InvenTreeへようこそ" diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po index 8e9847afca..6fa8d9204a 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "이 모델을 볼 수 있는 권한이 없습니다." -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "이메일 (다시 입력)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "이메일 주소 확인" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "" -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "" @@ -112,13 +104,13 @@ msgstr "날짜 입력" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "메모" @@ -131,75 +123,75 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "연결 오류" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "이미지 크기가 너무 큽니다!" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +199,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "이메일" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "이름" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "설명" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "설명 (선택 사항)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "바코드 데이터" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "서버 오류" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "유효하지 않은 값" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "중국어 (간체)" msgid "Chinese (Traditional)" msgstr "중국어 (번체)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "분류" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "나에게 할당 됨" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "최소 날짜" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "최대 날짜" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "소모품" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "선택사항" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "수량" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "시리얼 번호 (일련번호)" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po index c166ce8cbe..e000d68fa7 100644 --- a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Language: lt_LT\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API galinis taškas nerastas" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Masiniam veiksmui turi būti pateiktas elementų arba filtrų sąrašas" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Elementai turi būti pateikti kaip sąrašas" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Pateiktas neteisingas elementų sąrašas" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "\"Filtrai turi būti pateikti kaip žodynas" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Pateikti neteisingi filtrai" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Filtras „all“ gali būti naudojamas tik su reikšme „true“" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Nė vienas elementas neatitinka pateiktų kriterijų" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Vartotojas neturi teisių peržiūrėti šio modelio" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "El. paštas (pakartotinai)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "El. pašto adreso patvirtinimas" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Kiekvieną kartą turite įvesti tą patį el. pašto adresą." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Pateiktas pagrindinis el. pašto adresas neteisingas." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Pateiktas el. pašto domenas nepatvirtintas." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nepavyko konvertuoti {original} į {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Pateiktas neteisingas kiekis" @@ -112,13 +104,13 @@ msgstr "Įveskite datą" msgid "Invalid decimal value" msgstr "Neteisinga dešimtainė reikšmė" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Pastabos" @@ -131,75 +123,75 @@ msgstr "Reikšmė „{name}“ neatitinka šablono formato" msgid "Provided value does not match required pattern: " msgstr "Pateikta reikšmė neatitinka reikalaujamo šablono: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Negalima iš karto susieti daugiau nei 1000 elementų" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Nepateiktas serijos numeris" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Pasikartojantis serijinis numeris" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Neteisinga grupė: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Grupės {group} kiekis viršija leistiną kiekį ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Serijos numerių nerasta" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Pašalinkite HTML žymes iš šios reikšmės" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Duomenyse yra draudžiamo „markdown“ turinio" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Ryšio klaida" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Serveris grąžino netinkamą būsenos kodą" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Įvyko išimtis" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Serveris grąžino neteisingą „Content-Length“ reikšmę" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Paveikslėlio dydis per didelis" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Paveikslėlio atsisiuntimas viršijo maksimalų leistiną dydį" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Nutolęs serveris grąžino tuščią atsakymą" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Nurodytas URL nėra tinkamas paveikslėlio failas" @@ -207,11 +199,11 @@ msgstr "Nurodytas URL nėra tinkamas paveikslėlio failas" msgid "Log in to the app" msgstr "Prisijungti prie programos" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "El. paštas" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Prieš atliekant bet kokius veiksmus, privalote įjungti dviejų veiksnių autentifikavimą." @@ -255,133 +247,124 @@ msgstr "Nuoroda turi atitikti reikalaujamą šabloną" msgid "Reference number is too large" msgstr "Nuorodos numeris per didelis" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Neteisingas pasirinkimas" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Pavadinimas" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Aprašymas" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Aprašymas (neprivalomas)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Kelias" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Po tuo pačiu pirminiu elementu negali būti pasikartojančių pavadinimų" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Pastabos su „Markdown“ (neprivalomas)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Brūkšninio kodo duomenys" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Trečiosios šalies brūkšninio kodo duomenys" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Brūkšninio kodo maiša" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Unikali brūkšninio kodo duomenų maiša\"" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Rastas esamas brūkšninis kodas" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Užduoties klaida" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Foninė užduotis '{f}' nepavyko po {n} bandymų" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serverio klaida" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Serveris užfiksavo klaidą." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Paveikslėlis" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Turi būti teisingas skaičius" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Valiuta" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Pasirinkite valiutą iš galimų variantų" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Neteisinga reikšmė" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Nutolęs paveikslėlis" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "Nutolusio paveikslėlio failo URL" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Paveikslėlių atsisiuntimas iš nutolusio URL neįjungtas" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Nepavyko atsisiųsti paveikslėlio iš nutolusio URL" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Kinų (supaprastinta)" msgid "Chinese (Traditional)" msgstr "Kinų (tradicinė)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "Neteisingas fizinis vienetas" msgid "Not a valid currency code" msgstr "Netinkamas valiutos kodas" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Užsakymo būsena" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Pirminė gamyba" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Įtraukti variantus" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Įtraukti variantus" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Įtraukti variantus" msgid "Part" msgstr "Detalė" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategorija" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Ankstesnė gamyba" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Priskirta man" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Priskirta" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Sukurta prieš" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Sukurta po" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Turi pradžios datą" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Pradžios data prieš" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Pradžios data po" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Turi tikslinę datą" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Tikslinė data prieš" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Tikslinė data po" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Užbaigta prieš" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Užbaigta po" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "Minimali data" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "Maksimali data" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Neįtraukti medžio struktūros" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Prieš ištrinant gamybą, ji turi būti atšaukta" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Sunaudojama" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Pasirinktinai" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Surinkimas" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Sekama" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Testuojama" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Liko neįvykdytų užsakymų" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Priskirta" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Prieinama" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Užsakyta" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Gamybos užsakymas" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Vieta" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Gamybos užsakymai" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Surinkimo BOM nėra patvirtintas" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Negalima sukurti gamybos užsakymo neaktyviai detalei" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Negalima sukurti gamybos užsakymo atrakintai detalei" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Turi būti nurodytas atsakingas vartotojas arba grupė" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Gamybos užsakymo detalės keisti negalima" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Tikslinė data turi būti po pradžios datos" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Gamybos užsakymo nuoroda" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Gamybos užsakymo nuoroda" msgid "Reference" msgstr "Nuoroda" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Trumpas gamybos aprašymas (neprivalomas)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Gamybos užsakymas, kuriam ši gamyba priskirta" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Pasirinkite detalę gamybai" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Pardavimo užsakymo nuoroda" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Pardavimo užsakymas, kuriam ši gamyba priskirta" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Šaltinio vieta" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Pasirinkite vietą atsargoms paimti šiai gamybai (palikite tuščią, jei tinka bet kuri vieta)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Paskirties vieta" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Pasirinkite vietą, kur bus laikomos užbaigtos prekės" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Gamybos kiekis" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Atsargų kiekis, kurias reikia pagaminti" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Užbaigtos prekės" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Užbaigtų atsargų elementų skaičius" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Gamybos būsena" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Gamybos būsenos kodas" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Partijos kodas" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Šios gamybos partijos kodas" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Sukūrimo data" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "Gamybos pradžios data" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Planuojama šio gamybos užsakymo pradžios data" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Tikslinė užbaigimo data" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Planuojama gamybos pabaigos data. Po šios datos gamyba bus pavėluota." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Užbaigimo data" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "Užbaigė" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Išdavė" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Vartotojas, kuris išdavė šį gamybos užsakymą" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Atsakingas" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Vartotojas ar grupė, atsakinga už šį gamybos užsakymą" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Išorinė nuoroda" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Nuoroda į išorinį URL" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Gamybos prioritetas" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Šio gamybos užsakymo prioritetas" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Projekto kodas" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Šio gamybos užsakymo projekto kodas" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Nepavyko perduoti užduoties, kad būtų atlikti gamybos paskirstymai" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Gamybos užsakymas {build} užbaigtas" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Gamybos užsakymas užbaigtas" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Sekamoms detalėms būtina nurodyti serijos numerius" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nepateiktas gamybos rezultatas" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Gamybos rezultatas jau užbaigtas" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Gamybos rezultatas neatitinka gamybos užsakymo" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Kiekis turi būti didesnis nei nulis" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Kiekis negali viršyti rezultato kiekio" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Gamybos rezultatas {serial} nepraėjo visų privalomų testų" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Gamybos užsakymo eilutės įrašas" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Gamybos objektas" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Gamybos objektas" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Kiekis" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Reikalingas kiekis gamybos užsakymui" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Gamybos elementas turi nurodyti rezultatą, nes pagrindinė detalė pažymėta kaip sekama" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "Pasirinktas atsargų elementas neatitinka BOM eilutės" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Atsargoms su serijos numeriais kiekis turi būti 1" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Priskirtas kiekis ({q}) negali viršyti galimo atsargų kiekio ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Atsargų elementas per daug paskirstytas" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Priskirtas kiekis turi būti didesnis nei nulis" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Atsargoms su serijos numeriais kiekis turi būti 1" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "Pasirinktas atsargų elementas neatitinka BOM eilutės" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Atsargų elementas" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Šaltinio atsargų elementas" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Atsargų kiekis, skirtas paskirstyti į gamybą" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Įdiegti į" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Paskirties atsargų elementas" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Gamybos lygis" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Detalės pavadinimas" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Projekto kodo etiketė" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Gamybos rezultatas" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Gamybos rezultatas neatitinka pirminės gamybos" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Rezultato detalė neatitinka gamybos užsakymo detalės" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Šis gamybos rezultatas jau užbaigtas" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Šis gamybos rezultatas nėra visiškai paskirstytas" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Įveskite kiekį gamybos rezultatui" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Sekamoms detalėms reikalingas sveikasis kiekis" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Reikalingas sveikasis kiekis, nes komplektavimo žiniaraštyje yra sekamų detalių" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Serijos numeriai" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Įveskite serijos numerius gamybos rezultatams" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Atsargų vieta gamybos rezultatams" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Automatiškai priskirti serijos numerius" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatiškai priskirti reikalingas prekes su atitinkančiais serijos numeriais" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Šie serijos numeriai jau egzistuoja arba yra neteisingi" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Turi būti pateiktas gamybos rezultatų sąrašas" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Atsargų vieta brokuotiems rezultatams" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Atmesti priskyrimus" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Atmesti visus atsargų priskyrimus brokuotiems rezultatams" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Priežastis, dėl kurios gamybos rezultatas(-ai) buvo nurašytas(-i)" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Vieta, kur laikomi užbaigti gamybos rezultatai" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Priimti nepilną priskyrimą" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Užbaigti rezultatus, net jei atsargos dar nėra pilnai priskirtos" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Sunaudoti priskirtas atsargas" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Sunaudoti bet kokias šiai gamybai jau priskirtas atsargas" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Pašalinti nebaigtus rezultatus" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Ištrinti visus nebaigtus gamybos rezultatus" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Neleidžiama" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Priimti kaip sunaudotą šio gamybos užsakymo metu" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Panaikinkite priskyrimus prieš užbaigiant šį gamybos užsakymą" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Per daug paskirstytos atsargos" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Kaip norite elgtis su papildomai šiam gamybos užsakymui priskirtomis atsargomis" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Kai kurios atsargos paskirstytos per daug" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Priimti nepriskirtą" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Priimti, kad atsargos nebuvo visiškai priskirtos šiam gamybos užsakymui" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Reikalingos atsargos nėra visiškai priskirtos" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Priimti nepilną" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Priimti, kad ne visi reikalingi gamybos rezultatai buvo užbaigti" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Reikalingas gamybos kiekis nebuvo užbaigtas" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Gamybos užsakymas turi nebaigtų antrinių gamybų" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Gamybos užsakymas turi būti gamybos būsenoje" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Gamybos užsakymas turi nebaigtų rezultatų" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Gamybos eilutė" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Gamybos rezultatas" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Gamybos rezultatas turi būti susietas su ta pačia gamyba" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Gamybos eilutės įrašas" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part turi būti ta pati detalė kaip ir gamybos užsakyme" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "Prekė turi būti atsargose" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Viršytas prieinamas kiekis ({q})" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Sekamų detalių priskyrymui turi būti nurodytas gamybos rezultatas" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Negalima nurodyti gamybos rezultato nesekamoms detalėms" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Turi būti pateikti paskirstymo elementai" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Atsargų vieta, iš kurios bus imamos detalės (palikite tuščią, jei tinka bet kuri vieta)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Neįtraukti vietos" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Neįtraukti atsargų iš šios pasirinktos vietos" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Keičiamos atsargos" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Atsargos iš skirtingų vietų gali būti naudojamos pakaitomis" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Pakaitinės atsargos" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Leisti priskirti pakaitines detales" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Pasirenkami elementai" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Priskirti papildomus BOM elementus gamybos užsakymui" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Nepavyko paleisti automatinio paskirstymo užduoties" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "BOM nuoroda" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "BOM detalės ID" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "BOM detalės pavadinimas" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Gamyba" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Tiekėjo detalė" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Priskirtas kiekis" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Gamybos nuoroda" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Detalės kategorijos pavadinimas" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Sekama" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Paveldėta" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Leisti variantus" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "BOM elementas" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Gamyboje" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Išorinės atsargos" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Prieinamos atsargos" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Prieinamos pakaitinės atsargos" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Prieinamos variantų atsargos" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "Sulaikyta" msgid "Cancelled" msgstr "Atšaukta" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Užbaigta" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Atsargos, reikalingos gamybos užsakymui" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Vėluojantis gamybos užsakymas" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Gamybos užsakymas {bo} dabar vėluoja" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "Yra nuoroda" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "Yra failas" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Vartotojas neturi teisės ištrinti šių priedų" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Vartotojas neturi teisės ištrinti šio priedo" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Netinkamas valiutos kodas" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Pasikartojantis valiutos kodas" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Nepateikta jokių galiojančių valiutos kodų" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Nėra papildinio" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Projekto kodo etiketė" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Atnaujinta" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Paskutinio atnaujinimo laiko žymė" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Unikalus projekto kodas" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Projekto aprašymas" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Vartotojas arba grupė, atsakinga už šį projektą" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Nustatymo raktas" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Nustatymo reikšmė" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Pasirinkta reikšmė yra netinkama" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Reikšmė turi būti loginė (taip/ne)" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Reikšmė turi būti sveikasis skaičius" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "Reikšmė turi būti tinkamas skaičius" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "Reikšmė neatitinka patikros taisyklių" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Raktas turi būti unikalus" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Vartotojas" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Kiekio ribinis taškas kainai" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Kaina" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Vieneto kaina nurodytam kiekiui" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Galutinis taškas" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Galutinis taškas, kuriuo priimamas šis webhook'as" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Šio webhook'o pavadinimas" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktyvus" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Ar šis webhook'as aktyvus" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Raktas" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Prieigos raktas" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Slaptas raktas" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Bendras slaptas HMAC raktas" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "Pranešimo ID" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Unikalus pranešimo identifikatorius" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Pagrindinis serveris" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Serveris, iš kurio gautas pranešimas" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Antraštė" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Šio pranešimo antraštė" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Turinys" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Šio pranešimo turinys" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Galutinis taškas, kuriame gautas pranešimas" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Apdorota" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Ar darbas su šiuo pranešimu baigtas?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "ID" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Pavadinimas" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Nuoroda" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Paskelbta" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Autorius" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Santrauka" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Perskaityta" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Ar ši naujiena buvo perskaityta?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Paveikslėlio failas" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "Modelio tipas, kuriam priskiriamas šis paveikslėlis" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "Modelio ID, kuriam priskiriamas šis paveikslėlis" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Pasirinktinis vienetas" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "Vieneto simbolis turi būti unikalus" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Vieneto pavadinimas turi būti tinkamas identifikatorius" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Vieneto pavadinimas" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Simbolis" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Nebūtinas vieneto simbolis" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Apibrėžimas" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Vieneto apibrėžimas" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Priedas" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Trūksta failo" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Trūksta išorinės nuorodos" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Modelio tipas" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "Modelio tipas, kuriam skirtas paveikslėlis" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Pasirinkite failą priedui" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Komentaras" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Komentaras prie priedo" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Įkėlimo data" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Failo įkėlimo data" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Failo dydis" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Failo dydis baitais" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Netinkamas modelio tipas priedui" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "Pasirinktinė būsena" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "Pasirinktinės būsenos" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "Nuorodos būsenų rinkinys" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "Būsenų rinkinys, papildomas šia pasirinktine būsena" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Loginis raktas" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "Loginis būsenos raktas, atitinkantis šią pasirinkitinę būseną" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Reikšmė" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "Skaitinė reikšmė, saugoma modelio duomenų bazėje" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Būsenos pavadinimas" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Etiketė" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Etiketė, rodoma vartotojo sąsajoje" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Spalva" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Spalva, rodoma vartotojo sąsajoje" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Modelis" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "Modelis, su kuriuo susieta būsena" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "Turi būti pasirinktas modelis" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "Turi būti pasirinktas raktas" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "Turi būti pasirinktas loginis raktas" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "Raktas turi skirtis nuo loginio rakto" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "Turi būti pateikta tinkama nuorodos būsenos klasė" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "Raktas turi skirtis nuo nuorodos būsenų loginių raktų" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "Loginis raktas turi būti tarp nuorodos būsenų loginių raktų" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "Pavadinimas turi skirtis nuo nuorodos būsenų pavadinimų" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Pasirinkimų sąrašas" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Pasirinkimų sąrašai" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Pasirinkimų sąrašo pavadinimas" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Pasirinkimų sąrašo aprašymas" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Užrakinta" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "Ar šis sąrašas užrakintas?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "Ar šį pasirinkimų sąrašą galima naudoti?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Šaltinio papildinys" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Papildinys, pateikiantis šį pasirinkimų sąrašą" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Šaltinio eilutė" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Neprivaloma eilutė, identifikuojanti šaltinį, naudotą šiam sąrašui" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Numatytasis įrašas" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Numatytasis šio pasirinkimų sąrašo įrašas" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Sukurta" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Data ir laikas, kada buvo sukurtas pasirinkimų sąrašas" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Paskutinį kartą atnaujinta" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "Data ir laikas, kada paskutinį kartą buvo atnaujintas sąrašas" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Pasirinkimų sąrašo įrašas" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Pasirinkimų sąrašo įrašai" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Pasirinkimų sąrašas, kuriam priklauso šis įrašas" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Pasirinkimų sąrašo įrašo reikšmė" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Pasirinkimų įrašo etiketė" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Pasirinkimų įrašo aprašymas" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "Ar šis sąrašo įrašas aktyvus?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Parametro šablonas" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "Žymimojo laukelio parametrai negali turėti matavimo vienetų" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "Žymimojo laukelio parametrai negali turėti pasirinkimų" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "Pasirinkimai turi būti unikalūs" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "Parametro šablono pavadinimas turi būti unikalus" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Parametro pavadinimas" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Vienetai" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Fiziniai šio parametro vienetai" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Parametro aprašymas" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Žymimasis laukelis" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Ar šis parametras yra žymimasis laukelis?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Pasirinkimai" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Galimi pasirinkimai šiam parametrui (atskirti kableliais)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "Pasirinkimų sąrašas šiam parametrui" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Įjungta" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Neteisingas pasirinkimas parametro reikšmei" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Šablonas" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Data" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Parametro reikšmė" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Pastaba" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Neprivalomas pastabų laukas" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Brūkšninio kodo nuskaitymas" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Brūkšninio kodo duomenys" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Vartotojas, nuskaitęs brūkšninį kodą" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Laiko žymė" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Brūkšninio kodo nuskaitymo data ir laikas" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "URL galutinis taškas, kuris apdorojo brūkšninį kodą" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Kontekstas" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Konteksto duomenys brūkšninio kodo nuskaitymui" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Atsakas" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Atsako duomenys iš brūkšninio kodo nuskaitymo" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Rezultatas" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "Ar brūkšninio kodo nuskaitymas buvo sėkmingas?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Raktas" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} atšaukta" msgid "A order that is assigned to you was canceled" msgstr "Užsakymas, kuris buvo jums priskirtas, buvo atšauktas" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Gautos prekės" @@ -2351,93 +2359,101 @@ msgstr "Prekės buvo gautos pagal pirkimo užsakymą" msgid "Items have been received against a return order" msgstr "Prekės buvo gautos pagal grąžinimo užsakymą" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "Nurodo, ar nustatymą pakeičia aplinkos kintamasis" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "Nepaisyti" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Vykdoma" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Laukiančios užduotys" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Suplanuotos užduotys" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Nepavykusios užduotys" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "Užduoties ID" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Unikalus užduoties ID" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Užraktas" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Užrakto laikas" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Užduoties pavadinimas" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Funkcija" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Funkcijos pavadinimas" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumentai" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Užduoties argumentai" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Rakto argumentai" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Užduoties rakto argumentai" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Failo pavadinimas" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Modelio tipas" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Vartotojas neturi leidimo kurti ar redaguoti šio modelio priedų" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Pasirinkimų sąrašas yra užrakintas" @@ -2445,1128 +2461,1157 @@ msgstr "Pasirinkimų sąrašas yra užrakintas" msgid "No group" msgstr "Nėra grupės" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "Svetainės URL yra užrakintas konfigūracijoje" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Reikalingas paleidimas iš naujo" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Nustatymas buvo pakeistas ir reikia paleisti serverį iš naujo" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Laukiančios migracijos" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Laukiančių duomenų bazės migracijų skaičius" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "Egzemplioriaus ID" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "Unikalus identifikatorius šiam InvenTree egzemplioriui" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "Pranešimo ID" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Skelbti serverio egzemplioriaus ID serverio būsenos informacijoje (neprisijungus)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Serverio egzemplioriaus pavadinimas" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Serverio egzemplioriaus pavadinimas kaip eilutė" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Naudoti egzemplioriaus pavadinimą" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Naudoti egzemplioriaus pavadinimą antraštės juostoje" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Apriboti `apie` rodymą" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "`Apie` langą rodyti tik super-vartotojams" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Įmonės pavadinimas" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Vidinis įmonės pavadinimas" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "Pagrindinis URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "Pagrindinis URL šiam serverio egzemplioriui" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Numatytoji valiuta" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Pasirinkti pagrindinę valiutą kainų skaičiavimui" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Palaikomos valiutos" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Palaikomų valiutų kodų sąrašas" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Valiutų atnaujinimo intervalas" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Kaip dažnai atnaujinti valiutų kursus (nulis – išjungti)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "dienos" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Valiutų atnaujinimo papildinys" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Naudotinas valiutų atnaujinimo papildinys" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Atsisiųsti iš URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Leisti atsisiųsti išorinius paveikslėlius ir failus iš nuorodų" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Atsisiuntimo dydžio riba" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Didžiausias leistinas atsisiunčiamo paveikslėlio dydis" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "Naudojamas user-agent atsisiuntimui iš URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Leisti pakeisti user-agent, naudojamą atsisiunčiant paveikslėlius ir failus iš išorinio URL (palikite tuščią, jei naudoti numatytąjį)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Griežtas URL tikrinimas" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Reikalauti schemos nurodymo tikrinant URL" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Atnaujinimų tikrinimo intervalas" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Kaip dažnai tikrinti atnaujinimus (nulis – išjungti)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Automatinė atsarginė kopija" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Įjungti automatinį duomenų bazės ir failų atsarginį kopijavimą" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Automatinio atsarginės kopijos kūrimo intervalas" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Nurodykite dienų skaičių tarp atsarginių kopijų kūrimo" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Užduočių ištrynimo intervalas" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Foninių užduočių rezultatai bus ištrinti po nurodyto dienų skaičiaus" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Klaidų žurnalo ištrynimo intervalas" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Klaidų žurnalai bus ištrinti po nurodyto dienų skaičiaus" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Pranešimų ištrynimo intervalas" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Vartotojų pranešimai bus ištrinti po nurodyto dienų skaičiaus" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Brūkšninių kodų palaikymas" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Įjungti brūkšninių kodų skaitytuvo palaikymą žiniatinklio sąsajoje" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "Išsaugoti brūkšninių kodų nuskaitymus" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "Brūkšninių kodų nuskaitymo rezultatus išsaugoti duomenų bazėje" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "Maksimalus nuskaitymų skaičius" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "Maksimalus saugomų brūkšninių kodų nuskaitymų skaičius" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Brūkšninio kodo įvesties delsimas" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Brūkšninio kodo įvesties apdorojimo delsos laikas" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Brūkšninių kodų palaikymas per kamerą" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Leisti brūkšninių kodų nuskaitymą per naršyklės kamerą" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "Rodyti brūkšninio kodo duomenis" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Rodyti brūkšninio kodo duomenis naršyklėje kaip tekstą" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Brūkšninio kodo generavimo papildinys" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Papildinys vidiniam brūkšninių kodų generavimui" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Detalių versijos" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Įjungti versijos lauką detalėms" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "Tik surinkimo versijoms" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "Leisti versijas tik surenkamoms detalėms" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Leisti pašalinti iš surinkimo" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Leisti ištrinti detales, kurios yra naudojamos surinkimuose" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "IPN reguliarioji išraiška" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguliariosios išraiškos šablonas detalių IPN tikrinimui" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Leisti pasikartojančius IPN" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Leisti kelioms detalėms turėti tą patį IPN" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Leisti redaguoti IPN" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Leisti keisti IPN reikšmę redaguojant detalę" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Kopijuoti detalės BOM duomenis" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopijuoti BOM duomenis pagal nutylėjimą dubliuojant detalę" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Kopijuoti detalės parametrus" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopijuoti parametrų duomenis pagal nutylėjimą dubliuojant detalę" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Kopijuoti detalės testavimo duomenis" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Kopijuoti testavimo duomenis pagal nutylėjimą dubliuojant detalę" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Kopijuoti kategorijų parametrų šablonus" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Kopijuoti kategorijų parametrų šablonus kuriant detalę" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Detalės pagal nutylėjimą yra šablonai" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Detalės pagal nutylėjimą gali būti surenkamos iš kitų komponentų" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponentas" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Detalės pagal nutylėjimą gali būti naudojamos kaip sub-komponentai" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Galima įsigyti" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Detalės pagal nutylėjimą gali būti įsigyjamos" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Parduodama" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Detalės pagal nutylėjimą gali būti parduodamos" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Detalės pagal nutylėjimą gali būti sekamos" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtuali" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Detalės pagal nutylėjimą yra virtualios" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Rodyti susijusias detales" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Rodyti susijusias detales pasirinktai detalei" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Pradiniai atsargų duomenys" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Leisti sukurti pradinę atsargą pridedant naują detalę" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Pradiniai tiekėjo duomenys" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Leisti sukurti pradinius tiekėjo duomenis pridedant naują detalę" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Detalės pavadinimo rodymo formatas" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Detalės pavadinimo rodymo formatas" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Detalės kategorijos numatytoji piktograma" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Detalės kategorijos numatytoji piktograma (tuščia reiškia, kad nenaudojama)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Mažiausias kainos dešimtainių skaičių kiekis" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimalus dešimtainių skaitmenų skaičius rodomas kainodaros duomenyse" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Didžiausias kainos dešimtainių skaičių kiekis" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Didžiausias dešimtainių skaitmenų skaičius rodomas kainodaros duomenyse" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Naudoti tiekėjo kainas" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Įtraukti tiekėjų kainų lygius į bendrą kainodaros skaičiavimą" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Pirkimų istorija keičia kainas" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Istorinės pirkimo kainos pakeičia tiekėjo kainų lygius" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Naudoti atsargų kainas" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Naudoti kainas iš rankiniu būdu įvestų atsargų duomenų kainodaros skaičiavimui" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Atsargų kainų galiojimo trukmė" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Pašalinti senesnes nei nurodytas dienų skaičius atsargas iš kainodaros skaičiavimų" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Naudoti variantų kainas" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Įtraukti variantų kainas į bendrą kainodaros skaičiavimą" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Tik aktyvūs variantai" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Naudoti tik aktyvius detalių variantus kainodarai" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Kainodaros atnaujinimo intervalas" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Dienų skaičius iki automatinio detalių kainų atnaujinimo" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Vidinės kainos" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Įjungti vidines kainas detalėms" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Vidinės kainos viršenybė" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Jei yra, vidinės kainos pakeičia bendrus kainodaros skaičiavimus" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Įjungti etikečių spausdinimą" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Įjungti etikečių spausdinimą iš žiniatinklio sąsajos" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "Etiketės vaizdo DPI" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI raiška generuojant vaizdus etikečių spausdinimo papildiniams" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Įjungti ataskaitas" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Įjungti ataskaitų generavimą" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Derinimo režimas" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Generuoti ataskaitas derinimo režimu (HTML išvestis)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Registruoti ataskaitų klaidas" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Registruoti klaidas, įvykusias generuojant ataskaitas" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Puslapio dydis" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Numatytasis PDF ataskaitų puslapio dydis" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Reikalauti parametrų vienetų" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Jei nurodyti vienetai, parametro reikšmės turi atitikti nurodytus vienetus" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Globaliai unikalūs serijiniai numeriai" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Atsargų serijos numeriai turi būti globaliai unikalūs" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Ištrinti išnaudotas atsargas" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Nustato numatytą elgseną, kai atsargos yra išnaudotos" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Partijos kodo šablonas" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Šablonas numatytiesiems atsargų partijos kodams generuoti" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Atsargų galiojimas" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Įjungti atsargų galiojimo funkcionalumą" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Parduoti pasibaigusias galioti atsargas" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Leisti parduoti pasibaigusias galioti atsargas" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Atsargų senėjimo laikas" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Dienų skaičius, po kurio atsargos laikomos pasenusiomis iki jų galiojimo pabaigos" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Naudoti pasibaigusias galioti atsargas gamyboje" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Leisti naudoti pasibaigusias galioti atsargas gamyboje" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Atsargų nuosavybės kontrolė" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Įjungti atsargų vietų ir vienetų nuosavybės kontrolę" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Atsargų vietos numatytoji piktograma" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Atsargų vietos numatytoji piktograma (tuščia reiškia nenaudojama)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Rodyti sumontuotas atsargas" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Rodyti sumontuotas atsargas atsargų lentelėse" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Tikrinti BOM montuojant atsargas" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Sumontuotos atsargos turi būti pirminio gaminio BOM" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Leisti perkelti neturimas atsargas" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Leisti perkelti atsargas tarp vietų net jei jų nėra atsargose" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Gamybos užsakymo nuorodos šablonas" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Privalomas šablonas gamybos užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Reikalauti atsakingo savininko" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Kiekvienam užsakymui turi būti priskirtas atsakingas savininkas" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "Reikalauti aktyvios detalės" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "Neleidžia kurti gamybos užsakymų neaktyvioms detalėms" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Reikalauti užrakintos detalės" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "Neleidžia kurti gamybos užsakymų neužrakintoms detalėms" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "Reikalauti galiojančio komplektavimo sąrašo (BOM)" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "Neleidžia kurti gamybos užsakymų, kol BOM nėra patvirtintas" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "Reikalauti uždarytų antrinių užsakymų" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "Neleidžia užbaigti gamybos užsakymo, kol visi antriniai užsakymai neuždaryti" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Blokuoti, kol testai bus išlaikyti" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Neleidžia užbaigti gaminių, kol visi privalomi testai nėra išlaikyti" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Įjungti grąžinimo užsakymus" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Įjungia grąžinimo užsakymų funkciją vartotojo sąsajoje" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Grąžinimo užsakymo nuorodos šablonas" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Būtinas šablonas grąžinimo užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Redaguoti užbaigtus grąžinimo užsakymus" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Leisti redaguoti grąžinimo užsakymus po jų užbaigimo" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Pardavimo užsakymo nuorodos šablonas" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Būtinas šablonas pardavimo užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Numatytasis siuntinys pardavimo užsakymui" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Leisti automatiškai sukurti siuntinį kartu su pardavimo užsakymu" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Redaguoti užbaigtus pardavimo užsakymus" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Leisti redaguoti pardavimo užsakymus po jų išsiuntimo arba užbaigimo" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Pažymėti išsiųstus užsakymus kaip užbaigtus" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Pardavimo užsakymai, pažymėti kaip išsiųsti, bus automatiškai užbaigti, praleidžiant būseną „išsiųsta“" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Pirkimo užsakymo nuorodos šablonas" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Būtinas šablonas pirkimo užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Redaguoti užbaigtus pirkimo užsakymus" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Leisti redaguoti pirkimo užsakymus po jų išsiuntimo arba užbaigimo" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "Konvertuoti valiutą" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "Konvertuoti prekių vertę į pagrindinę valiutą priimant prekes" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Automatiškai užbaigti pirkimo užsakymus" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatiškai pažymėti pirkimo užsakymus kaip užbaigtus, kai visos eilutės yra gautos" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Įjungti pamiršto slaptažodžio funkciją" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Leisti naudoti pamiršto slaptažodžio funkciją prisijungimo puslapyje" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Įjungti registraciją" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Leisti vartotojams savarankiškai registruotis prisijungimo puslapyje" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Įjungti vieningą prisijungimą (SSO)" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Įjungti vieningą prisijungimą (SSO) prisijungimo puslapyje" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Įjungti registraciją per SSO" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Leisti vartotojams registruotis per SSO prisijungimo puslapyje" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "Įjungti SSO grupių sinchronizavimą" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Įjungti InvenTree grupių sinchronizavimą su tapatybės tiekėjo (IdP) grupėmis" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "SSO grupės raktas" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Grupių atributo pavadinimas, kurį pateikia tapatybės tiekėjas (IdP)" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "SSO grupių susiejimas" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "SSO grupių susiejimas su vietinėmis InvenTree grupėmis. Jei vietinė grupė neegzistuoja, ji bus sukurta." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "Pašalinti grupes, nepriklausančias SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Ar pašalinti vartotojui priskirtas grupes, jei jos nėra pateikiamos per IdP. Išjungus gali kilti saugumo problemų" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "El. paštas privalomas" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Reikalauti vartotojo el. pašto registracijos metu" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Automatiškai užpildyti SSO naudotojų duomenis" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatiškai užpildyti vartotojo informaciją pagal SSO paskyros duomenis" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Įvesti el. paštą du kartus" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Registracijos metu prašyti vartotojų du kartus įvesti el. paštą" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Įvesti slaptažodį du kartus" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Registracijos metu prašyti vartotojų du kartus įvesti slaptažodį" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Leidžiami domenai" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Riboti registraciją tik tam tikriems domenams (atskiriama kableliais, prasideda @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Grupė registruojantis" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupė, į kurią priskiriami nauji vartotojai registracijos metu. Jei įjungta SSO grupių sinchronizacija, ši grupė nustatoma tik tuo atveju, jei grupė negaunama iš IdP." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Reikalauti kelių veiksnių autentifikacijos (MFA)" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Vartotojai privalo naudoti kelių veiksnių apsaugą." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Tikrinti įskiepius paleidimo metu" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Tikrina, ar visi įskiepiai įdiegti paleidžiant – naudoti konteinerių aplinkose" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Tikrinti įskiepių atnaujinimus" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Įjungti periodinius įdiegtų įskiepių atnaujinimų tikrinimus" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Įjungti URL integravimą" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Leisti įskiepiams pridėti URL maršrutus" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Įjungti navigacijos integraciją" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Leisti įskiepiams integruotis į navigaciją" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Įjungti programų integraciją" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Leisti įskiepiams pridėti programas" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Įjungti planavimo integraciją" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Leisti įskiepiams vykdyti suplanuotas užduotis" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Įjungti įvykių integraciją" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Leisti įskiepiams reaguoti į vidinius įvykius" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Įjungti sąsajos integraciją" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Leisti įskiepiams integruotis į vartotojo sąsają" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "Įjungti projektų kodus" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "Įjungti projektų kodų naudojimą projektų sekimui" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Neįtraukti išorinių vietų" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Automatinės inventorizacijos periodas" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "Rodyti pilnus vartotojų vardus" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "Rodyti pilnus vardus vietoj vartotojo vardų" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "Rodyti vartotojų profilius" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" -msgstr "Rodyti vartotojų profilius jų paskyros puslapyje" - #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "Įjungti bandymų stoties duomenis" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" -msgstr "Įjungti bandymų stoties duomenų rinkimą testų rezultatams" +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "Rodyti pilnus vartotojų vardus" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Rodyti pilnus vardus vietoj vartotojo vardų" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "Rodyti vartotojų profilius" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "Rodyti vartotojų profilius jų paskyros puslapyje" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "Įjungti bandymų stoties duomenis" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "Įjungti bandymų stoties duomenų rinkimą testų rezultatams" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "Detalė yra aktyvi" msgid "Manufacturer is Active" msgstr "Gamintojas yra aktyvus" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "Tiekėjo detalė yra aktyvi" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "Vidinė detalė yra aktyvi" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "Tiekėjas yra aktyvus" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Gamintojas" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Įmonė" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "Turi atsargų" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Įmonės" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Įmonės aprašymas" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Įmonės aprašymas" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Tinklalapis" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "Įmonės tinklalapio URL" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Telefono numeris" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Kontaininis telefono numeris" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontaktinis el. pašto adresas" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontaktinis asmuo" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Kontaktinis asmuo" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Nuoroda į išorinę įmonės informaciją" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "Ar ši įmonė aktyvi?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "Yra klientas" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Ar parduodate prekes šiai įmonei?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "Yra tiekėjas" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Ar perkate prekes iš šios įmonės?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Yra gamintojas" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Ar ši įmonė gamina detales?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Numatytoji valiuta, naudojama šiai įmonei" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Adresas" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Adresai" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Pasirinkite įmonę" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Adreso pavadinimas" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Pavadinimas, apibūdinantis adreso įrašą" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Pagrindinis adresas" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Nustatyti kaip pagrindinį adresą" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "1-a eilutė" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Adreso 1-a eilutė" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "2-a eilutė" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Adreso 2-a eilutė" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Pašto kodas" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Miestas / regionas" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Pašto kodas, miestas / regionas" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Valstija / provincija" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Valstija arba provincija" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Šalis" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Adreso šalis" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Kurjerio siuntos pastabos" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Pastabos siuntų kurjeriui" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Vidinės siuntos pastabos" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Siuntimo pastabos vidiniam naudojimui" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Nuoroda į adreso informaciją (išorinė)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Gamintojo detalė" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Pagrindinė detalė" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Pasirinkite detalę" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Pasirinkite gamintoją" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Gamintojo detalės numeris (MPN)" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "Išorinės nuorodos į gamintojo detalės URL" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Gamintojo detalės aprašymas" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Pakuotės vienetai turi atitikti pagrindinės detalės vienetus" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Pakuotės vienetų kiekis turi būti didesnis už nulį" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Susieta gamintojo detalė turi nurodyti tą pačią pagrindinę detalę" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Tiekėjas" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Pasirinkite tiekėją" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Tiekėjo sandėlio numeris (SKU)" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Ar ši tiekėjo detalė aktyvi?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Pasirinkite gamintojo detalę" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "Išorinės nuorodos į tiekėjo detalės URL" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Tiekėjo detalės aprašymas" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "bazinė kaina" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalus mokestis (pvz., sandėliavimo mokestis)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Pakuotė" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Detalės pakuotė" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Pakuotės kiekis" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Bendras kiekis vienoje pakuotėje. Palikite tuščią, jei prekė tiekiama po vieną." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "daugiklis" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Užsakymo daugiklis" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Tiekėjo turimas kiekis" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Prieinamumas atnaujintas" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Paskutinio prieinamumo duomenų atnaujinimo data" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Tiekėjo kainos ribos" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "Grąžina pagrindinio adreso tekstinę išraišką. Ši savybė egzistuoja dėl suderinamumo su ankstesnėmis versijomis." - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Numatytoji valiuta, naudojama šiam tiekėjui" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Įmonės pavadinimas" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "Sandėlyje" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Įvyko klaida eksportuojant duomenis" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "Duomenų eksporto įskiepis grąžino neteisingą duomenų formatą" @@ -4318,119 +4367,119 @@ msgstr "Pateiktas" msgid "Invalid status code" msgstr "Neteisingas būsenos kodas" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Duomenų failas" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "Duomenų failas, kurį reikia importuoti" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Stulpeliai" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "Importavimo sesijos tikslinio modelio tipas" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "Importavimo būsena" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Laukų numatytosios reikšmės" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "Laukų perrašymai" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Laukų filtrai" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "Kai kurie privalomi laukai nėra susieti" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "Šis stulpelis jau yra susietas su duomenų bazės lauku" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "Šis laukas jau yra susietas su duomenų stulpeliu" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "Stulpelių susiejimas turi būti susietas su galiojančia importavimo sesija" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "Stulpelis neegzistuoja duomenų faile" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "Laukas neegzistuoja tiksliniame modelyje" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "Pasirinktas laukas yra tik skaitomas" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Importavimo sesija" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Laukas" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Stulpelis" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Eilutės indeksas" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "Pradiniai eilutės duomenys" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Klaidos" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Galiojantis" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "Etiketės spausdinamų kopijų skaičius" msgid "Connected" msgstr "Prijungta" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Nežinoma" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Užsakymo nuoroda" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "Neįvykdyta" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "Turi projekto kodą" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Sukūrė" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "Sukurta prieš" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Sukurta po" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "Turi pradžios datą" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "Pradžios data prieš" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "Pradžios data po" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "Turi tikslinę datą" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "Tikslinė data prieš" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "Tikslinė data po" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Turi kainodarą" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "Užbaigta prieš" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "Užbaigta po" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Užsakymas" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "Užsakymas įvykdytas" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Vidinė detalė" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Užsakymas laukia vykdymo" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Užbaigta" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "Turi siuntą" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Pirkimo užsakymas" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Pirkimo užsakymas" msgid "Sales Order" msgstr "Pardavimo užsakymas" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Bendra kaina" msgid "Total price for this order" msgstr "Bendra kaina už šį užsakymą" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Užsakymo valiuta" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Užsakymo valiuta (palikite tuščią, jei norite naudoti įmonės numatytąją valiutą)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "Šis užsakymas užrakintas ir negali būti keičiamas" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Kontaktas nesutampa su pasirinkta įmone" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Pradžios data turi būti prieš tikslinę datą" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Užsakymo aprašymas (neprivalomas)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Pasirinkite projekto kodą šiam užsakymui" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Nuoroda į išorinį puslapį" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "Pradžios data" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Numatyta pradžios data šiam užsakymui" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Tikslinė data" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Tikėtina užsakymo pristatymo data. Užsakymas bus vėluojantis po šios datos." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Išdavimo data" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Data, kada užsakymas buvo išduotas" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Vartotojas arba grupė, atsakinga už šį užsakymą" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Kontaktinis asmuo šiam užsakymui" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Įmonės adresas šiam užsakymui" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Užsakymo nuoroda" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Būsena" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Pirkimo užsakymo būsena" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Įmonė, iš kurios užsakomos prekės" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Tiekėjo nuoroda" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Tiekėjo užsakymo nuorodos kodas" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "gavo" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Data, kada užsakymas buvo užbaigtas" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Paskirties vieta" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "Paskirties vieta gautoms prekėms" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Detalių tiekėjas turi atitikti pirkimo užsakymo tiekėją" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Eilutės įrašas neatitinka pirkimo užsakymo" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Kiekis turi būti teigiamas skaičius" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Klientas" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Įmonė, kuriai prekės parduodamos" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "Pardavimo užsakymo būsena" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Kliento nuoroda" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Kliento užsakymo nuorodos kodas" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Siuntos data" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "išsiuntė" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "Užsakymas jau baigtas" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "Užsakymas jau atšauktas" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Tik atviras užsakymas gali būti pažymėtas kaip užbaigtas" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Užsakymas negali būti užbaigtas, nes yra neišsiųstų siuntų" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Užsakymas negali būti užbaigtas, nes yra nepriskirtų prekių" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "Užsakymas negali būti užbaigtas, nes yra neužbaigtų eilučių" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "Užsakymas užrakintas ir negali būti keičiamas" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Prekės kiekis" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Eilutės įrašo nuoroda" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Eilutės įrašo pastabos" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Tikslinė šio eilutės įrašo data (palikite tuščią, jei norite naudoti užsakymo tikslinę datą)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Eilutės įrašo aprašymas (neprivalomas)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Papildomas kontekstas šiai eilutei" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Vieneto kaina" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "Pirkimo užsakymo eilutės įrašas" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "Tiekėjo detalė turi atitikti tiekėją" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Tiekėjo detalė" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Gauta" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Gautų prekių kiekis" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Pirkimo kaina" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Vieneto pirkimo kaina" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "Pirkimo užsakymo papildoma eilutė" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "Pardavimo užsakymo eilutės įrašas" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "Tik parduodamos detalės gali būti priskirtos pardavimo užsakymui" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Pardavimo kaina" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Vieneto pardavimo kaina" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Išsiųsta" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Išsiųstas kiekis" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "Pardavimo užsakymo siunta" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Siuntos data" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Pristatymo data" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Siuntos pristatymo data" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Patikrino" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Vartotojas, patikrinęs šią siuntą" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Siunta" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Siuntos numeris" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Sekimo numeris" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Siuntos sekimo informacija" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Sąskaitos faktūros numeris" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Nuorodos numeris susijusiai sąskaitai faktūrai" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "Siunta jau buvo išsiųsta" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "Siunta neturi priskirtų prekių" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "Pardavimo užsakymo papildoma eilutė" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "Pardavimo užsakymo paskirstymas" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "Prekė nėra priskirta" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "Negalima priskirti prekių eilutei su skirtinga detale" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "Negalima priskirti prekių eilutei, jei joje nėra detalės" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Priskiriamas kiekis negali viršyti atsargų kiekio" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Priskirtas kiekis turi būti didesnis nei nulis" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "Kiekis turi būti 1, jei prekė turi serijos numerį" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "Pardavimo užsakymas nesutampa su siunta" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Siunta nesutampa su pardavimo užsakymu" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Eilutė" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Pardavimo užsakymo siuntos nuoroda" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Prekė" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Pasirinkite atsargų elementą priskyrimui" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Įveskite prekių priskyrimo kiekį" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Grąžinimo užsakymo nuoroda" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Įmonė, iš kurios grąžinamos prekės" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Grąžinimo užsakymo būsena" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "Grąžinimo užsakymo eilutės įrašas" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "Turi būti nurodytas atsargų elementas" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "Grąžinamo kiekis viršija prekių kiekį" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "Grąžinamo kiekis turi būti daugiau nei nulis" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "Neteisingas kiekis serijinio numerio prekei" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Pasirinkite prekę grąžinimui iš kliento" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Gavimo data" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "Data, kada ši grąžinta prekė buvo gauta" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Rezultatas" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Rezultatas šiam eilutės įrašui" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Išlaidos, susijusios su šio eilutės įrašo grąžinimu ar remontu" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "Grąžinimo užsakymo papildoma eilutė" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "Užsakymo ID" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "Užsakymo, kurį reikia dubliuoti, ID" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Kopijuoti eilutes" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Kopijuoti eilutės įrašus iš pradinio užsakymo" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Kopijuoti papildomas eilutes" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Kopijuoti papildomas eilutes iš pradinio užsakymo" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopijuoti parametrus" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Eilutės įrašai" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Užbaigtos eilutės" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Dubliuoti užsakymą" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Nurodykite užsakymo dubliavimo parinktis" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Neteisingas užsakymo ID" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Tiekėjo pavadinimas" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "Užsakymo atšaukti negalima" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Leisti užbaigti užsakymą su neužbaigtais eilutės įrašais" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "Užsakyme yra neužbaigtų eilutės įrašų" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "Užsakymas nėra atidarytas" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "Automatinis kainų nustatymas" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Automatiškai apskaičiuoti pirkimo kainą pagal tiekėjo detalės duomenis" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Pirkimo kainos valiuta" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Sujungti elementus" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Sujungti elementus su ta pačia detale, paskirtimi ir tiksline data į vieną eilutės įrašą" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Vidinis detalės numeris" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "Vidinis detalės pavadinimas" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "Turi būti nurodyta tiekėjo detalė" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "Turi būti nurodytas pirkimo užsakymas" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "Tiekėjas turi atitikti pirkimo užsakymą" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "Pirkimo užsakymas turi atitikti tiekėją" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Eilutės įrašas" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Pasirinkite paskirties vietą gautiems elementams" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Įveskite partijos kodą gaunamoms atsargoms" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Galiojimo data" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "Įveskite galiojimo datą gaunamoms atsargoms" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Įveskite gaunamų atsargų serijos numerius" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "Pakeisti gaunamų atsargų pakavimo informaciją" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "Papildoma pastaba gaunamoms atsargoms" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Brūkšninis kodas" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Nuskaitytas brūkšninis kodas" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Brūkšninis kodas jau naudojamas" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Turi būti pateikti eilutės įrašai" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "Turi būti nurodyta paskirties vieta" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Pateiktos brūkšninių kodų reikšmės turi būti unikalios" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "Siuntos" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Užbaigtos siuntos" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Pardavimo kainos valiuta" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "Paskirstyti elementai" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Nepateikta siuntos informacija" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "Eilutės įrašas nėra susijęs su šiuo užsakymu" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "Kiekis turi būti teigiamas" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Įveskite priskiriamus serijos numerius" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "Siunta jau išsiųsta" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "Siunta nėra susieta su šiuo užsakymu" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "Nerasta atitikmenų šiems serijos numeriams" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "Šie serijos numeriai nepasiekiami" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Grąžinimo užsakymo eilutės įrašas" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "Eilutės įrašas neatitinka grąžinimo užsakymo" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "Eilutės įrašas jau gautas" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "Elementai gali būti priimami tik pagal vykdomus užsakymus" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "Grąžinamas kiekis" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Eilutės kainos valiuta" @@ -5532,1174 +5613,1226 @@ msgstr "Pinigų grąžinimas" msgid "Reject" msgstr "Atmesti" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Vėluojantis pirkimo užsakymas" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Pirkimo užsakymas {po} dabar vėluoja" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Vėluojantis pardavimo užsakymas" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Pardavimo užsakymas {so} dabar vėluoja" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Vėluojantis grąžinimo užsakymas" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "Grąžinimo užsakymas {ro} dabar vėluoja" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Pažymėta žvaigždute" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Filtruoti pagal pažymėtas kategorijas" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Gylis" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtruoti pagal kategorijos gylį" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Aukščiausio lygio" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtruoti pagal aukščiausio lygio kategorijas" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Kaskada" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Įtraukti sub-kategorijas į filtravimo rezultatus" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Pirminė kategorija" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Filtruoti pagal pirminę kategoriją" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Neįtraukti sub-kategorijų po nurodyta kategorija" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Turi rezultatų" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Yra variantas" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Yra versija" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Turi versijų" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "BOM galiojantis" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Surinkimo detalė gali būti testuojama" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "Komponento detalė gali būti testuojama" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "Naudoja" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Detalių kategorija" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Detalių kategorijos" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Numatytoji vieta" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Numatytoji vieta detalėms šioje kategorijoje" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Struktūrinė" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Detalės negali būti priskirtos struktūrinei kategorijai tiesiogiai, bet gali būti priskirtos jos subkategorijoms." -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Numatytieji raktažodžiai" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Numatytieji raktažodžiai detalėms šioje kategorijoje" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Piktograma" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Piktograma (neprivaloma)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "Negalite paversti šios detalių kategorijos struktūrine, nes kai kurios detalės jau jai priskirtos!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "Detalių kategorijos parametro šablonas" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Numatytoji reikšmė" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Numatytoji parametro reikšmė" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Detalės" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "Negalima ištrinti šios detalės, nes ji užrakinta" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "Negalima ištrinti šios detalės, nes ji vis dar aktyvi" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "Negalima ištrinti šios detalės, nes ji naudojama sirinkime" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Detalė „{self}“ negali būti naudojama detalių sąraše „{parent}“ (rekursyviai)" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Detalė „{parent}“ naudojama detalių sąraše „{self}“ (rekursyviai)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN turi atitikti regex šabloną {pattern}" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "Detalė negali būti savo pačios versija" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "Negalima sukurti detalės versijos, jei tai jau yra kita versija" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "Turi būti nurodytas versijos kodas" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "Versijos leidžiamos tik surinkimo detalėms" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "Negalima sukurti šabloninės detalės versijos" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "Pagrindinė detalė turi būti susieta su tuo pačiu šablonu" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Atsargų elementas su šiuo serijos numeriu jau egzistuoja" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dublikatų detalių nustatymuose naudoti negalima" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Tokia detalės versija jau egzistuoja." -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Detalė su tokiu pavadinimu, IPN ir versija jau egzistuoja." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Detalės negali būti priskirtos struktūrinėms detalių kategorijoms!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Detalės pavadinimas" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Yra šablonas" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Ar ši detalė yra šabloninė detalė?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Ar ši detalė yra kitos detalės variantas?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variantas iš" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Detalės aprašymas (neprivalomas)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Raktažodžiai" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Detalės raktažodžiai, skirti pagerinti matomumą paieškos rezultatuose" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Detalės kategorija" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Detalės versija arba numeris" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Versija" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Ar ši detalė yra kitos detalės versija?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "Versija iš" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Kur ši detalė paprastai laikoma?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Numatytasis tiekėjas" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Numatytoji tiekėjo detalė" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Numatytasis galiojimo laikas" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Šios detalės atsargų galiojimo laikas (dienomis)" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimalus atsargų kiekis" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Mažiausias leidžiamas atsargų kiekis" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Šios detalės matavimo vienetai" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Ar ši detalė gali būti pagaminta iš kitų detalių?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "Ar ši detalė gali būti naudojama kitoms detalėms gaminti?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "Ar ši detalė turi unikalių vienetų sekimą?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "Ar šiai detalei gali būti priskirti bandymų rezultatai?" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "Ar ši detalė gali būti perkama iš išorinių tiekėjų?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "Ar ši detalė gali būti parduodama klientams?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Ar ši detalė yra aktyvi?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "Užrakintos detalės negali būti redaguojamos" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "Ar tai virtuali detalė, pavyzdžiui, programinė įranga ar licencija?" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "BOM kontrolinė suma" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Išsaugota BOM kontrolinė suma" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "Detalių sąrašą patikrino" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "Detalių sąrašo patikrinimo data" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Sukūręs vartotojas" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Atsakingas vartotojas už šią detalę" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Parduodamas kiekis" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Valiuta, naudojama kainų skaičiavimams kaupti" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Minimali BOM kaina" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Minimali komponentų detalių kaina" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Maksimali BOM kaina" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Maksimali komponentų detalių kaina" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Minimali pirkimo kaina" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Mažiausia istorinė pirkimo kaina" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Maksimali pirkimo kaina" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Didžiausia istorinė pirkimo kaina" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Minimali vidinė kaina" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Mažiausia kaina pagal vidinius kainų intervalus" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Maksimali vidinė kaina" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Didžiausia kaina pagal vidinius kainų intervalus" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Mažiausia tiekėjo kaina" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Mažiausia detalės kaina iš išorinių tiekėjų" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Didžiausia tiekėjo kaina" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Didžiausia detalės kaina iš išorinių tiekėjų" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Mažiausia varianto kaina" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Apskaičiuota minimali variantų detalių kaina" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Didžiausia varianto kaina" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Apskaičiuota didžiausia variantų detalių kaina" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Minimali kaina" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Nepaisyti minimalios kainos" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Maksimali kaina" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Nepaisyti maksimalios kainos" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Apskaičiuota bendra minimali kaina" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Apskaičiuota bendra maksimali kaina" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Minimali pardavimo kaina" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Mažiausia pardavimo kaina pagal kainų intervalus" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Didžiausia pardavimo kaina" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Didžiausia pardavimo kaina pagal kainų intervalus" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Mažiausia pardavimo kaina" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Mažiausia istorinė pardavimo kaina" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Didžiausia pardavimo kaina" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Didžiausia istorinė pardavimo kaina" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Detalė inventorizacijai" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Vienetų skaičius" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "Atsargų įrašų skaičius inventorizacijos metu" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "Bendras prieinamas atsargų kiekis inventorizacijos metu" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Data" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Inventorizacijos atlikimo data" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Minimali atsargų kaina" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Apytikslė minimali turimų atsargų kaina" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Maksimali atsargų kaina" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "Apytikslė maksimali turimų atsargų kaina" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "Detalės kainų intervalai pardavimui" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "Detalės bandymų šablonas" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Netinkamas šablono pavadinimas - turi būti bent vienas raidinis ar skaitinis simbolis" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Bandymų šablonus galima kurti tik testuojamoms detalėms" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "Detalė jau turi bandymų šabloną su tokiu pačiu raktu" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Bandymo pavadinimas" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Įveskite bandymo pavadinimą" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "Bandymo raktas" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "Supaprastintas bandymo raktas" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Bandymo aprašymas" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Įveskite šio bandymo aprašymą" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "Ar šis bandymas įjungtas?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Privalomas" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Ar šį bandymą būtina išlaikyti?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Reikalauja reikšmės" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "Ar šiam bandymui reikia įvesti reikšmę pridedant rezultatą?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Reikalauja priedo" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "Ar šiam bandymui reikia pridėti failą su rezultatu?" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "Galimi pasirinkimai šiam bandymui (atskirti kableliais)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM elemento keisti negalima - surinkimas užrakintas" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM elemento keisti negalima - varianto surinkimas užrakintas" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Pasirinkite pirminę detalę" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Pavaldi detalė" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Pasirinkite detalę, naudojamą BOM" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "BOM reikalingas šios detalės kiekis" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Šis BOM elementas yra pasirenkamas" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Šis BOM elementas yra sunaudojamas (nesekamas gamybos užsakymuose)" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "BOM nuoroda" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "BOM pastabos" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Kontrolinė suma" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "BOM eilutės kontrolinė suma" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Patvirtinta" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Šis BOM elementas patvirtintas" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Paveldima" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Šį BOM elementą paveldi variantų sąrašai" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Šiam BOM elementui galima naudoti variantinių detalių atsargas" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Sekamoms detalėms kiekis turi būti sveikasis skaičius" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Turi būti nurodyta pavaldi detalė" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "BOM elemento pakaitalas" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "Pakaitinė detalė negali būti tokia pati kaip pagrindinė detalė" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Pagrindinis BOM elementas" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Pakaitinė detalė" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Detalė 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Detalė 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Pasirinkite susijusią detalę" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "Pastaba šiam ryšiui" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "Detalių ryšio negalima sukurti tarp detalės ir jos pačios" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "Toks ryšys jau egzistuoja" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Pagrindinė kategorija" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Pagrindinė detalių kategorija" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Subkategorijos" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "Rezultatai" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Rezultatų skaičius, susietas su šiuo šablonu" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Šio atsargų elemento pirkimo valiuta" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Failas nėra paveikslėlis" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Pradinė detalė" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Pasirinkite pradinę detalę kopijavimui" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopijuoti paveikslėlį" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Kopijuoti paveikslėlį iš pradinės detalės" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Kopijuoti BOM" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Kopijuoti komplektavimo žiniaraštį iš pradinės detalės" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Kopijuoti parametrus" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Kopijuoti parametrų duomenis iš pradinės detalės" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Kopijuoti pastabas" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Kopijuoti pastabas iš pradinės detalės" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Pradinis atsargų kiekis" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Nurodykite pradinį atsargų kiekį šiai detalei. Jei kiekis nulis - atsargos nebus pridėtos." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Pradinė atsargų vieta" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Nurodykite pradinę atsargų vietą šiai detalei" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Pasirinkite tiekėją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Pasirinkite gamintoją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Gamintojo detalės numeris" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Pasirinkta įmonė nėra galiojantis tiekėjas" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Pasirinkta įmonė nėra galiojantis gamintojas" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Detalė su šiuo gamintojo numeriu (MPN) jau egzistuoja" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Tiekėjo detalė su šiuo SKU jau egzistuoja" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategorijos pavadinimas" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Surinkimas" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Atsargos" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "Versijos" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Tiekėjai" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Bendros atsargos" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Nepriskirtos atsargos" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Variantų atsargos" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Kopijuoti detalę" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Kopijuoti pradinius duomenis iš kitos detalės" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Pradinės atsargos" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Sukurti detalę su pradiniu atsargų kiekiu" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Tiekėjo informacija" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Pridėti pradinę tiekėjo informaciją šiai detalei" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kopijuoti kategorijos parametrus" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Kopijuoti parametrų šablonus iš pasirinktos detalių kategorijos" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Esamas paveikslėlis" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Esamos detalės paveikslėlio failo pavadinimas" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Paveikslėlio failas neegzistuoja" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Patvirtinti visą komplektavimo žiniaraštį" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Galima surinkti" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Mažiausia kaina" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Pakeisti apskaičiuotą mažiausią kainą" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Mažiausios kainos valiuta" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Didžiausia kaina" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Pakeisti apskaičiuotą didžiausią kainą" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Didžiausios kainos valiuta" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Atnaujinti" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Atnaujinti šios detalės kainodarą" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nepavyko konvertuoti iš nurodytų valiutų į {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Mažiausia kaina negali būti didesnė už didžiausią kainą" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Didžiausia kaina negali būti mažesnė už mažiausią kainą" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Pasirinkite pirminį surinkimą" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Pasirinkite komponentinę detalę" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Pasirinkite detalę, iš kurios kopijuoti BOM" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Pašalinti esamus duomenis" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Pašalinti esamus BOM elementus prieš kopijuojant" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Įtraukti paveldėtus" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Įtraukti BOM elementus, paveldėtus iš šabloninių detalių" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Praleisti netinkamas eilutes" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Įjunkite šią parinktį, jei norite praleisti netinkamas eilutes" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Kopijuoti pakaitines detales" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopijuoti pakaitines detales, kai kopijuojami BOM elementai" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Perspėjimas apie mažas atsargas" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Galimas atsargų kiekis detalei {part.name} nukrito žemiau nustatyto minimalaus lygio" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "Nenurodytas joks veiksmas" msgid "No matching action found" msgstr "Atitinkantis veiksmas nerastas" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Brūkšninio kodo duomenims atitikmens nerasta" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Rastas atitikmuo brūkšninio kodo duomenims" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "Modelis nepalaikomas" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "Modelio egzempliorius nerastas" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Brūkšninis kodas atitinka esamą elementą" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "Atitinkančių detalės duomenų nerasta" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "Tiekėjo detalių atitikmenų nerasta" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "Rastos kelios atitinkančios tiekėjo detalės" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "Brūkšninio kodo duomenims atitinkančio įskiepio nerasta" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Atitinkanti tiekėjo detalė" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "Prekė jau buvo priimta" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "Tiekėjo brūkšniniam kodui įskiepis nerastas" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "Rasti keli atitinkantys eilutės įrašai" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "Atitinkančios eilutės įrašo nerasta" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "Nepateiktas pardavimo užsakymas" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "Brūkšninis kodas neatitinka jokio esamo atsargų elemento" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "Atsargų elementas neatitinka eilutės įrašo" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Nepakanka atsargų" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "Atsargų elementas priskirtas pardavimo užsakymui" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Nepakanka informacijos" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "Rastas atitinkantis elementas" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "Tiekėjo detalė neatitinka eilutės įrašo" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "Eilutės įrašas jau užbaigtas" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "Norint priimti eilutės įrašą, reikia daugiau informacijos" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Gauta pirkimo užsakymo eilutė" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "Nepavyko priimti eilutės įrašo" @@ -6972,7 +7105,7 @@ msgstr "Suteikia vietinį brūkšninių kodų palaikymą" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "Išduoti atgaline data datuotus užsakymus" msgid "Automatically issue orders that are backdated" msgstr "Automatiškai išduoti užsakymus, kurių data yra atgalinė" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "Lygiai" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "Atsargų duomenys" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "Įtraukti detalių atsargų duomenis" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "Kainodaros duomenys" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "Įtraukti detalių kainodaros duomenis" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "Tiekėjų duomenys" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "Įtraukti tiekėjų duomenis" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "Gamintojų duomenys" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "Įtraukti gamintojų duomenis" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "Pakaitinių detalių duomenys" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "Įtraukti pakaitinių detalių duomenis" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "Parametrų duomenys" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "Įtraukti detalių parametrų duomenis" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "Daugiapakopis BOM eksportuotojas" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "Suteikia galimybę eksportuoti daugiapakopius BOM" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "BOM lygis" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "Pakaitalas {n}" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "Tiekėjas {n}" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "Tiekėjo {n} SKU" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "Tiekėjo {n} MPN" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "Gamintojas {n}" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "Gamintojo {n} MPN" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "Slack įeinančio webhook'o URL" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "InvenTree automatinis etikečių spausdintuvas" msgid "Provides support for printing using a machine" msgstr "Suteikia palaikymą spausdinimui naudojant įrenginį" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "paskutinį kartą naudota" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "Parinktys" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Įskiepio raktas" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "Įskiepio pavadinimas" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "Pakuotės įskiepis" msgid "Plugin" msgstr "Įskiepis" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Autorius nerastas" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Įskiepis '{p}' nesuderinamas su dabartine InvenTree versija {v}" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Įskiepiui reikalinga bent versija {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Įskiepiui reikalinga ne aukštesnė nei versija {v}" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "Įdiegimas nepatvirtintas" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "Turi būti pateiktas paketo pavadinimas arba URL" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8072,7 +8205,7 @@ msgstr "Iš viso" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serijos numeris" @@ -8097,7 +8230,7 @@ msgstr "Atsargų elemento bandymo ataskaita" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Sumontuoti elementai" @@ -8130,495 +8263,519 @@ msgstr "Nėra rezultato (privaloma)" msgid "No result" msgstr "Nėra rezultato" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Ištekliaus failas neegzistuoja" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "Paveikslėlio failas nerastas" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "Žyma part_image reikalauja detalės (Part) egzemplioriaus" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "Žyma company_image reikalauja įmonės (Company) egzemplioriaus" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Filtruoti pagal vietos gylį" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Filtruoti pagal aukščiausio lygio vietas" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Įtraukti sub-vietas į filtravimo rezultatus" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "Pirminė vieta" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtruoti pagal pirminę vietą" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Detalės pavadinimas (neskiria didžiųjų ir mažųjų raidžių)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Detalės pavadinimas turi (neskiria didžiųjų ir mažųjų raidžių)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Detalės pavadinimas (reguliarioji išraiška)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Detalės IPN (neskiria didžiųjų ir mažųjų raidžių)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Detalės IPN turi (neskiria didžiųjų ir mažųjų raidžių)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Detalės IPN (reguliarioji išraiška)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Mažiausias kiekis" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Didžiausias kiekis" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Būsenos kodas" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Išorinė vieta" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Sunaudota gamybos užsakyme" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Sumontuota kitame atsargų elemente" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Detalių medis" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Atnaujinta iki" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Atnaujinta po" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Inventorizacija iki" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Inventorizacija po" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Galiojimo data iki" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Galiojimo data po" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Pasenusi" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Reikalingas kiekis" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Turi būti pateikta galiojanti detalė" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Nurodyta tiekėjo detalė neegzistuoja" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Tiekėjo detalė turi nustatytą pakuotės dydį, bet nepažymėtas požymis use_pack_size" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serijos numeriai negali būti pateikti detalei, kurios negalima sekti" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "Atsargų vietos tipas" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "Atsargų vietos tipai" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "Numatytoji piktograma visoms vietoms, kurioms nepaskirta piktograma (neprivaloma)" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Atsargų vieta" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Atsargų vietos" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Savininkas" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Pasirinkite savininką" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Atsargos negali būti tiesiogiai patalpintos į struktūrines atsargų vietas, bet gali būti patalpinti į jų sub-vietas." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Išorinė" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Tai yra išorinė atsargų vieta" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Vietos tipas" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "Šios vietos atsargų vietos tipas" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Negalite padaryti šios atsargų vietos struktūrine, nes joje jau yra atsargų!" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Turi būti nurodyta detalė" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Atsargos negali būti patalpintos į struktūrines atsargų vietas!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "Atsargų elementas negali būti sukurtas virtualioms detalėms" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Detalės tipas ('{self.supplier_part.part}') turi būti {self.part}" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Elemento, turinčio serijos numerį, kiekis turi būti 1" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Serijos numeris negali būti nustatytas, jei kiekis didesnis nei 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Elementas negali priklausyti pats sau" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Elementas turi turėti surinkimo nuorodą, jei is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Surinkimo nuoroda nenurodo į tą pačią detalę" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Pirminis atsargų elementas" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Pagrindinė detalė" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Pasirinkite atitinkančią tiekėjo detalę šiam atsargų elementui" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Kur yra šis atsargų elementas?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "Pakuotė, kurioje laikomas šis atsargų elementas" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Sumontuotas į" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Ar šis elementas yra sumontuotas kitame elemente?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Šio elemento serijos numeris" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Šio atsargų elemento partijos kodas" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Atsargų kiekis" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Surinkimo šaltinis" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Surinkimas šiam atsargų elementui" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Sunaudojo" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Gamybos užsakymas, kuris sunaudojo šį atsargų elementą" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Pirkimo užsakymo šaltinis" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Pirkimo užsakymas šiam atsargų elementui" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Pardavimo užsakymo paskirtis" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Atsargų elemento galiojimo data. Po šios datos atsargos bus laikomos pasibaigusiomis" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Ištrinti išnaudojus" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Ištrinti šį atsargų elementą, kai atsargos bus išnaudotos" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Vieneto pirkimo kaina pirkimo metu" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Konvertuota į detalę" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Detalė nenustatyta kaip sekama" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Kiekis turi būti sveikasis skaičius" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Kiekis negali viršyti galimų atsargų kiekio ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Serijos numeriai turi būti pateikti sąraše" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Kiekis nesutampa su serijos numeriais" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Bandomasis šablonas neegzistuoja" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Atsargų elementas buvo priskirtas pardavimo užsakymui" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Atsargų elementas sumontuotas kitame elemente" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Atsargų elementas turi kitų elementų" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Atsargų elementas buvo priskirtas klientui" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Atsargų elementas šiuo metu gaminamas" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Su serijos numeriais pažymėtų atsargų sujungti negalima" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Pasikartojantys atsargų elementai" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Atsargų elementai turi būti susiję su ta pačia detale" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Atsargų elementai turi būti susiję su ta pačia tiekėjo detale" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Atsargų būsenos kodai turi sutapti" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Atsargų elemento negalima perkelti, nes jo nėra sandėlyje" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Atsargų elemento sekimas" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Įrašo pastabos" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Atsargų elemento bandymo rezultatas" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Šiam bandymui turi būti pateikta reikšmė" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Šiam bandymui turi būti įkeltas priedas" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Netinkama reikšmė šiam bandymui" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Bandymo rezultatas" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Bandymo išvesties reikšmė" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Bandymo rezultato priedas" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Bandymo pastabos" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "Bandymų stotis" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "Bandymų stoties identifikatorius, kurioje atliktas bandymas" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "Pradėta" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Bandymo pradžios laiko žyma" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "Pabaigta" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Bandymo pabaigos laiko žyma" @@ -8662,246 +8819,246 @@ msgstr "Pasirinkite detalę serijos numeriui sugeneruoti" msgid "Quantity of serial numbers to generate" msgstr "Kiekis serijos numerių, kuriuos reikia sugeneruoti" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "Bandymo šablonas šiam rezultatui" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "Turi būti pateiktas šablono ID arba bandymo pavadinimas" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "Bandymo pabaigos laikas negali būti ankstesnis nei pradžios laikas" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Pirminis elementas" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "Pirminis atsargų elementas" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Naudoti pakuotės dydį pridedant: nurodytas kiekis yra pakuočių skaičius" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Įveskite serijos numerius naujiems elementams" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Tiekėjo detalės numeris" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Nebegaliojantis" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Antriniai elementai" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "Sekami elementai" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "Šio atsargų elemento pirkimo kaina, vienetui arba pakuotei" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Įveskite atsargų elementų, kuriuos reikia serializuoti, skaičių" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Kiekis negali viršyti galimų atsargų kiekio ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Paskirties atsargų vieta" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "Šiai detalei negali būti priskirti serijos numeriai" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Serijos numeriai jau egzistuoja" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Pasirinkite atsargų elementą montavimui" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "Montuojamas kiekis" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "Įveskite montuojamų elementų kiekį" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Pridėkite operacijos pastabą (neprivaloma)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "Montuojamas kiekis turi būti bent 1" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "Atsargų elementas nepasiekiamas" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "Pasirinktos detalės nėra komplektavimo žiniaraštyje" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "Montuojamas kiekis negali viršyti turimo kiekio" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Paskirties vieta išmontuotam elementui" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "Pasirinkite detalę, į kurią konvertuoti atsargų elementą" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "Pasirinkta detalė netinkama konvertavimui" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Negalima konvertuoti atsargų elemento, kuriam priskirta tiekėjo detalė" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "Atsargų elemento būsenos kodas" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "Pasirinkite atsargų elementus būsenai pakeisti" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "Nepasirinkti jokie atsargų elementai" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Sub-vietos" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "Pirminė atsargų vieta" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "Detalė turi būti parduodama" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "Elementas priskirtas pardavimo užsakymui" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "Elementas priskirtas gamybos užsakymui" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Klientas, kuriam priskiriami atsargų elementai" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "Pasirinkta įmonė nėra klientas" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Atsargų priskyrimo pastabos" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "Turi būti pateiktas atsargų elementų sąrašas" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Atsargų sujungimo pastabos" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Leisti skirtingus tiekėjus" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "Leisti sujungti atsargų elementus su skirtingomis tiekėjų detalėmis" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Leisti skirtingas būsenas" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "Leisti sujungti atsargų elementus su skirtingais būsenos kodais" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Turi būti pateikti bent du atsargų elementai" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Be pakeitimų" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Atsargų elemento pirminio rakto reikšmė" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "Atsargų elemento nėra sandėlyje" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Atsargų operacijos pastabos" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "Kitas serijos numeris" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "Ankstesnis serijos numeris" @@ -9383,83 +9540,83 @@ msgstr "Pardavimo užsakymai" msgid "Return Orders" msgstr "Grąžinimo užsakymai" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Vartotojo vardas" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Vardas" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Vartotojo vardas" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Pavardė" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Vartotojo pavardė" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Vartotojo el. pašto adresas" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Personalas" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Ar šis vartotojas turi personalo leidimus" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Supervartotojas" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Ar šis vartotojas yra supervartotojas" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Ar ši vartotojo paskyra yra aktyvi" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "Tik supervartotojas gali keisti šį lauką" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "Neturite leidimo kurti vartotojų" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Jūsų paskyra sukurta." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Prisijungimui naudokite slaptažodžio atstatymo funkciją" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Sveiki atvykę į InvenTree" diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po index db87f23b88..c6d3081872 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API galapunkts nav atrasts" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Lietotājam nav atļaujas, lai apskatītu šo modeli" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "E-pasts (vēlreiz)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "E-pasta adreses apstiprinājums" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Katru reizi jāievada viena un tā pati e-pasta adrese." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Norādītā primārā e-pasta adrese nav derīga." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Norādītais e-pasta domēns nav apstiprināts." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nevarēja konvertēt {original} par {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Norādītais daudzums nav derīgs" @@ -112,13 +104,13 @@ msgstr "Ievadiet datumu" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Piezīmes" @@ -131,75 +123,75 @@ msgstr "Vērtība '{name}' neparādās vajadzīgajā formātā" msgid "Provided value does not match required pattern: " msgstr "Norādītā vērtība neatbilst nepieciešamajam formātam: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Tukša sērijas numura rinda" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Atkārtojas sērijas numurs" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, 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:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Netika atrasts neviens sērijas numurs" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Noņemiet HTML tagus no šīs vērtības" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Savienojuma kļūda" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Serveris atbildēja ar nederīgu statusa kodu" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Radās izņēmums" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Serveris atbildēja ar nederīgu Content-Length vērtību" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Attēla izmērs ir pārāk liels" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Attēla lejupielāde pārsniedz maksimālo izmēru" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Attālais serveris atgrieza tukšu atbildi" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Norādītajā URL nav derīgs attēla fails" @@ -207,11 +199,11 @@ msgstr "Norādītajā URL nav derīgs attēla fails" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po index 9ec3041053..db80e3d9b0 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API eindpunt niet gevonden" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Lijst met items of filters moet worden opgegeven voor bulk bewerking" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Items moeten worden opgegeven als een lijst" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Ongeldige items lijst verstrekt" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Filters moeten als woordenboek worden opgegeven" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Ongeldige filters opgegeven" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Alles filteren alleen gebruiken met True" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Geen items die overeenkomen met de opgegeven criteria" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Geen gegevens verstrekt" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "Dit veld moet uniek zijn" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Gebruiker heeft geen rechten om dit model te bekijken" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "E-mailadres (opnieuw)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "E-mailadres bevestiging" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Er moet hetzelfde e-mailadres ingevoerd worden." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Het opgegeven primaire e-mailadres is ongeldig." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Het ingevoerde e-maildomein is niet goedgekeurd." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "{original} kon niet worden omgezet naar {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Ongeldige hoeveelheid ingevoerd" @@ -112,13 +104,13 @@ msgstr "Voer datum in" msgid "Invalid decimal value" msgstr "Ongeldige decimale waarde" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Opmerkingen" @@ -131,75 +123,75 @@ msgstr "Waarde '{name}' verschijnt niet in patroonformaat" msgid "Provided value does not match required pattern: " msgstr "Opgegeven waarde komt niet overeen met vereist patroon: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Kan niet meer dan 1000 items tegelijk serienummers geven." -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Leeg serienummer" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplicaat serienummer" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Ongeldige groep: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Groepsbereik {group} overschrijdt toegestane hoeveelheid ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Geen serienummers gevonden" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Hoeveelheid van unieke serienummers ({n}) moet overeenkomen met de hoeveelheid ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Verwijder HTML tags van deze waarde" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Gegevens bevatten verboden markdown inhoud" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Verbindingsfout" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Server reageerde met ongeldige statuscode" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Uitzondering opgetreden" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Server reageerde met ongeldige Content-Length waarde" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Afbeeldingsformaat is te groot" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Beelddownload overschrijdt de maximale grootte" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Externe server heeft lege reactie teruggegeven" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Opgegeven URL is geen geldig afbeeldingsbestand" @@ -207,11 +199,11 @@ msgstr "Opgegeven URL is geen geldig afbeeldingsbestand" msgid "Log in to the app" msgstr "Log in op de app" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Schakel tweestapsverificatie in voordat je iets anders kunt doen." @@ -255,135 +247,126 @@ msgstr "Referentie moet overeenkomen met verplicht patroon" msgid "Reference number is too large" msgstr "Referentienummer is te groot" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Ongeldige keuze" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Naam" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Omschrijving" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Omschrijving (optioneel)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Pad" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Dubbele namen kunnen niet bestaan onder hetzelfde bovenliggende object" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Markdown notitie (optioneel)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Streepjescode gegevens" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Streepjescode van derden" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Hash van Streepjescode" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Unieke hash van barcode gegevens" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Bestaande barcode gevonden" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Taak mislukt" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Achtergrondtaak '{f}' is mislukt na {n} pogingen" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serverfout" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Er is een fout gelogd door de server." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Afbeelding" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Selecteer valuta uit beschikbare opties" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "Dit veld mag niet nul zijn." -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Ongeldige waarde" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Externe afbeelding" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL van extern afbeeldingsbestand" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Afbeeldingen van externe URL downloaden is niet ingeschakeld" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Fout bij het downloaden van afbeelding van externe URL" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" -msgstr "" +msgstr "Ongeldig inhoudstype" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" -msgstr "" +msgstr "Inhoudstype niet gevonden" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "Content type komt niet overeen met de vereiste mixin klasse" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -537,11 +520,11 @@ msgstr "Chinees (vereenvoudigd)" msgid "Chinese (Traditional)" msgstr "Chinees (traditioneel)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "Update beschikbaar" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "Een update voor Inventree is beschikbaar" @@ -553,30 +536,30 @@ msgstr "Ongeldige fysieke eenheid" msgid "Not a valid currency code" msgstr "Geen geldige valutacode" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Status van bestelling" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Bovenliggende Productie" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Inclusief varianten" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Inclusief varianten" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Inclusief varianten" msgid "Part" msgstr "Onderdeel" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categorie" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Voorouderlijke bouw" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Toegewezen aan mij" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Toegewezen aan" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Gemaakt voor" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Gemaakt na" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Heeft een startdatum" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Vervaldatum voor" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Vervaldatum na" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Heeft doel datum" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Doel datum voor" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Doel datum na" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Voltooid voor" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Voltooid na" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "Min. datum" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "Max. datum" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Boomstructuur uitsluiten" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Verbruiksartikelen" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Optioneel" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Samenstelling" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Gevolgd" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Testbaar" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Openstaande order" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Toegewezen" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Verbruikt" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Beschikbaar" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "In bestelling" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Productieorder" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Locatie" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Uitvoer" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Filter op uitvoer standaard item ID. Gebruik 'null' om niet geïnstalleerde build items te vinden." -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Productieorders" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Assemblage stuklijst is niet gevalideerd" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Bouw bestelling kan niet worden aangemaakt voor een inactief onderdeel" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Maken opdracht kan niet worden gemaakt voor een ontgrendeld onderdeel" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Bestellingen bouwen kan alleen extern worden vervuld voor aankochte onderdelen" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Verantwoorde gebruiker of groep moet worden opgegeven" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Bouworder onderdeel kan niet worden gewijzigd" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Doeldatum moet na startdatum zijn" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Productieorderreferentie" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Productieorderreferentie" msgid "Reference" msgstr "Referentie" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Korte beschrijving van de build (optioneel)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Productieorder waar deze productie aan is toegewezen" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "Productie-opdracht waar dit product aan is toegewezen" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Selecteer onderdeel om te produceren" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Verkooporder Referentie" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Verkooporder waar deze productie aan is toegewezen" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "Productieopdracht waar dit productie aan is toegewezen" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Bronlocatie" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selecteer de locatie waar de voorraad van de productie vandaan moet komen (laat leeg om vanaf elke standaard locatie te nemen)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "Externe bouw" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Deze bouw opdracht is extern uitgevoerd" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Bestemmings Locatie" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Selecteer locatie waar de voltooide items zullen worden opgeslagen" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Productiehoeveelheid" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Aantal voorraaditems om te produceren" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Voltooide voorraadartikelen" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Aantal voorraadartikelen die zijn voltooid" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Productiestatus" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Productiestatuscode" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Batchcode" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Batchcode voor deze productieuitvoer" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Aanmaakdatum" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "Bouw start datum" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Geplande startdatum voor deze bestelling" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Verwachte opleveringsdatum" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Doeldatum voor productie voltooiing. Productie zal achterstallig zijn na deze datum." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Opleveringsdatum" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "voltooid door" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Uitgegeven door" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Gebruiker die de productieorder heeft gegeven" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Verantwoordelijke" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Gebruiker of groep verantwoordelijk voor deze bouwopdracht" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Externe Link" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link naar externe URL" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Bouw prioriteit" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioriteit van deze bouwopdracht" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Project code" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Project code voor deze build order" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Kan de bouwopdracht niet voltooien zolang onderliggende bouwopdrachten nog openstaan" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Kan de bouwopdracht niet voltooien zolang de output onvolledig is" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Verwijderen van taak om toewijzingen te voltooien mislukt" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Productieorder {build} is voltooid" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Een productieorder is voltooid" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Serienummers moeten worden opgegeven voor traceerbare onderdelen" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Geen productie uitvoer opgegeven" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Productie uitvoer is al voltooid" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Productuitvoer komt niet overeen met de Productieorder" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Hoeveelheid kan niet groter zijn dan aantal" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "Build output heeft niet alle vereiste tests doorstaan" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Build output {serial} heeft niet alle vereiste tests doorstaan" -#: build/models.py:1230 -msgid "Cannot partially complete a build output with allocated items" -msgstr "" +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "Voorraadproducten zijn nog in productie" -#: build/models.py:1628 +#: build/models.py:1211 +msgid "Cannot partially complete a build output with allocated items" +msgstr "Kan een build uitvoer niet gedeeltelijk voltooien met de toegewezen items" + +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Bouw order regel item" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Bouw object" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Bouw object" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Hoeveelheid" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Vereiste hoeveelheid voor bouwopdracht" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Aantal van verbruikte voorraad" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Productieartikel moet een productieuitvoer specificeren, omdat het hoofdonderdeel gemarkeerd is als traceerbaar" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "Toegewezen hoeveelheid moet groter zijn dan nul" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Toegewezen hoeveelheid ({q}) mag de beschikbare voorraad ({a}) niet overschrijden" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Voorraad item is te veel toegewezen" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Toewijzing hoeveelheid moet groter zijn dan nul" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "Toegewezen hoeveelheid overschrijdt de beschikbare voorraad hoeveelheid" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Voorraadartikel" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Bron voorraadartikel" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Voorraad hoeveelheid toe te wijzen aan productie" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Installeren in" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Bestemming voorraadartikel" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Bouw level" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Onderdeel naam" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Projectcode label" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Productieuitvoer" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Productieuitvoer komt niet overeen met de bovenliggende productie" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Uitvoeronderdeel komt niet overeen met productieorderonderdeel" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Deze productieuitvoer is al voltooid" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Deze productieuitvoer is niet volledig toegewezen" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Voer hoeveelheid in voor productie uitvoer" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Geheel getal vereist omdat de stuklijst traceerbare onderdelen bevat" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Serienummers" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Voer serienummers in voor productieuitvoeren" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Voorraad locatie voor project uitvoer" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Serienummers automatisch toewijzen" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "De volgende serienummers bestaan al of zijn ongeldig" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Een lijst van productieuitvoeren moet worden verstrekt" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Voorraadlocatie voor geannuleerde outputs" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Toewijzingen weggooien" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Verwijder alle voorraadtoewijzingen voor geannuleerde outputs" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Reden voor annulering van bouworder(s)" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Locatie van voltooide productieuitvoeren" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Incomplete Toewijzing Accepteren" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Voltooi de uitvoer als de voorraad niet volledig is toegewezen" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Toegewezen voorraad gebruiken" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Verbruik elke voorraad die al is toegewezen aan deze build" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Verwijder Incomplete Uitvoeren" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Verwijder alle productieuitvoeren die niet zijn voltooid" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Niet toegestaan" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Accepteer zoals geconsumeerd onder deze bouwopdracht" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "De-alloceren voordat deze bouwopdracht voltooid wordt" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Overgealloceerde voorraad" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Hoe wilt u omgaan met extra voorraaditems toegewezen aan de bouworder" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Sommige voorraadartikelen zijn overalloceerd" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Accepteer Niet-toegewezen" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Accepteer dat voorraadartikelen niet volledig zijn toegewezen aan deze productieorder" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Vereiste voorraad is niet volledig toegewezen" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Accepteer Onvolledig" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Accepteer dat het vereist aantal productieuitvoeren niet is voltooid" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Vereiste productiehoeveelheid is voltooid" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Bouw opdracht heeft open sub bouw orders" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Bouwen moet in de productiestatus staan" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Productieorder heeft onvolledige uitvoeren" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Productielijn" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Productieuitvoer" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Productieuitvoer moet naar dezelfde productie wijzen" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Bouw lijn-item" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part moet naar hetzelfde onderdeel wijzen als de productieorder" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Beschikbare hoeveelheid ({q}) overschreden" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Productieuitvoer moet worden opgegeven voor de toewijzing van gevolgde onderdelen" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Productieuitvoer kan niet worden gespecificeerd voor de toewijzing van niet gevolgde onderdelen" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Allocaties voor artikelen moeten worden opgegeven" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Voorraadlocatie waar onderdelen afkomstig zijn (laat leeg om van elke locatie te nemen)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Locatie uitsluiten" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Voorraadartikelen van deze geselecteerde locatie uitsluiten" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Uitwisselbare voorraad" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Voorraadartikelen op meerdere locaties kunnen uitwisselbaar worden gebruikt" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Vervangende Voorraad" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Toewijzing van vervangende onderdelen toestaan" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Optionele Items" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Alloceer optionele BOM items om bestelling te bouwen" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Starten van automatische toewijzing taak mislukt" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "Alle artikelen" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "Niet Gevolgde items" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "Gevolgde Items" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "Item Type" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "Selecteer item type om automatisch toe te wijzen" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "BOM referentie" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "BOM onderdeel ID" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "BOM onderdeel naam" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "Instaleeren Op" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Bouwen" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Leveranciersonderdeel" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Toegewezen hoeveelheid" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Bouw referentie" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Naam categorie onderdeel" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Volgbaar" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Overgenomen" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Varianten toestaan" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "In productie" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Gepland om te bouwen" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Externe voorraad" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Beschikbare Voorraad" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Beschikbare vervanging voorraad" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Beschikbare varianten voorraad" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "Verbruikte hoeveelheid overschrijdt toegewezen hoeveelheid" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Optionele notities voor voorraadverbruik" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "Het bouwelement moet verwijzen naar de juiste bouwopdracht" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Dupliceer build item allocatie" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "Build line moet verwijzen naar de juiste bouwopdracht" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Dupliceer build line toewijzing" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Ten minste één item of regel moet worden opgegeven" @@ -1474,67 +1478,71 @@ msgstr "In de wacht" msgid "Cancelled" msgstr "Geannuleerd" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Voltooid" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Voorraad vereist voor productieorder" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Bouw order {build} vereist extra voorraad" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Achterstallige Productieorder" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Productieorder {bo} is nu achterstallig" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "Is koppeling" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "Is een bestand" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Gebruiker heeft geen toestemming om deze bijlagen te verwijderen" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Gebruiker heeft geen toestemming om deze bijlage te verwijderen." -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Ongeldige valuta code" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Dubbele valutacode" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Geen geldige valuta codes opgegeven" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Geen plug-in gevonden" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Projectcode label" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Bijgewerkt" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Tijdstempel van laatste update" @@ -1546,778 +1554,778 @@ msgstr "Bijgewerkt door" msgid "User who last updated this object" msgstr "Gebruiker die dit object voor het laatst heeft bijgewerkt" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Unieke projectcode" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Projectbeschrijving" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Gebruiker of groep die verantwoordelijk is voor dit project" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Instellingen" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Instellingswaarde" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Gekozen waarde is geen geldige optie" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Waarde moet een booleaanse waarde zijn" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Waarde moet een geheel getal zijn" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "Waarde moet een geldig getal zijn" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "Waarde is niet geldig voor validatiecontrole" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Sleutelreeks moet uniek zijn" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Gebruiker" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Prijs pauze hoeveelheid" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Prijs" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Stukprijs op opgegeven hoeveelheid" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Eindpunt" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Eindpunt waarop deze webhook wordt ontvangen" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Naam van deze webhook" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Actief" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Is deze webhook actief" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Sleutel" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Token voor toegang" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Geheim" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Gedeeld geheim voor HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "Bericht ID" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Unieke identificatie voor dit bericht" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Host" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Host waarvan dit bericht is ontvangen" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Koptekst" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Koptekst van dit bericht" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Berichtinhoud" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Inhoud van dit bericht" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Eindpunt waarop dit bericht is ontvangen" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Aan gewerkt" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Is het werk aan dit bericht voltooid?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "Id" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Titel" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Koppeling" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Gepubliceerd" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Auteur" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Samenvatting" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Gelezen" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Is dit nieuwsitem gelezen?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Afbeelding" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "Doel type voor deze afbeelding" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "Doel modelnummer voor deze afbeelding" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Aangepaste eenheid" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "Eenheid symbool moet uniek zijn" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Naam van de unit moet een geldig id zijn" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Naam van eenheid" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Symbool" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Optionele eenheid symbool" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definitie" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Definitie van eenheid" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Bijlage" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Ontbrekend bestand" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Externe link ontbreekt" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Model type" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "Doel type voor afbeelding" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Bestand als bijlage selecteren" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Opmerking" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Opmerking van bijlage" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Uploaddatum" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Datum waarop het bestand is geüpload" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Bestandsgrootte" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Bestandsgrootte in bytes" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Ongeldig modeltype opgegeven voor bijlage" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "Aangepaste staat" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "Aangepaste statussen" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "Referentie status set" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "Status set die met deze aangepaste status wordt uitgebreid" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logische sleutel" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "Staat logische sleutel die gelijk is aan deze staat in zakelijke logica" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Waarde" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "De numerieke waarde die wordt opgeslagen in de modellendatabase" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Naam van de toestand" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Label" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Label dat in de frontend getoond wordt" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Kleur" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Kleur die in de frontend getoond wordt" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Model" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "Model met deze staat is gekoppeld aan" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "Het model moet worden gekozen" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "Sleutel moet worden geselecteerd" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "Logische sleutel moet worden geselecteerd" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "Sleutel moet anders zijn dan logische sleutel" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "Geldige referentie status klasse moet worden opgegeven" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "Sleutel moet verschillen van de logische sleutels van de referentie status" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "Logische sleutel moet in de logische sleutels van de referentiestatus staan" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "Naam moet anders zijn dan de namen van de referentie status" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Keuzelijst" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Selectielijst" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Naam van de selectielijst" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Beschrijving van de selectielijst" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Vergrendeld" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "Is deze selectielijst vergrendeld?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "Kan deze selectielijst worden gebruikt?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Bron plug-in" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Plug-in die de selectielijst biedt" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Bron tekenreeks" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Optionele tekenreeks die de bron identificeert die voor deze lijst wordt gebruikt" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Standaard vermelding" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Standaard vermelding voor deze selectielijst" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Gecreëerd" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Datum en tijd waarop de selectielijst is aangemaakt" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Laatst bijgewerkt" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "Datum en tijd waarop de selectielijst voor het laatst is bijgewerkt" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Selectielijst item" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Selectielijst item" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Selectielijst waaraan dit item hoort" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Naam van de selectielijst" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Label voor het item in de selectielijst" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Beschrijving van het item in de selectielijst" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "Is dit item in deze lijst actief?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Parameter sjabloon" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" -msgstr "" +msgstr "Parameter sjablonen" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "Checkbox parameters kunnen geen eenheden bevatten" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parameters kunnen geen eenheden bevatten" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "Keuzes moeten uniek zijn" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "De template van de parameter moet uniek zijn" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" -msgstr "" +msgstr "Doelmodeltype voor dit parametersjabloon" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Parameternaam" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Eenheden" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Fysieke eenheden voor deze parameter" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Parameter omschrijving" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Selectievakje" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Is deze parameter een selectievak?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Keuzes" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "Lijst met selecties voor deze parameter" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Ingeschakeld" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "Is dit parametersjabloon ingeschakeld?" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" -msgstr "" +msgstr "Parameter" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" -msgstr "" +msgstr "Parameters" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Ongeldige keuze voor parameter waarde" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "Ongeldig modeltype opgegeven voor parameter" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" -msgstr "" +msgstr "Model-ID" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "ID van het doelmodel voor deze parameter" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Sjabloon" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" -msgstr "" +msgstr "Parameter sjabloon" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Gegevens" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Parameterwaarde" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Opmerking" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Optioneel notities veld" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Barcode Scan" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Barcode gegevens" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Gebruiker die de barcode gescand heeft" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Tijdstempel" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Datum en tijd van de streepjescode scan" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "Adres eindpunt dat de streepjescode verwerkt" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Inhoud" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Contextgegevens voor de barcode scan" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Reactie" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Reactiegegevens van de barcode scan" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultaat" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "Was de barcode succesvol gescand?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "Er is een fout opgetreden" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: E-maillog verwijderen wordt beschermd. Zet INVENTREE_PROTECT_EMAIL_LOG naar False om verwijdering toe te staan." -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "E-mailbericht" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "E-mail berichten" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "Aangekondigd" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "Verzonden" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "Mislukt" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "Geleverd" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "Bevestigd" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "Inkomend" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "Uitgaand" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "Geen antwoord" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "Track levering" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "Track gelezen" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "Track Klik" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "Globaal ID" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identificatie voor dit bericht (kan worden geleverd door een extern systeem)" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "Discussie ID" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identificatie voor deze bericht draad (kan worden geleverd door een extern systeem)" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "Gesprek" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "Gekoppeld onderwerp voor dit bericht" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" -msgstr "" +msgstr "Prioriteit" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "E-mail gesprekken" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "E-mail gesprekken" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Sleutel" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "Unieke sleutel voor deze thread (gebruikt om de conversatie te identificeren)" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "Unieke identificatie voor dit bericht" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "Intern gestart" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "Is dit onderwerp intern gestart?" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "Datum en tijd waarop de conversatie voor het laatst is bijgewerkt" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "Datum en tijd waarop de conversatie voor het laatst is bijgewerkt" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} is geannuleerd" msgid "A order that is assigned to you was canceled" msgstr "Een bestelling die aan u is toegewezen is geannuleerd" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Ontvangen items" @@ -2351,93 +2359,101 @@ msgstr "Artikelen zijn ontvangen tegen een inkooporder" msgid "Items have been received against a return order" msgstr "Items zijn ontvangen tegen een retour bestelling" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "Geeft aan of deze instelling bevestiging nodig heeft" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "Deze instelling vereist een bevestiging voordat u verandert. Bevestig alstublieft de wijziging." + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "Geeft aan of de instelling overschreven wordt door een omgevingsvariabele" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "Overschrijven" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Is actief" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Openstaande taken" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Geplande taken" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Mislukte taken" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "Taak ID" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Unieke taak ID" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Vergrendel" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Tijdstip van vergrendeling" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Naam van de taak" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Functie" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Functie naam" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumenten" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Taak argumenten" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Trefwoord argumenten" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Taak trefwoord argumenten" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Bestandsnaam" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Model type" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Gebruiker heeft geen toestemming om bijlagen voor dit model te maken of te bewerken" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" -msgstr "" +msgstr "Gebruiker heeft geen toestemming om parameters voor dit model te maken of te bewerken" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lijst met selecties is vergrendeld" @@ -2445,1130 +2461,1159 @@ msgstr "Lijst met selecties is vergrendeld" msgid "No group" msgstr "Geen groep" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "Website URL is vergrendeld door configuratie" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Opnieuw opstarten vereist" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Een instelling is gewijzigd waarvoor een herstart van de server vereist is" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Migraties in behandeling" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Aantal nog openstaande database migraties" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "Actieve waarschuwingscodes" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "Een reeks actieve waarschuwingscodes" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "Instantie Id" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "Unieke identificatie voor deze InvenTree instantie" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "Aankondiging ID" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Kondig de instantie ID van de server aan in de server status info (ongeautoriseerd)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "ID Serverinstantie" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Stringbeschrijving voor de server instantie" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Gebruik de instantie naam" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Gebruik de naam van de instantie in de titelbalk" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Tonen `over` beperken" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Toon de `over` modal alleen aan superusers" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Bedrijfsnaam" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Interne bedrijfsnaam" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "Basis-URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "Basis URL voor serverinstantie" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Standaard Valuta" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Selecteer basisvaluta voor de berekening van prijzen" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Ondersteunde valuta" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Lijst van ondersteunde valuta codes" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Valuta update interval" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Hoe vaak te controleren op updates (nul om uit te schakelen)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "dagen" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Valuta update plug-in" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Munteenheid update plug-in om te gebruiken" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Download van URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Download van afbeeldingen en bestanden vanaf een externe URL toestaan" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Download limiet" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Maximale downloadgrootte voor externe afbeelding" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "User-agent gebruikt om te downloaden van URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Sta toe om de user-agent te overschrijven die gebruikt wordt om afbeeldingen en bestanden van externe URL te downloaden (laat leeg voor de standaard)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Strikte URL validatie" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Vereis schema specificatie bij het valideren van URLs" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Interval voor update" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Hoe vaak te controleren op updates (nul om uit te schakelen)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Automatische backup" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Automatische back-up van database- en mediabestanden inschakelen" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Automatische backup interval" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Geef het aantal dagen op tussen geautomatiseerde backup" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Interval Taak Verwijderen" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Resultaten van achtergrondtaken worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Error Log Verwijderings Interval" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Resultaten van achtergrondtaken worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Interval Verwijderen Notificatie" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Meldingen van gebruikers worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "E-mail verwijderen interval" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "E-mailberichten zullen worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "Bescherm e-maillogboeken" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "Voorkom het verwijderen van e-mail logs" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Streepjescodeondersteuning" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Schakel barcodescanner ondersteuning in in de webinterface" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "Sla de resultaten van de barcode op" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "Sla de barcode scan resultaten op in de database" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "Maximale aantal Barcode Scans" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "Maximum aantal resultaten van de barcode scan op te slaan" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Barcode Invoer Vertraging" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Barcode invoerverwerking vertraging" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Barcode Webcam Ondersteuning" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode via webcam scannen in browser toestaan" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "Barcode gegevens" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Geef barcode gegevens weer in browser als tekst" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Streepjescode Plug-in" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Plug-in om te gebruiken voor interne barcode data genereren" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Herzieningen onderdeel" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Revisieveld voor onderdeel inschakelen" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "Alleen assemblee revisie" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "Alleen revisies toestaan voor assemblageonderdelen" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Verwijderen uit Assemblage toestaan" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Verwijderen van onderdelen die in een groep worden gebruikt toestaan" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulier expressiepatroon voor het overeenkomende Onderdeel IPN" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Duplicaat IPN toestaan" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Toestaan dat meerdere onderdelen dezelfde IPN gebruiken" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Bewerken IPN toestaan" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Sta het wijzigen van de IPN toe tijdens het bewerken van een onderdeel" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Kopieer Onderdeel Stuklijstgegevens" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopieer standaard stuklijstgegevens bij het dupliceren van een onderdeel" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Kopieer Onderdeel Parametergegevens" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Parametergegevens standaard kopiëren bij het dupliceren van een onderdeel" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Kopieer Onderdeel Testdata" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Testdata standaard kopiëren bij het dupliceren van een onderdeel" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Kopiëer Categorieparameter Sjablonen" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Kopieer categorieparameter sjablonen bij het aanmaken van een onderdeel" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Onderdelen zijn standaard sjablonen" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Onderdeel" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Onderdelen kunnen standaard worden gebruikt als subcomponenten" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Koopbaar" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Onderdelen kunnen standaard gekocht worden" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Verkoopbaar" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Onderdelen kunnen standaard verkocht worden" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Onderdelen kunnen standaard gevolgd worden" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtueel" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Onderdelen zijn standaard virtueel" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Verwante onderdelen tonen" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Verwante onderdelen voor een onderdeel tonen" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Initiële voorraadgegevens" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Aanmaken van eerste voorraad toestaan bij het toevoegen van een nieuw onderdeel" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Initiële leveranciergegevens" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Aanmaken van eerste leveranciersgegevens toestaan bij het toevoegen van een nieuw onderdeel" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Onderdelennaam Weergaveopmaak" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Opmaak om de onderdeelnaam weer te geven" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Standaardicoon voor onderdeel catagorie" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Standaardicoon voor onderdeel catagorie (leeg betekent geen pictogram)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Minimaal aantal prijs decimalen" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimaal aantal decimalen om weer te geven bij het weergeven van prijsgegevens" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Maximum prijs decimalen" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maximum aantal decimalen om weer te geven bij het weergeven van prijsgegevens" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Gebruik leveranciersprijzen" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Prijsvoordelen leveranciers opnemen in de totale prijsberekening" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Aankoopgeschiedenis overschrijven" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische order prijzen overschrijven de prijzen van de leverancier" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Gebruik voorraaditem prijzen" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Gebruik prijzen van handmatig ingevoerde voorraadgegevens voor prijsberekeningen" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Voorraad artikelprijs leeftijd" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Voorraaditems ouder dan dit aantal dagen uitsluiten van prijsberekeningen" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Gebruik variantprijzen" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenprijzen opnemen in de totale prijsberekening" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Alleen actieve varianten" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Gebruik alleen actieve variantonderdelen voor het berekenen van variantprijzen" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "Prijzen automatisch bijwerken" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "Automatisch prijzen van onderdelen bijwerken wanneer interne gegevens veranderen" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Prijzen Herbouw interval" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Aantal dagen voordat de prijzen voor onderdelen automatisch worden bijgewerkt" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Interne Prijzen" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Inschakelen van interne prijzen voor onderdelen" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Interne prijs overschrijven" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Indien beschikbaar, interne prijzen overschrijven berekeningen van prijsbereik" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Printen van labels Inschakelen" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Printen van labels via de webinterface inschakelen" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "Label Afbeelding DPI" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI resolutie bij het genereren van afbeelginsbestanden voor label printer plugins" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Activeer Rapportages" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Activeer het genereren van rapporten" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Foutopsporingsmodus" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Rapporten genereren in debug modus (HTML uitvoer)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Log fouten" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Registreer fouten die optreden bij het genereren van rapporten" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Paginagrootte" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Standaard paginagrootte voor PDF rapporten" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Forceer Parameter Eenheden" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Als er eenheden worden opgegeven, moeten parameterwaarden overeenkomen met de opgegeven eenheden" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Globaal unieke serienummers" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummers voor voorraaditems moeten globaal uniek zijn" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Verwijder uitgeputte voorraad" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Bepaalt standaard gedrag wanneer een voorraadartikel leeg is" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Batchcode Sjabloon" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Sjabloon voor het genereren van standaard batchcodes voor voorraadartikelen" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Verlopen Voorraad" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Verlopen voorraad functionaliteit inschakelen" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Verkoop Verlopen Voorraad" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Verkoop verlopen voorraad toestaan" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Voorraad Vervaltijd" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Aantal dagen voordat voorraadartikelen als verouderd worden beschouwd voor ze verlopen" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Produceer Verlopen Voorraad" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Sta productie met verlopen voorraad toe" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Voorraad Eigenaar Toezicht" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Eigenaarstoezicht over voorraadlocaties en items inschakelen" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Voorraadlocatie standaard icoon" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Standaard locatie pictogram (leeg betekent geen icoon)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Geïnstalleerde voorraad items weergeven" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Geïnstalleerde voorraadartikelen in voorraadtabellen tonen" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Controleer BOM bij het installeren van items" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Geïnstalleerde voorraad items moeten in de BOM voor het bovenliggende deel bestaan" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Sta 'Niet op voorraad overschrijving' toe" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Toestaan dat voorraadartikelen die niet op voorraad zijn worden overgebracht tussen voorraadlocaties" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Productieorderreferentiepatroon" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Vereist patroon voor het genereren van het Bouworderreferentieveld" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Vereis verantwoordelijke eigenaar" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Een verantwoordelijke eigenaar moet worden toegewezen aan elke bestelling" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "Vereist een actief onderdeel" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "Voorkom het maken van orders voor inactieve onderdelen" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Vergrendeld onderdeel vereisen" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "Voorkom het maken van orders voor ontgrendelde onderdelen" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "Vereist een geldige BOM" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "Voorkom het creëren van bouworders tenzij BOM is gevalideerd" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "Onderliggende bestellingen vereist" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "Voorkom voltooiing van de bouw tot alle sub orders gesloten zijn" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "Externe Bouw Orders" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "Inschakelen externe build order functionaliteit" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Blokkeren tot test geslaagd" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Voorkom dat de bouw van de uitvoer wordt voltooid totdat alle vereiste testen zijn geslaagd" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Retourorders inschakelen" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Retourorder functionaliteit inschakelen in de gebruikersinterface" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Retourorder referentie patroon" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Verplicht patroon voor het genereren van Retourorder referentie veld" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Bewerk voltooide retourorders" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Bewerken van retourorders toestaan nadat deze zijn voltooid" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Verkooporderreferentiepatroon" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Vereist patroon voor het genereren van het Verkooporderreferentieveld" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Standaard Verzending Verkooporder" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Aanmaken standaard verzending bij verkooporders inschakelen" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Bewerk voltooide verkooporders" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Bewerken van verkooporders toestaan nadat deze zijn verzonden of voltooid" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" -msgstr "" +msgstr "Zending moet gecontroleerd worden" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" -msgstr "" +msgstr "Voorkom voltooiing van verzendingen totdat items zijn gecontroleerd" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Verstuurde bestellingen markeren als voltooid" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Verkooporders gemarkeerd als verzonden zullen automatisch worden voltooid, zonder de status \"verzonden\"" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Inkooporderreferentiepatroon" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Vereist patroon voor het genereren van het Inkooporderreferentieveld" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Bewerk voltooide verkooporders" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Bewerken van inkooporders toestaan nadat deze zijn verzonden of voltooid" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "Valuta converteren" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "Verander artikelwaarde naar basisvaluta bij het ontvangen van voorraad" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Inkooporders automatisch voltooien" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Markeer orders automatisch als voltooid wanneer alle regelitems worden ontvangen" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Wachtwoord vergeten functie inschakelen" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Wachtwoord vergeten functie inschakelen op de inlogpagina's" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Registratie inschakelen" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Zelfregistratie voor gebruikers op de inlogpagina's inschakelen" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "SSO inschakelen" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "SSO inschakelen op de inlogpagina's" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Schakel gebruikersregistratie met SSO in" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Zelfregistratie voor gebruikers middels SSO op de inlogpagina's inschakelen" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "SSO-groep synchroniseren inschakelen" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Inschakelen van het synchroniseren van InvenTree groepen met groepen geboden door de IdP" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "SSO groep sleutel" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "De naam van de groepen claim attribuut van de IdP" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "SSO groep kaart" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Een mapping van SSO-groepen naar lokale InvenTree groepen. Als de lokale groep niet bestaat, zal deze worden aangemaakt." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "Verwijder groepen buiten SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Of groepen die zijn toegewezen aan de gebruiker moeten worden verwijderd als ze geen backend zijn door de IdP. Het uitschakelen van deze instelling kan beveiligingsproblemen veroorzaken" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "E-mailadres verplicht" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Vereis gebruiker om e-mailadres te registreren bij aanmelding" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "SSO-gebruikers automatisch invullen" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Gebruikersdetails van SSO-accountgegevens automatisch invullen" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "E-mail twee keer" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Bij inschrijving gebruikers twee keer om hun e-mail vragen" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Wachtwoord tweemaal" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Laat gebruikers twee keer om hun wachtwoord vragen tijdens het aanmelden" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Toegestane domeinen" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Inschrijven beperken tot bepaalde domeinen (komma-gescheiden, beginnend met @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Groep bij aanmelding" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Groep waaraan nieuwe gebruikers zijn toegewezen op registratie. Als SSO-groepssynchronisatie is ingeschakeld, is deze groep alleen ingesteld als er geen groep vanuit de IdP kan worden toegewezen." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "MFA afdwingen" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Gebruikers moeten multifactor-beveiliging gebruiken." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "Het inschakelen van deze instelling zal ervoor zorgen dat alle gebruikers multifactor authenticatie instellen. Alle sessies worden onmiddellijk verbroken." + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Controleer plugins bij het opstarten" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Controleer of alle plug-ins zijn geïnstalleerd bij het opstarten - inschakelen in container-omgevingen" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Controleren op plug-in updates" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Schakel periodieke controles voor updates voor geïnstalleerde plug-ins in" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Activeer URL-integratie" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Plugins toestaan om URL-routes toe te voegen" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Activeer navigatie integratie" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Plugins toestaan om te integreren in navigatie" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Activeer app integratie" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Activeer plug-ins om apps toe te voegen" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Activeer planning integratie" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Activeer plugin om periodiek taken uit te voeren" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Activeer evenement integratie" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Activeer plugin om op interne evenementen te reageren" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Interface integratie activeren" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Plug-ins inschakelen om te integreren in de gebruikersinterface" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "E-mail integratie inschakelen" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Schakel plug-ins in om uitgaande / inkomende mails te verwerken" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "Activeer project codes" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "Schakel projectcodes in voor het bijhouden van projecten" -#: common/setting/system.py:1083 -msgid "Enable Stock History" -msgstr "Voorraad geschiedenis inschakelen" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" +msgstr "Voorraadcontrole inschakelen" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "Functionaliteit voor het opnemen van historische voorraadniveaus en -waarde inschakelen" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Externe locaties uitsluiten" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" -msgstr "Voorraaditems op externe locaties uitsluiten van aandelen geschiedenis berekeningen" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "Voorraadartikelen op externe locaties uitsluiten van voorraadberekeningen" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Automatische Voorraadcontrole Periode" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" -msgstr "Aantal dagen tussen het opnemen van automatische voorraadgeschiedenis" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" +msgstr "Aantal dagen tussen automatische voorraadgegevens opnemen" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "Verwijder oude items geschiedenis" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" +msgstr "Oude voorraadgegevens verwijderen" -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "Verwijder voorraadgeschiedenis items ouder dan het opgegeven aantal dagen" +#: common/setting/system.py:1135 +msgid "Delete stocktake entries older than the specified number of days" +msgstr "Voorraadgegevens verwijderen die ouder zijn dan het opgegeven aantal dagen" -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "Aandelengeschiedenis verwijderings interval" +#: common/setting/system.py:1141 +msgid "Stocktake Deletion Interval" +msgstr "Interval Voorraadgegevens verwijderen" -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "Voorraadrapportage zal worden verwijderd na het opgegeven aantal dagen" +#: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "Voorraadgegevens zal worden verwijderd na het opgegeven aantal dagen" -#: common/setting/system.py:1123 +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "Inverval voor verwijderen van voorraadtracking" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 msgid "Display Users full names" msgstr "Gebruikers volledige namen weergeven" -#: common/setting/system.py:1124 +#: common/setting/system.py:1168 msgid "Display Users full names instead of usernames" msgstr "Laat gebruikers volledige namen zien in plaats van gebruikersnamen" -#: common/setting/system.py:1129 +#: common/setting/system.py:1173 msgid "Display User Profiles" msgstr "Gebruikersprofielen tonen" -#: common/setting/system.py:1130 +#: common/setting/system.py:1174 msgid "Display Users Profiles on their profile page" msgstr "Toon gebruikersprofielen op hun profielpagina" -#: common/setting/system.py:1135 +#: common/setting/system.py:1179 msgid "Enable Test Station Data" msgstr "Inschakelen van teststation data" -#: common/setting/system.py:1136 +#: common/setting/system.py:1180 msgid "Enable test station data collection for test results" msgstr "Schakel teststation gegevensverzameling in voor testresultaten" -#: common/setting/system.py:1141 +#: common/setting/system.py:1185 msgid "Enable Machine Ping" -msgstr "" +msgstr "Machine Ping inschakelen" -#: common/setting/system.py:1143 +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" -msgstr "" +msgstr "Schakel periodieke ping taak van geregistreerde machines in om hun status te controleren" #: common/setting/user.py:23 msgid "Inline label display" @@ -3596,11 +3641,11 @@ msgstr "PDF-rapporten in de browser weergeven, in plaats van als bestand te down #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "Barcode Scanner in formuliervelden" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "Barcodescanner invoer in formuliervelden toestaan" #: common/setting/user.py:51 msgid "Search Parts" @@ -3868,7 +3913,7 @@ msgstr "Sla de laatst gebruikte printer op voor een gebruiker" #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "Alle modellen" #: common/validators.py:63 msgid "No attachment model type provided" @@ -3911,366 +3956,370 @@ msgstr "Onderdeel is actief" msgid "Manufacturer is Active" msgstr "Fabrikant is actief" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "Leveranciersonderdelen is actief" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "Primaire leverancierdeel" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "Intern onderdeel is actief" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "Leverancier is actief" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Fabrikant" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Bedrijf" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "Heeft voorraad" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Bedrijven" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Bedrijf omschrijving" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Omschrijving van het bedrijf" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Website" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "URL bedrijfswebsite" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Telefoonnummer" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Telefoonnummer voor contact" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Contact e-mailadres" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contact" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Contactpunt" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link naar externe bedrijfsinformatie" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "Is dit bedrijf actief?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "Is klant" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Verkoop je artikelen aan dit bedrijf?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "Is leverancier" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Koop je artikelen van dit bedrijf?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Is fabrikant" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Fabriceert dit bedrijf onderdelen?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Standaardvaluta die gebruikt wordt voor dit bedrijf" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "Btw-nr" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "BTW-nummer van bedrijf" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Adres" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Adres" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Selecteer bedrijf" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Adres titel" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Titel die het adres beschrijft" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Primair adres" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Instellen als primair adres" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Lijn 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Adresregel 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Lijn 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Adresregel 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Post code" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Plaats/regio" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Postcode plaats/regio" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Staat/provincie" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Staat of provincie" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Land" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Adres land" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Koerier verzend notities" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Opmerkingen voor verzending koerier" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Interne verzend notities" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Verzend notities voor intern gebruik" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Link naar adres gegevens (extern)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Fabrikant onderdeel" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Basis onderdeel" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Onderdeel selecteren" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Fabrikant selecteren" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "Fabrikant artikel nummer" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Fabrikant artikel nummer (MPN)" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL voor externe link van het fabrikant onderdeel" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Omschrijving onderdeel fabrikant" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Pakket eenheden moeten compatibel zijn met de basis onderdeel eenheden" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Leverancier" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Leverancier selecteren" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Voorraad beheers eenheid voor leveranciers" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Is dit leveranciersdeel actief?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "Primair" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Selecteer fabrikant onderdeel" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL voor link externe leveranciers onderdeel" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Omschrijving leveranciersdeel" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "basisprijs" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Verpakking" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Onderdeel verpakking" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Pakket hoeveelheid" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Totale hoeveelheid geleverd in één pakket. Laat leeg voor enkele afzonderlijke items." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "meerdere" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Order meerdere" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Beschikbare hoeveelheid van leverancier" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Beschikbaarheid bijgewerkt" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Datum van de laatste update van de beschikbaarheid gegevens" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Prijsverschil van leverancier" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "Geeft als resultaat de string representatie voor het primaire adres. Deze eigenschap bestaat voor achterwaartse compatibiliteit." - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Standaardvaluta die gebruikt wordt voor deze leverancier" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Bedrijfsnaam" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "Op voorraad" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" -msgstr "" +msgstr "Prijsverschillen" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Fout opgetreden tijdens data export" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "Gegevensexport plug-in geeft onjuiste gegevensindeling terug" @@ -4318,119 +4367,119 @@ msgstr "Geplaatst" msgid "Invalid status code" msgstr "Ongeldige statuscode" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Data bestand" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "Te importeren databestand" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Kolommen" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "Doel modeltype voor deze importsessie" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "Status van importeren" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Veld standaard" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "Veld overschrijven" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Veld filters" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "Bestaande Records Bijwerken" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "Indien ingeschakeld, zullen bestaande records worden bijgewerkt met nieuwe gegevens" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "Sommige verplichte velden zijn niet toegewezen" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "ID" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "Bestaande database-identifier voor het record" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "De kolom is al toegewezen aan een database veld" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "Het veld is al toegewezen aan een data-kolom" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "Kolom toewijzing moet worden gekoppeld aan een geldige importsessie" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "Kolom bestaat niet in het gegevensbestand" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "Veld bestaat niet in het doel model" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "Geselecteerde veld is alleen lezen" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Importeer sessie" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Veld" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Kolom" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Rij index" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "Oorspronkelijke rij gegevens" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Fouten" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Geldig" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "ID is vereist voor het bijwerken van bestaande records." -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Geen record gevonden met het opgegeven ID" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Ongeldig ID formaat opgegeven" @@ -4530,7 +4579,7 @@ msgstr "Aantal afdrukken voor elk label" msgid "Connected" msgstr "Verbonden" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Onbekend" @@ -4540,7 +4589,7 @@ msgstr "Afdrukken" #: machine/machine_types/label_printer.py:234 msgid "Warning" -msgstr "" +msgstr "Waarschuwing" #: machine/machine_types/label_printer.py:235 msgid "No media" @@ -4556,7 +4605,7 @@ msgstr "Verbinding verbroken" #: machine/machine_types/label_printer.py:238 msgid "Error" -msgstr "" +msgstr "Error" #: machine/machine_types/label_printer.py:245 msgid "Label Printer" @@ -4628,11 +4677,11 @@ msgstr "Configuratie type" #: machine/serializers.py:24 msgid "Key of the property" -msgstr "" +msgstr "Sleutel van de eigenschap" #: machine/serializers.py:27 msgid "Value of the property" -msgstr "" +msgstr "Waarde van de eigenschap" #: machine/serializers.py:30 users/models.py:238 msgid "Group" @@ -4640,123 +4689,135 @@ msgstr "Groep" #: machine/serializers.py:30 msgid "Grouping of the property" -msgstr "" +msgstr "Groepering van de eigenschap" #: machine/serializers.py:33 msgid "Type" -msgstr "" +msgstr "Type" #: machine/serializers.py:35 msgid "Type of the property" -msgstr "" +msgstr "Type van de eigenschap" #: machine/serializers.py:40 msgid "Max Progress" -msgstr "" +msgstr "Maximale voortgang" #: machine/serializers.py:41 msgid "Maximum value for progress type, required if type=progress" -msgstr "" +msgstr "Maximale waarde voor voortgangsttype, vereist als type=progress" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Order Referentie" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "Uitmuntend" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "Heeft een projectcode" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Aangemaakt Door" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "Gemaakt vóór" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Gemaakt na" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "Heeft vervaldatum" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "Vervaldatum voor" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "Vervaldatum na" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "Heeft doel datum" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "Doel datum voor" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "Doel datum na" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "Bijgewerkt voor" + +#: order/api.py:233 +msgid "Updated After" +msgstr "Bijgewerkt na" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Heeft prijsstelling" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "Voltooid voor" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "Voltooid na" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "Externe Bouw Opdracht" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Bestellen" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "Bestelling voltooid" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Intern onderdeel" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Bestelling in behandeling" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Voltooid" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "Heeft verzending" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Inkooporder" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Inkooporder" msgid "Sales Order" msgstr "Verkooporder" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,723 +4842,743 @@ msgstr "Totaalprijs" msgid "Total price for this order" msgstr "Totaalprijs van deze bestelling" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Valuta bestelling" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta voor deze order (laat leeg om de standaard van het bedrijf te gebruiken)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "Deze bestelling is vergrendeld en kan niet worden gewijzigd" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Contact komt niet overeen met het geselecteerde bedrijf" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Startdatum moet voor einddatum liggen" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" -msgstr "" +msgstr "Adres komt niet overeen met het geselecteerde bedrijf" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Bestelling beschrijving (optioneel)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Selecteer projectcode voor deze bestelling" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Link naar externe pagina" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "Start datum" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Geplande startdatum voor deze bestelling" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Streefdatum" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Verwachte datum voor levering van de bestelling. De bestelling wordt achterstallig na deze datum." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Datum van uitgifte" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Order uitgegeven op datum" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "Bijgewerkt op" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Gebruiker of groep verantwoordelijk voor deze order" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Contactpunt voor deze volgorde" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Bedrijf adres voor deze bestelling" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Orderreferentie" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Inkooporder status" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Bedrijf waar de artikelen van worden besteld" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Leveranciersreferentie" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Order referentiecode van leverancier" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "ontvangen door" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Order voltooid op datum" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Bestemming" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "Bestemming voor ontvangen items" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Onderdeelleverancier moet overeenkomen met de Inkooporderleverancier" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "Regelitem mist een gekoppeld deel" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Hoeveelheid moet een positief getal zijn" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Klant" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Bedrijf waaraan de artikelen worden verkocht" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "Verkooporder status" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Klantreferentie " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Klant order referentiecode" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Verzenddatum" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "verzonden door" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "Bestelling is al afgerond" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "Order is al geannuleerd" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Alleen een open bestelling kan als voltooid worden gemarkeerd" -#: order/models.py:1425 +#: order/models.py:1440 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:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Order kan niet worden voltooid omdat er onvolledige artikelen aanwezig zijn" -#: order/models.py:1439 +#: order/models.py:1454 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:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "De bestelling is vergrendeld en kan niet worden gewijzigd" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Hoeveelheid artikelen" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Artikelregel referentie" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Artikel notities" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Doeldatum voor dit regelitem (laat leeg om de doeldatum van de bestelling te gebruiken)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Regelomschrijving (optioneel)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Additionele context voor deze regel" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Stukprijs" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "Inkooporder regel item" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "Leveranciersonderdeel moet overeenkomen met leverancier" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "Bouw bestelling moet worden gemarkeerd als extern" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "Bestellingen kunnen alleen aan assemblageonderdelen worden gekoppeld" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "De bouw van het order deel moet overeenkomen met regel onderdeel" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Leveranciersonderdeel" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Ontvangen" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Aantal ontvangen artikelen" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Inkoopprijs" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Aankoopprijs per stuk" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "Externe Build Order moet aan deze regel voldoen" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "Extra regel inkooporder" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "Verkooporder regel item" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "Alleen verkoopbare onderdelen kunnen aan een verkooporder worden toegewezen" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Verkoopprijs" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Prijs per stuk" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Verzonden" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Verzonden hoeveelheid" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "Verzending van verkooporder" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" -msgstr "" +msgstr "Verzendadres moet overeenkomen met de klant" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" -msgstr "" +msgstr "Verzendadres voor deze zending" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Datum van verzending" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Leveringsdatum" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Datum van levering van zending" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Gecontroleerd door" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Gebruiker die deze zending gecontroleerd heeft" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Zending" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Zendingsnummer" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Volgnummer" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Zending volginformatie" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Factuurnummer" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Referentienummer voor bijbehorende factuur" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "Verzending is al verzonden" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "Zending heeft geen toegewezen voorraadartikelen" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" -msgstr "" +msgstr "Verzending moet worden gecontroleerd voordat deze kan worden voltooid" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "Verkooporder extra regel" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "Toewijzing verkooporder" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "Voorraadartikel is niet toegewezen" -#: order/models.py:2528 +#: order/models.py:2537 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:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "Kan voorraad niet toewijzen aan een regel zonder onderdeel" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Toewijzing hoeveelheid moet groter zijn dan nul" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "Verkooporder komt niet overeen met zending" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Verzending komt niet overeen met verkooporder" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Regel" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Verzendreferentie verkooporder" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Artikel" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Selecteer voorraadartikel om toe te wijzen" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Voer voorraadtoewijzingshoeveelheid in" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Retour order referentie" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Bedrijf van waaruit items worden teruggestuurd" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Retour bestelling status" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "Retourneer bestelregel item" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "Voorraad item moet worden opgegeven" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "Retour hoeveelheid overschrijdt voorraad hoeveelheid" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "Het retour aantal moet groter zijn dan nul" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "Ongeldige hoeveelheid voor geserialiseerde voorraad" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Selecteer te retourneren product van de klant" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Ontvangst datum" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "De datum waarop dit retour item is ontvangen" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Resultaat" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Resultaat van deze regel item" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Kosten geassocieerd met teruggave of reparatie voor deze regel item" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "Retourneren extra regel" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "Bestelling ID" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID van de bestelling om te dupliceren" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Kopieer regels" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Kopieer regelitems uit de oorspronkelijke bestelling" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Extra regels kopiëren" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Extra regelitems van de oorspronkelijke bestelling kopiëren" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Parameters kopiëren" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Artikelen" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Afgeronde regel items" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Artikel dupliceren" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Specificeer opties voor het dupliceren van deze bestelling" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Ongeldige order ID" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Leveranciers Naam" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "Order kan niet worden geannuleerd" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Toestaan order te sluiten met onvolledige regelitems" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "Bestelling heeft onvolledige regelitems" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "Order is niet open" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "Automatisch prijzen" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Koopprijs automatisch berekenen gebaseerd op leveranciers \n" " onderdelen gegevens" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Valuta Inkoopprijs" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Items samenvoegen" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Items met hetzelfde onderdeel, bestemming en doeldatum samenvoegen in één regelitem" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Intern Onderdeelnummer" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "Interne naam onderdeel" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "Leveranciersonderdeel moet worden gespecificeerd" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "Inkooporder moet worden gespecificeerd" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "De leverancier moet overeenkomen met de inkooporder" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "Inkooporder moet overeenkomen met de leverancier" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Artikel" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Voer batch code in voor inkomende voorraad items" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Vervaldatum" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "Voer vervaldatum in voor inkomende voorraad items" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Voer serienummers in voor inkomende voorraadartikelen" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "Overschrijf verpakkingsinformatie voor binnenkomende voorraad" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "Extra opmerking voor inkomende voorraad items" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Streepjescode" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Gescande streepjescode" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Streepjescode is al in gebruik" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Artikelen moeten worden opgegeven" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "Bestemmingslocatie moet worden opgegeven" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Geleverde streepjescodewaarden moeten uniek zijn" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "Verzendingen" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Voltooide Verzendingen" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "Toegewezen lijnen" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Valuta verkoopprijs" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "Toegewezen items" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Geen verzenddetails opgegeven" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "Artikelregel is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "Hoeveelheid moet positief zijn" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Voer serienummers in om toe te wijzen" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "Verzending is al verzonden" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "Zending is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "Geen overeenkomst gevonden voor de volgende serienummers" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "De volgende serienummers zijn niet beschikbaar" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Retourneer regel item" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "Regel item is al ontvangen" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "Artikelen kunnen alleen worden ontvangen tegen lopende bestellingen" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "Hoeveelheid te retourneren" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Lijn prijs valuta" @@ -5533,1174 +5614,1226 @@ msgstr "Restitutie" msgid "Reject" msgstr "Afwijzen" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Achterstallige inkooporder" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Inkooporder {po} is nu achterstallig" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Achterstallige Verkooporder" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Verkooporder {so} is nu achterstallig" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Achterstallige retour orders" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "Productieorder {ro} is nu achterstallig" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Favoriet" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Filter op categorieën met ster" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Diepte" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filteren op categorie diepte" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Hoogste niveau" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filteren op topniveau categorieën" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Stapelen" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Inclusief subcategorieën in gefilterde resultaten" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Bovenliggend" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Filter op bovenliggende categorie" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Subcategorieën uitsluiten in de opgegeven categorie" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Heeft resultaten" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Is een variant" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Is revisie" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Heeft revisies" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "BOM Valid" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" -msgstr "" +msgstr "Cascade Categorieën" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" -msgstr "" +msgstr "Indien waar, inclusief items op de onderliggende categorieën van de opgegeven categorie" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" -msgstr "" +msgstr "Filter op numerieke categorie-ID of de letterlijke 'null'" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "Bouw onderdeel is actief" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "Bouw onderdeel is te volgen" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Assemblage deel is testbaar" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "Onderdeel is actief" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "Onderdeel is trackable" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "Component onderdeel is testbaar" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "Onderdeel is nog te bouwen" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "Onderdeel is virtueel" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "Heeft beschikbare voorraad" + +#: part/api.py:1370 msgid "Uses" msgstr "Gebruik" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Onderdeel Categorie" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Onderdeel Categorieën" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Standaard locatie" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Standaard locatie voor onderdelen in deze categorie" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Structureel" -#: part/models.py:120 +#: part/models.py:119 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:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Standaard trefwoorden" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Standaard trefwoorden voor delen in deze categorie" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Pictogram" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Pictogram (optioneel)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "U kunt deze voorraadlocatie niet structureel maken omdat sommige voorraadartikelen er al in liggen!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "Sjabloon categorie parameters onderdeel" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Standaard waarde" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Standaard Parameter Waarde" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Onderdelen" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" -msgstr "" +msgstr "Kan parameters van een vergrendeld onderdeel niet verwijderen" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" -msgstr "" +msgstr "Kan de parameters van een vergrendeld onderdeel niet wijzigen" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "Kan dit deel niet verwijderen omdat het vergrendeld is" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "Kan dit deel niet verwijderen omdat het nog actief is" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "Kan dit deel niet verwijderen omdat het in een groep gebruikt is" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "{self}' kan niet worden gebruikt in BOM voor '{parent}' (recursief)" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "{parent}' wordt gebruikt in BOM voor '{self}' (recursief)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN moet overeenkomen met regex patroon {pattern}" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "Onderdeel kan geen herziening van zichzelf zijn" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "Kan geen revisie maken van een onderdeel dat al een revisie is" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "Revisie code moet worden opgegeven" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "Herzieningen zijn alleen toegestaan voor assemblageonderdelen" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "Kan geen revisie maken van een sjabloon onderdeel" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "Bovenliggend onderdeel moet naar dezelfde sjabloon verwijzen" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Voorraadartikel met dit serienummer bestaat al" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Dubbele IPN niet toegestaan in deelinstellingen" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Dubbele onderdeel revisie bestaat al." -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Onderdeel met deze naam, IPN en Revisie bestaat al." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Onderdelen kunnen niet worden toegewezen aan categorieën van structurele onderdelen!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Onderdeel naam" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Is een sjabloon" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Is dit deel van een sjabloon?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Is dit een variant van een ander deel?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variant van" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Beschrijving (optioneel)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Sleutelwoorden" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Deel sleutelwoorden om de zichtbaarheid van de zoekresultaten te verbeteren" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Onderdeel Categorie" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Onderdeel revisie of versienummer" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Revisie" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Is dit deel een herziening van een ander deel?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "Revisie van" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Waar wordt dit item normaal opgeslagen?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Standaard leverancier" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Standaardleverancier" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Standaard verval datum" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Verlooptijd (in dagen) voor voorraadartikelen van dit deel" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimum voorraad" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Minimaal toegelaten stock niveau" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Eenheden voor dit onderdeel" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Kan dit onderdeel uit andere delen worden gebouwd?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "Kan dit onderdeel gebruikt worden om andere onderdelen te bouwen?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "Heeft dit onderdeel een tracking voor unieke items?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "Kunnen de testresultaten van dit onderdeel tegen dit onderdeel worden geregistreerd?" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "Kan dit onderdeel worden gekocht van externe leveranciers?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "Kan dit onderdeel aan klanten worden verkocht?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Is dit onderdeel actief?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "Vergrendelde onderdelen kunnen niet worden bewerkt" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "Is dit een virtueel onderdeel, zoals een softwareproduct of licentie?" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "Stuklijst BOM gecontroleerd" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "Is de BOM voor dit deel geldig?" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "BOM checksum" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Checksum van BOM opgeslagen" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "BOM gecontroleerd door" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "BOM gecontroleerd datum" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Aanmaken gebruiker" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Eigenaar verantwoordelijk voor dit deel" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Verkopen van meerdere" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Valuta die gebruikt wordt voor de cache berekeningen" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Minimale BOM kosten" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Minimale kosten van onderdelen" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Maximale BOM kosten" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Maximale kosten van onderdelen" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Minimale aankoop kosten" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Minimale historische aankoop kosten" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Maximale aanschaf kosten" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Maximum historische aankoop kosten" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Minimale interne prijs" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Minimale kosten op basis van interne prijsschommelingen" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Maximale interne prijs" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Maximale kosten gebaseerd op interne prijsvoordelen" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Minimale leverancier prijs" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Minimale prijs van onderdeel van externe leveranciers" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Maximale leverancier prijs" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Maximale prijs van onderdeel van externe leveranciers" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Minimale variant kosten" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Berekende minimale kosten van variant onderdelen" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Maximale variant kosten" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Berekende maximale kosten van variant onderdelen" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Minimale kostprijs" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Overschrijf minimale kosten" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Maximale kosten" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Overschrijf maximale kosten" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Berekende minimale kosten" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Berekende totale maximale kosten" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Minimale verkoop prijs" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Minimale verkoopprijs gebaseerd op prijsschommelingen" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Maximale verkoop prijs" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Maximale verkoopprijs gebaseerd op prijsschommelingen" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Minimale verkoop prijs" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Minimale historische verkoop prijs" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Maximale verkoop prijs" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Maximale historische verkoop prijs" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Onderdeel voor voorraadcontrole" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Getelde items" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "Aantal individuele voorraadvermeldingen op het moment van voorraadcontrole" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "Totale voorraad op het moment van voorraadcontrole" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Datum" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Datum waarop voorraad werd uitgevoerd" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Minimale voorraadprijs" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Geschatte minimum kosten van de voorraad op de hand" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Maximale voorraadkosten" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "Geschatte maximale kosten van de hand van voorraad" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "Periodieke verkoopprijs voor onderdelen" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "Sjabloon test onderdeel" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Ongeldige sjabloonnaam - moet minstens één alfanumeriek teken bevatten" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Test sjablonen kunnen alleen worden gemaakt voor testbare onderdelen" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "Test template met dezelfde sleutel bestaat al voor een deel" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Test naam" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Geef een naam op voor de test" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "Test sleutel" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "Vereenvoudigde sleutel voor de test" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Test beschrijving" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Voer beschrijving in voor deze test" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "Is deze test ingeschakeld?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Vereist" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Is deze test nodig om te doorlopen?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Waarde vereist" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "Heeft deze test een waarde nodig bij het toevoegen van een testresultaat?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Vereist bijlage" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "Vereist deze test een bestandsbijlage bij het toevoegen van een testresultaat?" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld " -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Selecteer boven liggend onderdeel" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Sub onderdeel" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Selecteer onderdeel dat moet worden gebruikt in BOM" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "BOM hoeveelheid voor dit BOM item" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Dit BOM item is optioneel" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Dit BOM item is verbruikbaar (het wordt niet bijgehouden in build orders)" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "Totale hoeveelheid" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Extra benodigde hoeveelheid voor een build, rekening houdend met verliezen van de setup" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "Attriatie" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Geschatte uitstraling voor een gebouw, uitgedrukt in percentage (0-100)" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "Afronden meerdere" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Afronden met omhoog vereiste productiehoeveelheid naar dichtstbijzijnde meerdere van deze waarde" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Artikelregel referentie" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "BOM item notities" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Controle som" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "BOM lijn controle som" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Goedgekeurd" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Dit BOM item is goedgekeurd" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Wordt overgenomen" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Dit BOM item wordt overgenomen door BOMs voor variant onderdelen" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Voorraaditems voor variant onderdelen kunnen worden gebruikt voor dit BOM artikel" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Hoeveelheid moet een geheel getal zijn voor trackable onderdelen" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Onderdeel moet gespecificeerd worden" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "BOM Item vervangingen bewerken" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "Vervanging onderdeel kan niet hetzelfde zijn als het hoofddeel" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Bovenliggend BOM item" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Vervanging onderdeel" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Eerste deel" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Tweede deel" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Selecteer gerelateerd onderdeel" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "Opmerking voor deze relatie" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "Onderdeel relatie kan niet worden gecreëerd tussen een deel en zichzelf" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "Dubbele relatie bestaat al" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Bovenliggende categorie" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Bovenliggende onderdeel categorie" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Subcategorieën" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "Resultaten" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Aantal resultaten opgenomen ten opzichte van deze template" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Bestand is geen afbeelding" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Oorspronkelijk onderdeel" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Selecteer origineel onderdeel om te dupliceren" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Afbeelding kopiëren" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Copy BOM" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Kopieer materiaal van het oorspronkelijke deel" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Parameters kopiëren" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Parameter data kopiëren van het originele onderdeel" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Notities kopiëren" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Kopieer notities van het originele deel" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Tests kopiëren" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Test sjablonen kopiëren van het originele deel" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Eerste voorraad hoeveelheid" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Specificeer de initiële voorraad hoeveelheid voor dit onderdeel. Als het aantal nul is, wordt er geen voorraad toegevoegd." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Eerste voorraad locatie" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Specificeer locatie van de eerste voorraad voor dit onderdeel" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Selecteer leverancier (of laat leeg om niets in te vullen)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecteer fabrikant (of laat leeg om niets in te vullen)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Fabrikant artikel nummer" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Geselecteerde onderneming is geen geldige leverancier" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Geselecteerde bedrijf is geen geldige fabrikant" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Fabrikant deel dat overeenkomt met deze MPN bestaat al" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Leveranciersdeel dat overeenkomt met deze SKU bestaat al" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Categorie naam" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Bouwen" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Hoeveelheid van dit deel dat momenteel in productie is" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Er zal een onuitputtelijke hoeveelheid van dit deel worden gebouwd" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Voorraadartikelen" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "Revisies" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Leveranciers" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Totale Voorraad" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Niet toegewezen voorraad" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Variant voorraad" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Dupliceer onderdeel" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Kopieer eerste gegevens uit een ander onderdeel" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Eerste voorraad" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Maak onderdeel met eerste voorraad" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Leveranciersgegevens" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Aanvankelijke leveranciersinformatie voor dit deel toevoegen" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Categorie parameters kopiëren" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Parameter sjablonen kopiëren uit geselecteerde onderdeel categorie" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Bestaande afbeelding" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Bestandsnaam van een bestaande onderdeel afbeelding" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Afbeeldingsbestand bestaat niet" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Valideer de gehele materiaalbon" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Kan bouwen" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Vereist voor bouworders" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Toegewezen aan bouwen van orders" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Vereist voor verkooporders" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Toegewezen aan verkooporders" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "IPN onderdeel" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "Onderdeel omschrijving" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "Rapport Maken" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minimale prijs" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Overschrijf berekende waarde voor minimale prijs" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Minimale prijs valuta" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Maximale prijs" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Overschrijf de berekende waarde voor de maximale prijs" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Maximale prijs valuta" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Bijwerken" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Prijzen voor dit onderdeel bijwerken" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Kan niet converteren van de verstrekte valuta naar {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Minimumprijs mag niet hoger zijn dan de maximale prijs" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Maximale prijs mag niet lager zijn dan de minimale prijs" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Selecteer de bovenliggende assemblage" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Selecteer het onderdeel" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Selecteer onderdeel om BOM van te kopiëren" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Bestaande gegevens verwijderen" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Verwijder bestaande BOM items voor het kopiëren" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Inclusief overgenomen" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Inclusief stuklijst BOM items die worden overgenomen van getemplated onderdelen" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Ongeldige regels overslaan" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Schakel deze optie in om ongeldige rijen over te slaan" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Verwijder vervangend deel" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopieer vervangende onderdelen bij dubbele stuklijst BOM items" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Lage voorraad melding" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "De beschikbare voorraad voor {part.name} is onder het ingestelde minimumniveau gedaald" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Lage voorraad melding" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "U heeft 1 voorraad product dat de vervaldatum nadert" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "U hebt {item_count} voorraaditems die hun vervaldatum naderen" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Geen vervaldatum" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "{abs(days_diff)} dagen geleden" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Verloopt vandaag" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} dagen" @@ -6733,108 +6866,108 @@ msgstr "Geen actie gespecificeerd" msgid "No matching action found" msgstr "Geen overeenkomende actie gevonden" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Geen overeenkomst gevonden voor streepjescodegegevens" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Overeenkomst gevonden voor streepjescodegegevens" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "Model wordt niet ondersteund" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "Model instantie niet gevonden" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Barcode komt overeen met bestaand item" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "Geen overeenkomende actie gevonden" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "Geen overeenkomende leveranciers onderdelen gevonden" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "Meerdere overeenkomende leveranciers onderdelen gevonden" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "Geen overeenkomende plug-in gevonden voor barcode gegevens" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Overeenkomende leverancier onderdeel" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "Regel item is al ontvangen" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "Er komt geen plug-in overeen met de barcode van de leverancier" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "Meerdere overeenkomende regelitems gevonden" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "Geen overeenkomend voorraaditem gevonden" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "Geen verkooporder opgegeven" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "Streepjescode komt niet overeen met een bestaand voorraadartikel" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "Voorraad item komt niet overeen met regelitem" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Onvoldoende voorraad beschikbaar" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "Voorraad item toegewezen aan verkooporder" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Te weinig informatie" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "Gevonden overeenkomend item" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "Leveranciersdeel komt niet overeen met regelitem" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "Regelitem is al voltooid" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "Verdere informatie vereist om regelitem te ontvangen" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Inkoopregel ontvangen" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "Kon geen regelitem ontvangen" @@ -6973,7 +7106,7 @@ msgstr "Biedt ondersteuning voor barcodes" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7071,111 +7204,111 @@ msgstr "Uitgeven achterhaalde orders" msgid "Automatically issue orders that are backdated" msgstr "Automatisch orders uitgeven die achterhaald zijn" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "Niveau" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "Aantal te exporteren niveaus - ingesteld op nul om te exporteren alle BOM niveaus te exporteren" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "Totale hoeveelheid" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "De totale hoeveelheid van elk onderdeel in de BOM opnemen" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "Voorraad gegevens" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "Inclusief voorraadgegevens" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "Prijs gegevens" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "Inclusief prijsgegevens" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "Leveranciersgegevens" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "Inclusief leveranciersgegevens" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "Fabrikant gegevens" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "Inclusief fabrikant gegevens" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "Vervang Data" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "Voeg vervangende deelgegevens toe" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "Parameter gegevens" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "Parametergegevens van onderdeel opnemen" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "Meerdere niveau BOM export" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "Biedt ondersteuning voor het exporteren van multi-level BOMs" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "BOM niveau" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "Vervanging {n}" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "Leverancier {n}" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "Leverancier {n} SKU" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "Leverancier {n} MPN" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "Fabrikant {n}" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "Fabrikant {n} MPN" @@ -7190,19 +7323,19 @@ msgstr "Biedt ondersteuning voor het exporteren van gegevens van InvenTree" #: plugin/builtin/exporter/parameter_exporter.py:16 msgid "Exclude Inactive" -msgstr "" +msgstr "Uitsluiten van niet-actief" #: plugin/builtin/exporter/parameter_exporter.py:17 msgid "Exclude parameters which are inactive" -msgstr "" +msgstr "Uitsluiten van niet-actieve parameters" #: plugin/builtin/exporter/parameter_exporter.py:29 msgid "Parameter Exporter" -msgstr "" +msgstr "Parameter exporteur" #: plugin/builtin/exporter/parameter_exporter.py:30 msgid "Exporter for model parameter data" -msgstr "" +msgstr "Exporteur voor modelparameter gegevens" #: plugin/builtin/exporter/stocktake_exporter.py:25 msgid "Include External Stock" @@ -7277,7 +7410,7 @@ msgid "Integrated Slack notification methods" msgstr "Geïntegreerde Slack meldingsmethoden" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "Slack inkomende webhook url" #: plugin/builtin/integration/core_notifications.py:132 @@ -7355,11 +7488,11 @@ msgstr "InvenTree machine label printer" msgid "Provides support for printing using a machine" msgstr "Biedt ondersteuning voor het printen met een machine" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "laatst gebruikt" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "Opties" @@ -7537,8 +7670,8 @@ msgid "Key of plugin" msgstr "Sleutel van plug-in" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "Plugin naam van de plug-in" +msgid "Name of the plugin" +msgstr "Plug-in naam van de plug-in" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7572,21 +7705,21 @@ msgstr "Pakket plug-in" msgid "Plugin" msgstr "Plug-in" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Geen auteur gevonden" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "De plug-in '{p}' is niet compatibel met de huidige InvenTree versie {v}" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "De plug-in vereist minimaal versie {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Plug-in vereist op de hoogste versie {v}" @@ -7764,7 +7897,7 @@ msgid "Installation not confirmed" msgstr "Installatie niet bevestigd" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "Ofwel de pakketnaam van de URL moet worden opgegeven" #: plugin/serializers.py:188 @@ -8073,7 +8206,7 @@ msgstr "Totaal" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serienummer" @@ -8098,7 +8231,7 @@ msgstr "Rapport voorraadcontrole" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Geïnstalleerde items" @@ -8131,495 +8264,519 @@ msgstr "Geen resultaat (verplicht)" msgid "No result" msgstr "Geen resultaat" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Asset bestand bestaat niet" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "Afbeelding bestand niet gevonden" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "part_image tag vereist een onderdeel instantie" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "bedrijf_imagetag vereist een bedrijfsinstantie" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Filter op locatie diepte" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Filter op topniveau locaties" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Inclusief sublocaties in gefilterde resultaten" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "Bovenliggende locatie" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filter op bovenliggende locatie" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Naam van onderdeel (hoofdletter ongevoelig)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Naam van onderdeel bevat (hoofdletter ongevoelig)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Naam onderdeel (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Deel IPN (hoofdletter ongevoelig)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Onderdeel IPN bevat (hoofdletter ongevoelig)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Deel IPN (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Minimale voorraad" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Maximale voorraad" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Status code" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Externe locatie" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Verbruikt door productieorder" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Geïnstalleerd in een ander voorraadartikel" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Boomstructuur onderdeel" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Eerder bijgewerkt" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Bijgewerkt na" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Voorraadcontrole voor" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Voorraadcontrole na" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Vervaldatum voor" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Vervaldatum na" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Verouderd" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Voorraad PK om dit item en al zijn afstammelingen uit te sluiten" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "Cascade locaties" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "Indien waar, inclusief items op de onderliggende locaties van de opgegeven locatie" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Filter op numerieke locatie ID of de letterlijke 'null'" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Hoeveelheid is vereist" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Geldig onderdeel moet worden opgegeven" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Het opgegeven leveranciers onderdeel bestaat niet" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Het leveranciersdeel heeft een pakketgrootte gedefinieerd, maar vlag use_pack_size niet ingesteld" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serienummers kunnen niet worden meegeleverd voor een niet traceerbaar onderdeel" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" -msgstr "" +msgstr "Inclusief geïnstalleerde" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" -msgstr "" +msgstr "Als correct, geef testresultaten voor items die onder het opgegeven voorraadartikel zijn geïnstalleerd" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" -msgstr "" +msgstr "Filter op numerieke voorraadartikel ID" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" -msgstr "" +msgstr "Voorraadartikel met ID {id} bestaat niet" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "Inclusief Onderdeel varianten" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "Datum na" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "Datum voor" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "Voorraad locatie soort" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "Voorraad locatie soorten" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "Standaardpictogram voor alle locaties waarvoor geen pictogram is ingesteld (optioneel)" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Voorraadlocatie" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Voorraadlocaties" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Eigenaar" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Selecteer eigenaar" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Voorraaditems kunnen niet direct worden geplaatst op een structurele voorraadlocatie, maar kunnen zich op onderliggende locaties bevinden." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Extern" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Dit is een externe voorraadlocatie" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Locatie type" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "Voorraad locatie type van deze locatie" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "U kunt deze voorraadlocatie niet structureel maken omdat sommige voorraadartikelen er al in liggen!" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "{field} bestaat niet" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Onderdeel moet gespecificeerd worden" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Voorraaditems kunnen niet worden geplaatst in structurele voorraadlocaties!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "Voorraadartikel kan niet worden aangemaakt voor virtuele onderdelen" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Onderdeel type ('{self.supplier_part.part}') moet {self.part} zijn" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Hoeveelheid moet 1 zijn voor item met een serienummer" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Serienummer kan niet worden ingesteld als de hoeveelheid groter is dan 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Item kan niet tot zichzelf behoren" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Item moet een bouw referentie hebben als is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Bouw referentie verwijst niet naar hetzelfde deel object" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Bovenliggend voorraad item" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Basis onderdeel" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Selecteer een leveranciersdeel voor dit voorraadartikel" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Waar bevindt zich dit voorraaditem?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "Het verpakken van dit voorraaditem is opgeslagen in" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Geïnstalleerd in" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Is dit item geïnstalleerd in een ander item?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Serienummer van dit item" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Batch code voor dit voorraaditem" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Voorraad hoeveelheid" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Bron Bouw" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Build voor dit voorraaditem" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Verbruikt door" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Bestelling bouwen welke dit voorraadartikel heeft verbruikt" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Inkooporder Bron" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Bestemming Verkooporder" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Vervaldatum voor voorraadartikel. Voorraad zal worden beschouwd als verlopen na deze datum" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Verwijderen bij leegmaken" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Verwijder dit voorraadproduct wanneer de voorraad is leeg" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Enkele eenheidsprijs van de aankoop op het moment van aankoop" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Omgezet tot onderdeel" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "Hoeveelheid overschrijdt beschikbare voorraad" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Onderdeel is niet ingesteld als traceerbaar" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Hoeveelheid moet heel getal zijn" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Hoeveelheid mag niet hoger zijn dan de beschikbare voorraad ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Serienummers moeten als lijst worden opgegeven" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Hoeveelheid komt niet overeen met serienummers" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" -msgstr "" +msgstr "Kan voorraad niet toewijzen aan structurele locatie" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Testsjabloon bestaat niet" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Voorraadartikel is toegewezen aan een verkooporder" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Voorraad item is geïnstalleerd in een ander item" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Voorraadartikel bevat andere producten" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Voorraadartikel is aan een klant toegewezen" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Voorraad item is momenteel in productie" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Geserialiseerde voorraad kan niet worden samengevoegd" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Dupliceer voorraadartikelen" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Voorraadartikelen moeten hetzelfde onderdeel verwijzen" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Voorraadartikelen moeten verwijzen naar dezelfde leveranciersdeel" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "De voorraad statuscodes moeten overeenkomen" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Voorraadartikel kan niet worden verplaatst omdat het niet op voorraad is" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Voorraad item volgen" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Item notities" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Resultaat voorraad test resultaten" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Waarde moet voor deze test worden opgegeven" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Bijlage moet worden geüpload voor deze test" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Ongeldige waarde voor deze test" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Test resultaat" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Test uitvoer waarde" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Test resultaat bijlage" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Test notities" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "Test station" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "De identificatie van het teststation waar de test werd uitgevoerd" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "Gestart" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Het tijdstip van de start test" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "Afgerond" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Het tijdstip van de afgeronde test" @@ -8663,246 +8820,246 @@ msgstr "Selecteer onderdeel voor het genereren van het serienummer voor" msgid "Quantity of serial numbers to generate" msgstr "Aantal serienummers om te genereren" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "Test template voor dit resultaat" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" -msgstr "" +msgstr "Geen overeenkomende test gevonden voor dit onderdeel" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "SjabloonID of testnaam moet worden opgegeven" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "De testtijd kan niet eerder zijn dan de starttijd van de test" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Bovenliggend Item" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "Bovenliggende voorraad item" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Gebruik pakketgrootte bij het toevoegen: de hoeveelheid gedefinieerd is het aantal pakketten" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "Gebruik pakketgrootte" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Voer serienummers voor nieuwe items in" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Leverancier artikelnummer" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Verlopen" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Onderliggende items" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "Items volgen" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "Inkoopprijs van dit voorraadartikel, per eenheid of pakket" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Aantal voorraaditems om serienummers voor te maken" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "Geen voorraad item opgegeven" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Hoeveelheid mag niet hoger zijn dan de beschikbare voorraad ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Locatie van bestemming" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "Serienummers kunnen niet worden toegewezen aan dit deel" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Serienummers bestaan al" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Selecteer voorraaditem om te installeren" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "Te installeren hoeveelheid" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "Voer de te installeren hoeveelheid items in" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Transactienotitie toevoegen (optioneel)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "Te installeren hoeveelheid moet minimaal 1 zijn" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "Voorraadartikel is niet beschikbaar" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "Het geselecteerde deel zit niet in de materialen lijst" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "De te installeren hoeveelheid mag niet groter zijn dan de beschikbare hoeveelheid" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Bestemmingslocatie voor verwijderd item" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "Selecteer onderdeel om voorraaditem om te zetten in" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "Het geselecteerde deel is geen geldige optie voor de omzetting" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Kan voorraadartikel niet converteren met toegewezen leverancier deel" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "Voorraad status code" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "Selecteer voorraadartikelen om status te wijzigen" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "Geen voorraaditems geselecteerd" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Sublocaties" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "Bovenliggende voorraad locatie" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "Onderdeel moet verkoopbaar zijn" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "Artikel is toegewezen aan een verkooporder" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "Artikel is toegewezen aan een productieorder" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Klant om voorraadartikelen toe te wijzen" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "Geselecteerde bedrijf is geen klant" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Voorraad toewijzing notities" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "Een lijst met voorraad artikelen moet worden opgegeven" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Voorraad samenvoegen notities" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Niet overeen komende leveranciers toestaan" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "Toestaan dat voorraadartikelen met verschillende leveranciers onderdelen worden samengevoegd" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Sta onjuiste status toe" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "Toestaan dat voorraadartikelen met verschillende statuscodes worden samengevoegd" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Er moeten ten minste twee voorraadartikelen worden opgegeven" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Geen wijziging" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Voorraaditem primaire sleutel waarde" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "Voorraad artikel is niet op voorraad" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "Voorraad artikel is al in voorraad" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "Hoeveelheid mag niet negatief zijn" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Voorraad transactie notities" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "Samenvoegen in bestaande voorraad" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "Voeg indien mogelijk geretourneerde items samen in bestaande voorraad" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "Volgend serienummer" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "Vorig serienummer" @@ -8960,7 +9117,7 @@ msgstr "Voorraad handmatig verwijderd" #: stock/status_codes.py:56 msgid "Serialized stock items" -msgstr "" +msgstr "Geserialiseerde voorraadartikelen" #: stock/status_codes.py:58 msgid "Returned to stock" @@ -9384,83 +9541,83 @@ msgstr "Verkooporders" msgid "Return Orders" msgstr "Retour orders" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Gebruikersnaam" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Voornaam :" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Voornaam van de gebruiker" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Achternaam" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Achternaam van de gebruiker" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "E-mailadres van de gebruiker" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Medewerkers" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Heeft deze gebruiker medewerker machtigingen" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Administrator " -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Is deze gebruiker een administrator " -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Is dit gebruikersaccount actief" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "Enkel een supergebruiker kan dit veld aanpassen" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "Wachtwoord" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "Wachtwoord voor de gebruiker" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "Overschrijf waarschuwing" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "Overschrijf de waarschuwing over wachtwoord regels" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "U hebt geen toestemming om gebruikers aan te maken" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Je account is aangemaakt." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Gebruik de wachtwoordreset functie om in te loggen" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Welkom bij InvenTree" diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po index 97d2525c34..6be817f879 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API-endepunkt ikke funnet" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Brukeren har ikke rettigheter til å se denne modellen" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "E-post (gjenta)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Bekreft e-postaddresse" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Du må angi samme e-post hver gang." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Den oppgitte primære e-postadressen er ikke gyldig." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Det oppgitte e-postdomenet er ikke godkjent." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Kunne ikke konvertere {original} til {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Ugyldig mengde oppgitt" @@ -112,13 +104,13 @@ msgstr "Oppgi dato" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Notater" @@ -131,75 +123,75 @@ msgstr "Verdi '{name}' vises ikke i mønsterformat" msgid "Provided value does not match required pattern: " msgstr "Angitt verdi samsvarer ikke med påkrevd mønster: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Tom serienummerstreng" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Duplisert serienummer" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Gruppesekvens {group} overskrider tillatt antall ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Ingen serienummer funnet" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Fjern HTML-tagger fra denne verdien" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Tilkoblingsfeil" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Serveren svarte med ugyldig statuskode" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Det har oppstått et unntak" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarte med ugyldig \"Content-Length\"-verdi" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Bildestørrelsen er for stor" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Bildenedlasting overskred maksimal størrelse" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Ekstern server returnerte tomt svar" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Angitt URL er ikke en gyldig bildefil" @@ -207,11 +199,11 @@ msgstr "Angitt URL er ikke en gyldig bildefil" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-post" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "Referansen må samsvare påkrevd mønster" msgid "Reference number is too large" msgstr "Referansenummeret er for stort" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Ugyldig valg" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Beskrivelse" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Beskrivelse (valgfritt)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Sti" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikatnavn kan ikke eksistere under samme overordnede" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Markdown-notater (valgfritt)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Strekkodedata" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Tredjeparts strekkodedata" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Strekkode-hash" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Unik hash av strekkodedata" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Eksisterende strekkode funnet" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serverfeil" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "En feil har blitt logget av serveren." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Bilde" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Må være et gyldig tall" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Velg valuta ut fra tilgjengelige alternativer" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Ugyldig verdi" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Eksternt bilde" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URLtil ekstern bildefil" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Nedlasting av bilder fra ekstern URL er ikke aktivert" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Kinesisk (forenklet)" msgid "Chinese (Traditional)" msgstr "Kinesisk (tradisjonell)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "Ugyldig fysisk enhet" msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Ordrestatus" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Overordnet produksjon" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategori" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Produksjonen må avbrytes før den kan slettes" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Forbruksvare" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Valgfritt" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Sammenstilling" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Spores" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Tildelt" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tilgjengelig" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "I bestilling" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Produksjonsordre" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Plassering" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Produksjonsordrer" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Sammenstillings-BOMen er ikke godkjent" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Produksjonsordre kan ikke opprettes for en inaktiv del" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Produksjonsordre kan ikke opprettes for en ulåst del" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Ansvarlig bruker eller gruppe må spesifiseres" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Produksjonsordrens del kan ikke endres" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Produksjonsordre-referanse" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Produksjonsordre-referanse" msgid "Reference" msgstr "Referanse" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Kort beskrivelse av produksjonen (valgfritt)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Produksjonsordre som denne produksjonen er tildelt" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Velg del å produsere" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Salgsordrereferanse" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Salgsordren denne produksjonen er tildelt til" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Kildeplassering" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Velg plassering å ta lagerbeholdning fra for denne produksjonen (la stå tomt for a ta fra alle lagerplasseringer)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Fullført plassering" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Velg plassering der fullførte artikler vil bli lagret" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Produksjonsmengde" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Antall lagervarer å produsere" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Fullførte artikler" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Antall lagervarer som er fullført" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Produksjonsstatus" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Produksjonsstatuskode" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Batchkode" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Batchkode for denne produksjonsartikkelen" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Opprettelsesdato" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Forventet sluttdato" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Måldato for ferdigstillelse. Produksjonen vil være forfalt etter denne datoen." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Fullført dato" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "fullført av" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Utstedt av" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Brukeren som utstedte denne produksjonsordren" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ansvarlig" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Bruker eller gruppe ansvarlig for produksjonsordren" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Ekstern lenke" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Lenke til ekstern URL" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Produksjonsprioritet" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Produksjonsordrens prioritet" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Prosjektkode" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Prosjektkode for denne produksjonsordren" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Kunne ikke delegere bort oppgaven for å fullføre tildelinger" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Produksjonsordre {build} er fullført" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "En produksjonsordre er fullført" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Serienumre må angis for sporbare deler" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Ingen produksjonsartikkel spesifisert" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Produksjonsartikkelen er allerede fullført" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Kvantitet kan ikke være større enn utgangsantallet" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Produksjonsartikkel {serial} har ikke bestått alle påkrevde tester" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Produksjonsartikkel" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Produksjonsobjekt" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Produksjonsobjekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Antall" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Påkrevd antall for produksjonsordre" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Produksjonselement må spesifisere en produksjonsartikkel, da master-del er merket som sporbar" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "Valgt lagervare samsvarer ikke med BOM-linjen" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Mengden må være 1 for serialisert lagervare" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tildelt antall ({q}) kan ikke overstige tilgjengelig lagerbeholdning ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Lagervaren er overtildelt" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Tildelingsantall må være større enn null" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Mengden må være 1 for serialisert lagervare" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "Valgt lagervare samsvarer ikke med BOM-linjen" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Lagervare" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Kildelagervare" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Lagerantall å tildele til produksjonen" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Monteres i" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Lagervare for montering" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Delnavn" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Etikett for prosjektkode" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Produksjonsartikkel" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Produksjonsartikkel samsvarer ikke med overordnet produksjon" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Resultatdel samsvarer ikke med produksjonsordredel" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Denne produksjonsartikkelen er allerede fullført" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Denne produksjonsartikkelen er ikke fullt tildelt" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Angi antall for produksjonsartikkel" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Heltallsverdi kreves for sporbare deler" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Heltallsverdi kreves, da stykklisten inneholder sporbare deler" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Angi serienummer for produksjonsartikler" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Lagerplassering for produksjonsartikkel" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Automatisk tildeling av serienummer" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienummer finnes allerede eller er ugyldige" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "En liste over produksjonsartikler må oppgis" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Lagerplassering for skrotede produksjonsartikler" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Forkast tildelinger" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Forkast tildelinger fra skrotede produksjonsartikler" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Grunn for skroting av produksjonsartikler" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Plassering for ferdige produksjonsartikler" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Godta ufullstendig tildeling" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Fullfør artikler dersom lagerbeholdning ikke er fullt tildelt" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Bruk tildelt lagerbeholdning" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Bruk all lagerbeholdning som allerede er tildelt denne produksjonen" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Fjern ufullstendige artikler" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Slett alle produksjonsartikler som ikke er fullført" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Ikke tillatt" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Godta som brukt av denne produksjonsordren" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Fjern tildeling før produksjonsordren fullføres" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Overtildelt lagerbeholdning" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Hvordan vil du håndtere ekstra lagervarer tildelt produksjonsordren" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Noen lagervarer har blitt overtildelt" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Godta ikke tildelt" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Godta at lagervarer ikke er fullt tildelt til denne produksjonsordren" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Nøvendig lagerbeholdning er ikke fullt tildelt" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Godta uferdig" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Godta at nødvendig antall fullførte produksjonsartikler ikke er nådd" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Nødvendig produksjonsmengde er ikke nådd" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Produksjonsordren har uferdige artikler" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Produksjonslinje" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Produksjonsartikkel" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Produksjonsartikkel må peke til samme produksjon" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Produksjonsartikkel" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part må peke på den samme delen som produksjonsordren" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "Artikkelen må være på lager" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgjengelig antall ({q}) overskredet" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Produksjonsartikkel må spesifiseres for tildeling av sporede deler" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Produksjonsartikkel kan ikke spesifiseres for tildeling av usporede deler" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Tildelingsartikler må oppgis" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lagerplassering hvor deler skal hentes (la stå tomt for å ta fra alle plasseringer)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Eksluderer plassering" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Ekskluder lagervarer fra denne valgte plasseringen" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Utskiftbar lagerbeholdning" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Lagervarer ved flere plasseringer kan brukes om hverandre" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Erstatning-lagerbeholdning" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Tilatt tildelling av erstatningsdeler" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Valgfrie artikler" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Tildel valgfrie BOM-artikler til produksjonsordre" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Kunne ikke starte auto-tideling" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "BOM-referanse" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Leverandørdel" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Tildelt antall" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Produksjonsreferanse" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Delkategorinavn" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Sporbar" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Nedarvet" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Tillat Varianter" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "BOM-artikkel" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "I produksjon" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Ekstern lagerbeholdning" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Tilgjengelig lagerbeholdning" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Tilgjengelige erstatningsvarer" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Tilgjengelige variantvarer" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "Kansellert" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Fullført" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Lagerbeholdning kreves for produksjonsordre" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Forfalt produksjonsordre" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Produksjonsordre {bo} er nå forfalt" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "Er lenke" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "Er fil" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Brukeren har ikke tillatelse til å slette dette vedlegget" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Ugyldig valutakode" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Valutakode eksisterer allerede" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Ingen gyldige valutakoder angitt" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Ingen programtillegg" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Etikett for prosjektkode" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Oppdatert" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Tidsstempel for forrige oppdatering" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Unik prosjektkode" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Prosjektbeskrivelse" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Bruker eller gruppe ansvarlig for dette prosjektet" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Innstillings verdi" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Valgt verdi er ikke et gyldig alternativ" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Verdien må være en boolsk verdi" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Verdien må være et heltall" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Nøkkelstreng må være unik" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Bruker" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Antall for prisbrudd" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Pris" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Enhetspris på spesifisert antall" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Endepunkt" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Endepunktet hvor denne webhooken er mottatt" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Navn for webhooken" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktiv" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Er webhooken aktiv" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Sjetong" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Nøkkel for tilgang" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Hemmelig" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Delt hemmlighet for HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "Melding ID" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Unik Id for denne meldingen" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Vert" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Verten denne meldingen ble mottatt fra" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Tittel" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Overskrift for denne meldingen" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Brødtekst" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Innholdet i meldingen" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Endepunktet meldingen ble mottatt fra" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Arbeidet med" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Var arbeidet med denne meldingen ferdig?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Tittel" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Lenke" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Publisert" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Forfatter" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Sammendrag" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Les" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Er dette nyhetselementet lest?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Bildefil" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "Enhetssymbolet må være unikt" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Enhetsnavn må være en gyldig identifikator" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Enhetsnavn" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Valgfritt enhetssymbol" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definisjon" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Enhetsdefinisjon" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Vedlegg" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Fil mangler" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Mangler eksternlenke" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Velg fil å legge ved" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Kommentar" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Vedleggskommentar" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Opplastet dato" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Datoen som filen ble lastet opp" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Filstørrelse" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Filstørrelse i byte" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Ugyldig modelltype spesifisert for vedlegg" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Verdi" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Opprettet" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Sist oppdatert" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Parametermal" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "Sjekkboksparameter kan ikke ha enheter" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "Sjekkboksparameter kan ikke ha valg" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "Valg må være unike" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "Navn på parametermal må være unikt" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Parameternavn" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Enheter" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Fysisk enheter for denne parameteren" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Parameterbeskrivelse" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Sjekkboks" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Er dette parameteret en sjekkboks?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Valg" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gyldige valg for denne parameteren (kommaseparert)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Aktivert" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Ugyldig valg for parameterverdi" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Mal" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Parameterverdi" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Notat" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Valgfritt notatfelt" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultat" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Nøkkel" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} kansellert" msgid "A order that is assigned to you was canceled" msgstr "En ordre som er tildelt til deg ble kansellert" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Artikler mottatt" @@ -2351,93 +2359,101 @@ msgstr "Artikler har blitt mottatt mot en innkjøpsordre" msgid "Items have been received against a return order" msgstr "Artikler har blitt mottatt mot en returordre" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Kjører" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Ventende oppgaver" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Planlagte oppgaver" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Mislykkede oppgaver" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "Oppgave-ID" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Unik oppgave-ID" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Lås" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Låsetidspunkt" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Oppgavenavn" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Funksjon" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Funksjonsnavn" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumenter" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Oppgaveargumenter" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Nøkkelordargumenter" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Nøkkelordargumenter for oppgave" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Filnavn" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Modelltype" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Brukeren har ikke tillatelse tillatelse å opprette eller endre vedlegg for denne modellen" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "Ingen gruppe" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "Nettstedets URL er låst av konfigurasjon" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Omstart kreves" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "En innstilling har blitt endret som krever en omstart av serveren" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Ventende migrasjoner" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Antall ventende databasemigreringer" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Navn på serverinstans" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Strengbeskrivelse for serverinstansen" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Bruk instansnavn" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Bruk instansnavnet på tittellinjen" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Begrens visning av 'om'" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Vis `about`-modal kun til superbrukere" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Firmanavn" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Internt firmanavn" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "Base-URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "Base-URL for serverinstans" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Standardvaluta" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Velg grunnvalutaen for prisberegninger" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Støttede valutaer" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Liste over støttede valutakoder" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Oppdateringsintervall for valuta" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Hvor ofte valutakurser skal oppdateres (sett til null for å deaktiverere)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "dager" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Valutaoppdaterings-plugin" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Valgt valutaoppdaterings-plugin" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Last ned fra URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Tillat nedlastning av eksterne bilder og filer fra ekstern URL" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Nedlastingsgrense" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Maksimal tillatt nedlastingsstørrelse for eksternt bilde" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "User-Agent brukt for å laste ned fra URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Tillat overstyring av User-Agent brukt for å laste ned bilder og filer fra eksterne URLer (lå stå blank for standard)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Streng URL-validering" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Krev skjemaspesifikasjon ved validering av URLer" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Intervall for oppdateringssjekk" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Tidsintervall for å se etter oppdateringer(sett til null for å skru av)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Automatisk sikkerhetskopiering" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Aktiver automatisk sikkerhetskopiering av database og mediafiler" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Automatisk sikkerhetskopieringsintervall" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Angi antall dager mellom automatiske sikkerhetskopieringshendelser" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Slettingsintervall for oppgaver" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Bakgrunnsoppgaveresultater vil bli slettet etter antall angitte dager" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Slettingsintervall for feillogg" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Feilloggene vil bli slettet etter et angitt antall dager" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Slettingsintervall for varsler" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Brukervarsler slettes etter angitt antall dager" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Strekkodestøtte" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Aktiver støtte for strekkodeleser i webgrensesnittet" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Innlesingsforsinkelse for strekkode" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Tidsforsinkelse for behandling av strekkode" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Støtte for strekkodewebkamera" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Tillat strekkodelesning via webkamera i nettleseren" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "Vis Strekkodedata" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Vis strekkodedata som tekst" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Delrevisjoner" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Aktiver revisjonsfeltet for Del" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "IPN regex" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulært uttrykksmønster for matching av internt delnummer" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Tilat duplikat av internt delnummer" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Tillat flere deler å dele samme interne delnummer" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Tillat redigering av internt delnummer" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Tillat endring av IPN-verdien mens du redigerer en del" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Kopier BOM-data fra del" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopier BOM-data som standard når du dupliserer en del" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Kopier parameterdata fra del" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopier parameterdata som standard ved duplisering av en del" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Kopier testdata fra del" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Kopier testdata som standard ved duplisering av en del" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Kopier designmaler for kategoriparametere" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Kopier parametermaler for kategori ved oppretting av en del" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Deler er maler som standard" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Deler kan settes sammen fra andre komponenter som standard" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Deler kan bli brukt som underkomponenter som standard" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Kjøpbar" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Deler er kjøpbare som standard" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Salgbar" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Deler er salgbare som standard" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Deler er sporbare som standard" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtuelle" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Deler er virtuelle som standard" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Vis relaterte deler" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Vis relaterte deler i en del" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Innledende lagerbeholdningsdata" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Tillat oppretting av innledende lagerbeholdning når en ny del opprettes" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Innledende leverandørdata" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Tillat oppretting av innledende leverandørdata når en ny del opprettes" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Visningsformat for delnavn" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Format for å vise delnavnet" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Standardikon for delkategorier" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Standardikon for delkategorier (tomt betyr ingen ikon)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Minimum antall desimalplasser for priser" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimum antall desimalplasser som skal vises når man gjengir prisdata" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Maksimalt antall desimalplasser for priser" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maksimalt antall desimalplasser som skal vises når man gjengir prisdata" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Bruk leverandørpriser" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Inkluder leverandørprisbrudd i beregninger av totalpriser" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Innkjøpshistorikkoverstyring" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historiske innkjøpspriser overstyrer leverandørprisnivåer" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Bruk lagervarepriser" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Bruk priser fra manuelt innlagte lagervarer for prisberegninger" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Lagervare prisalder" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Unnta lagervarer som er eldre enn dette antall dager fra prisberegninger" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Bruk Variantpriser" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Inkluder variantpriser i beregninger av totale priser" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Kun aktive varianter" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Bruk kun aktive variantdeler til beregning av variantprising" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Intervall for rekalkulering av priser" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Antall dager før delpriser blir automatisk oppdatert" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Interne Priser" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Aktiver interne priser for deler" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Intern prisoverstyring" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Hvis tilgjengelig, overstyrer interne priser kalkulering av prisområde" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Aktiver etikettutskrift" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Aktiver utskrift av etiketter fra nettleseren" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "Etikettbilde-DPI" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI-oppløsning når når det genereres bildefiler for sending til utvidelser for etikettutskrift" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Aktiver Rapporter" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Aktiver generering av rapporter" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Feilsøkingsmodus" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Generer rapporter i feilsøkingsmodus (HTML-output)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Sidestørrelse" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Standard sidestørrelse for PDF-rapporter" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Tving parameterenheter" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Hvis det er angitt en enhet, skal parameterverdiene samsvare med de angitte enhetene" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Globalt Unike Serienummer" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummer for lagervarer må være globalt unike" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Slett oppbrukt lagerbeholdning" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Batchkodemal" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Mal for generering av standard batchkoder for lagervarer" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Lagerbeholdning utløper" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Aktiver funksjonalitet for utløp av lagerbeholdning" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Selg utløpt lagerbeholdning" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Tillat salg av utgått lagerbeholdning" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Foreldet lagerbeholdning tidsintervall" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Antall dager før lagervarer er ansett som foreldet før utløp" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Produsér Utløpt Lagerbeholdning" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Tillat produksjon med utløpt lagerbeholdning" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Kontroll over eierskap av lagerbeholdning" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Aktiver eierskap over lagerplasseringer og -varer" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Lagerplassering standard ikon" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Lagerplassering standard ikon (tomt betyr ingen ikon)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Vis installerte lagervarer" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Vis installerte lagervarer i lagertabeller" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Produksjonsordre-referansemønster" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Nødvendig mønster for å generere Produksjonsordre-referansefeltet" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Aktiver returordrer" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Aktiver returordrefunksjonalitet i brukergrensesnittet" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Returordre-referansemønster" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Rediger fullførte returordrer" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Tillat redigering av returordrer etter de er fullført" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Salgsordre-referansemønster" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Påkrevd mønster for å generere salgsordrereferansefelt" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Salgsordre standard fraktmetode" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Aktiver opprettelse av standard forsendelse med salgsordrer" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Rediger fullførte salgsordrer" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Tillat redigering av salgsordrer etter de har blitt sendt eller fullført" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Referansemønster for innkjøpsordre" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Obligatorisk mønster for generering av referansefelt for innkjøpsordre" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Rediger fullførte innkjøpsordre" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Tillat redigering av innkjøpsordre etter at de har blitt sendt eller fullført" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Autofullfør innkjøpsordrer" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatisk merk innkjøpsordre som fullført når alle ordrelinjer er mottatt" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Aktiver passord glemt" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Ativer funskjon for glemt passord på innloggingssidene" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Aktiver registrering" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Aktiver egenregistrerting for brukerer på påloggingssidene" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Aktiver SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Aktiver SSO på innloggingssidene" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Aktiver SSO-registrering" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Aktiver selvregistrering via SSO for brukere på innloggingssiden" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "E-postadresse kreves" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Krevt at brukere angir e-post ved registrering" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Auto-utfyll SSO-brukere" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Fyll automatisk ut brukeropplysninger fra SSO-kontodata" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "E-post to ganger" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Spør brukeren om e-post to ganger ved registrering" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Passord to ganger" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Spør brukeren om passord to ganger ved registrering" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Tillatte domener" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Begrens registrering til bestemte domener (kommaseparert, begynner med @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Gruppe ved registrering" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Krev MFA" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Brukere må bruke flerfaktorsikkerhet." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Sjekk utvidelser ved oppstart" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Sjekk at alle utvidelser er installert ved oppstart - aktiver i containermiljøer" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Aktiver URL-integrasjon" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Tillat utvidelser å legge til URL-ruter" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Aktiver navigasjonsintegrasjon" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Tillat utvidelser å integrere mot navigasjon" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Aktiver app-integrasjon" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Tillat utvidelser å legge til apper" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Aktiver tidsplanintegrasjon" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Tillat utvidelser å kjøre planlagte oppgaver" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Aktiver hendelsesintegrasjon" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Tillat utvidelser å reagere på interne hendelser" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Ekskluder eksterne plasseringer" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Automatisk varetellingsperiode" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "Vis brukernes fulle navn" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "Vis brukernes fulle navn istedet for brukernavn" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "Vis brukernes fulle navn" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Vis brukernes fulle navn istedet for brukernavn" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "Delen er aktiv" msgid "Manufacturer is Active" msgstr "Leverandør er aktiv" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "Leverandørdel er aktiv" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "Intern del er aktiv" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "Leverandør er aktiv" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Produsent" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Firma" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Firmaer" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Beskrivelse av firma" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Beskrivelse av firmaet" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Nettside" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "Bedriftens nettside URL" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Telefonnummer" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Kontakt-telefonnummer" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontakt e-post" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakt" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Kontaktpunkt" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link til ekstern bedriftsinformasjon" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "Er firmaet aktivt?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "Er kunde" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Selger du varer til dette firmaet?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "Er leverandør" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Kjøper du varer fra dette firmaet?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Er produsent" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Produserer dette firmaet deler?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Standardvaluta brukt for dette firmaet" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Adresse" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Adresser" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Velg selskap" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Adressetittel" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Tittel som beskriver addressen" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Hovedadresse" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Sett som hovedadresse" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Linje 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Adresselinje 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Linje 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Adresselinje 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Postnummer" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Poststed/område" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Postnummerets by/område" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Delstat/provins" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Delstat eller provins" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Land" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Adressens land" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notater til transportør" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notater for transportør" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Interne fraktnotater" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Fraktnotater for internt bruk" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Lenke til adresseinformasjon (ekstern)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Produsentdeler" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Basisdel" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Velg del" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Velg produsent" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Produsentens varenummer" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL for ekstern produsentdel-lenke" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Produsentens delbeskrivelse" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Pakkeenhetene må være komptible med delens basisenhet" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Pakkeenhet må være mer enn null" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Den sammenkoblede produsentdelen må referere til samme basisdel" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Leverandør" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Velg leverandør" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Leverandørens lagerbeholdningsenhet" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Er denne leverandørdelen aktiv?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Velg produsentdel" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL for ekstern leverandørdel-lenke" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Leverandørens delbeskrivelse" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "grunnkostnad" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum betaling (f.eks. lageravgift)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Emballasje" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Delemballasje" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Pakkeantall" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Totalt antall i en enkelt pakke. La være tom for enkeltenheter." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "flere" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Bestill flere" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Antall tilgjengelig fra leverandør" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Tilgjengelighet oppdatert" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Dato for siste oppdatering av tilgjengelighetsdata" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Leverandørens prisbrudd" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Standardvaluta brukt for denne leverandøren" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Bedriftsnavn" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "På lager" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "Plassert" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Datafil" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Gyldig" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Ukjent" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Ordrereferanse" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Opprettet av" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Ordre" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Intern del" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Fullført" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Innkjøpsordre" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Innkjøpsordre" msgid "Sales Order" msgstr "Salgsordre" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Total pris" msgid "Total price for this order" msgstr "Total pris for denne ordren" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Ordrevaluta" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta for denne ordren (la stå tom for å bruke firmastandard)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Kontakten samsvarer ikke med valgt firma" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Ordrebeskrivelse (valgfritt)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Velg prosjektkode for denne ordren" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Lenke til ekstern side" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Måldato" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Forventet dato for levering av ordre. Bestillingen vil være forfalt etter denne datoen." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Sendt dato" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Dato bestillingen ble sendt" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Bruker eller gruppe ansvarlig for ordren" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Kontaktpunkt for denne ordren" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Selskapsadresse for denne ordren" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Ordrereferanse" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Status for innkjøpsordre" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Firma som varene blir bestilt fra" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Leverandørreferanse" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Leverandørens ordrereferanse" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "mottatt av" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Dato ordre ble fullført" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Destinasjon" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Delleverandør må matche PO-leverandør" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Linjeelementet samsvarer ikke med innkjøpsordre" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Mengde må være positiv" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Kunde" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Firma som varene selges til" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Kundereferanse " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Kundens ordrereferanse" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Forsendelsesdato" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "sendt av" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Kun en åpen ordre kan merkes som fullført" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Bestillingen kan ikke fullføres da det finnes ufullstendige forsendelser" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 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:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Antall" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Linjereferanse" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Linjenotater" -#: order/models.py:1797 +#: order/models.py:1812 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:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Linjeelementbeskrivelse (valgfritt)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Ytterligere kontekst for denne linjen" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Enhetspris" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "Delens leverandør må samsvare med leverandør" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Leverandørdel" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Mottatt" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Antall enheter mottatt" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Innkjøpspris" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Enhet-innkjøpspris" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "Kun salgbare deler kan tildeles en salgsordre" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Salgspris" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Enhets-salgspris" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Sendt" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Sendt antall" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Dato for forsendelse" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Leveringsdato" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Dato for levering av forsendelse" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Sjekket Av" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Brukeren som sjekket forsendelsen" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Forsendelse" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Forsendelsesnummer" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Sporingsnummer" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Sporingsinformasjon for forsendelse" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Referansenummer for tilknyttet faktura" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "Forsendelsen er allerede sendt" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "Forsendelsen har ingen tildelte lagervarer" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "Lagervarer er ikke blitt tildelt" -#: order/models.py:2528 +#: order/models.py:2537 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:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "Kan ikke tildele lagerbeholdning til en linje uten en del" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tildelingsantall kan ikke overstige tilgjengelig lagerbeholdning" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Tildelingsantall må være større enn null" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "Antall må være 1 for serialisert lagervare" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "Salgsordre samsvarer ikke med forsendelse" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Forsendelsen samsvarer ikke med salgsordre" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Linje" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Forsendelsesreferanse for salgsordre" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Artikkel" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Velg lagervare å tildele" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Angi lagertildelingsmengde" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Returordre-referanse" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Firmaet delen skal returneres fra" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Returordrestatus" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Velg artikkel som skal returneres fra kunde" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Mottatt Dato" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "Datoen denne returartikkelen ble mottatt" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Utfall" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Utfall for dette linjeelementet" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Kostnad forbundet med retur eller reparasjon for dette linjeelementet" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopier parametere" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Linjeelementer" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Leverandørnavn" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "Ordren kan ikke kanselleres" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Tillat ordre å lukkes med ufullstendige linjeelementer" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "Ordren har ufullstendige linjeelementer" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "Ordren er ikke åpen" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Innkjøpsvaluta" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "SKU-kode" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Internt delnummer" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "Leverandørdel må angis" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "Innkjøpsordre må angis" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "Leverandør må samsvare med innkjøpsordre" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "Innkjøpsordre må samsvare med leverandør" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Ordrelinje" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Velg lagerplassering for mottatte enheter" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Angi batchkode for innkommende lagervarer" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Utløpsdato" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Angi serienummer for innkommende lagervarer" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Strekkode" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Skannet strekkode" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Strekkode allerede i bruk" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Linjeelementer må være oppgitt" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "Målplassering må angis" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Angitte strekkodeverdier må være unike" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Fullførte forsendelser" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Valuta for salgspris" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Ingen forsendelsesopplysninger oppgitt" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "Linjeelement er ikke knyttet til denne ordren" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "Mengden må være positiv" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Skriv inn serienummer for å tildele" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "Forsendelsen er allerede sendt" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "Forsendelsen er ikke knyttet til denne ordren" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "Ingen treff funnet for følgende serienummer" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Returordrelinje" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "Linjeelementet samsvarer ikke med returordre" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "Linjeelementet er allerede mottatt" -#: order/serializers.py:2076 +#: order/serializers.py:2040 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:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Valuta for linje" @@ -5532,1174 +5613,1226 @@ msgstr "Refusjon" msgid "Reject" msgstr "Avvis" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Forfalt Innkjøpsordre" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Innkjøpsordre {po} er nå forfalt" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Forfalt Salgsordre" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Salgsordre {so} er nå forfalt" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Delkategori" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Delkategorier" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Standard plassering" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Standardplassering for deler i denne kategorien" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Strukturell" -#: part/models.py:120 +#: part/models.py:119 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:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Standard nøkkelord" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Standard nøkkelord for deler i denne kategorien" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Ikon" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (valgfritt)" -#: part/models.py:182 +#: part/models.py:181 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:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Standardverdi" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Standard Parameterverdi" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Deler" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, 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:723 +#: part/models.py:701 #, 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:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN må samsvare med regex-mønsteret {pattern}" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Lagervare med dette serienummeret eksisterer allerede" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplikat av internt delnummer er ikke tillatt i delinnstillinger" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Del med dette Navnet, internt delnummer og Revisjon eksisterer allerede." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Deler kan ikke tilordnes strukturelle delkategorier!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Delnavn" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Er Mal" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Er delen en maldel?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Er delen en variant av en annen del?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variant av" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Delbeskrivelse (valgfritt)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Nøkkelord" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Del-nøkkelord for å øke synligheten i søkeresultater" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Delkategori" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Delrevisjon eller versjonsnummer" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Revisjon" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Hvor er denne artikkelen vanligvis lagret?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Standard leverandør" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Standard leverandørdel" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Standard utløp" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Utløpstid (i dager) for lagervarer av denne delen" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimal lagerbeholdning" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Minimum tillatt lagernivå" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Måleenheter for denne delen" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Kan denne delen bygges fra andre deler?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "Kan denne delen brukes til å bygge andre deler?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "Har denne delen sporing av unike artikler?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "Kan denne delen kjøpes inn fra eksterne leverandører?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "Kan denne delen selges til kunder?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Er denne delen aktiv?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 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:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Kontrollsum for BOM" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Lagret BOM-kontrollsum" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "Stykkliste sjekket av" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "Stykkliste sjekket dato" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Opprettingsbruker" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Eier ansvarlig for denne delen" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Selg flere" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Valuta som brukes til å bufre prisberegninger" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Minimal BOM-kostnad" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Minste kostnad for komponentdeler" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Maksimal BOM-kostnad" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Maksimal kostnad for komponentdeler" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Minimal innkjøpskostnad" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Minimal historisk innkjøpskostnad" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Maksimal innkjøpskostnad" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Maksimal historisk innkjøpskostnad" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Minimal intern pris" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Minimal kostnad basert på interne prisbrudd" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Maksimal intern pris" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Maksimal kostnad basert på interne prisbrudd" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Minimal leverandørpris" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Minimumspris for del fra eksterne leverandører" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Maksimal leverandørpris" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Maksimalpris for del fra eksterne leverandører" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Minimal Variantkostnad" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Beregnet minimal kostnad for variantdeler" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Maksimal Variantkostnad" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Beregnet maksimal kostnad for variantdeler" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Minimal kostnad" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Overstyr minstekostnad" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Maksimal kostnad" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Overstyr maksimal kostnad" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Beregnet samlet minimal kostnad" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Beregnet samlet maksimal kostnad" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Minimal salgspris" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Minimal salgspris basert på prisbrudd" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Maksimal Salgspris" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Maksimal salgspris basert på prisbrudd" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Minimal Salgskostnad" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Minimal historisk salgspris" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Maksimal Salgskostnad" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Maksimal historisk salgspris" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Del for varetelling" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Antall" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "Antall individuelle lagerenheter på tidspunkt for varetelling" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "Total tilgjengelig lagerbeholdning på tidspunkt for varetelling" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Dato" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Dato for utført lagertelling" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Minimal lagerkostnad" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Estimert minimal kostnad for lagerbeholdning" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Maksimal lagerkostnad" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "Estimert maksimal kostnad for lagerbeholdning" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Testnavn" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Angi et navn for testen" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Testbeskrivelse" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Legg inn beskrivelse for denne testen" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Påkrevd" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Er det påkrevd at denne testen bestås?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Krever verdi" -#: part/models.py:3781 +#: part/models.py:3747 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:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Krever vedlegg" -#: part/models.py:3788 +#: part/models.py:3754 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:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Velg overordnet del" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Underordnet del" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Velg del som skal brukes i BOM" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "BOM-antall for denne BOM-artikkelen" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Denne BOM-artikkelen er valgfri" -#: part/models.py:4028 +#: part/models.py:4006 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:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "BOM-artikkelreferanse" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "BOM-artikkelnotater" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Kontrollsum" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "BOM-linje kontrollsum" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Godkjent" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Denne BOM-artikkelen er godkjent" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Arves" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Denne BOM-artikkelen er arvet fra stykkliste for variantdeler" -#: part/models.py:4101 +#: part/models.py:4079 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:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Antall må være heltallsverdi for sporbare deler" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Underordnet del må angis" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "BOM-artikkel erstatning" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "Erstatningsdel kan ikke være samme som hoveddelen" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Overordnet BOM-artikkel" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Erstatningsdel" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Velg relatert del" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 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:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "Duplikatforhold eksisterer allerede" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Innkjøpsvaluta for lagervaren" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Original Del" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Velg original del å duplisere" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopier Bilde" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Kopier bilde fra originaldel" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Kopier Stykkliste" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Kopier stykkliste fra original del" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Kopier parametere" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Kopier parameterdata fra originaldel" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Kopier notater" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Kopier notater fra originaldel" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Angi initiell lagermengde for denne delen. Hvis antall er null, er ingen lagerbeholdning lagt til." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Innledende lagerplassering" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Angi initiell lagerplasering for denne delen" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Velg leverandør (eller la stå tom for å hoppe over)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Velg produsent (eller la stå tom for å hoppe over)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Produsentens delenummer" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Valgt firma er ikke en gyldig leverandør" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Valgt firma er ikke en gyldig produsent" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Produsentdel som matcher dette MPN-et, finnes allerede" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Leverandørdel som matcher denne SKU-en, finnes allerede" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategorinavn" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Produseres" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Lagervarer" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Leverandører" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Total lagerbeholdning" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Dupliser del" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Kopier innledende data fra en annen del" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Lag en del med innledende lagermengde" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Leverandøropplysninger" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Legg til innledende leverandørinformasjon for denne delen" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kopier kategoriparametre" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Kopier parametermaler fra valgt delkategori" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Eksisterende bilde" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Filnavn for et eksisterende del-bilde" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Bildefilen finnes ikke" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Godkjenn hele Stykklisten" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Kan Produsere" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minstepris" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Overstyr beregnet verdi for minimumspris" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Valuta for minstepris" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Makspris" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Overstyr beregnet verdi for maksimal pris" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Valuta for maksimal pris" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Oppdater" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Oppdater priser for denne delen" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Kan ikke konvertere fra gitte valutaer til {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Minsteprisen kan ikke være større enn maksimal pris" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Maksimal pris kan ikke være mindre enn minstepris" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Velg del å kopiere BOM fra" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Fjern eksisterende data" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Fjern eksisterende BOM-artikler før kopiering" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Inkluder arvede" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Inkluder BOM-artikler som er arvet fra maldeler" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Hopp over ugyldige rader" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Kopier erstatningsdeler" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Varsel om lav lagerbeholdning" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Tilgjengelig lagerbeholdning for {part.name} har falt under det konfigurerte minimumsnivået" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "Ingen handling spesifisert" msgid "No matching action found" msgstr "Ingen samsvarende handling funnet" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Ingen treff funnet for strekkodedata" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Treff funnet for strekkodedata" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Strekkode samsvarer med ekisterende element" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "Ingen samsvarende del-data funnet" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "Finner ingen matchende leverandørdeler" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "Flere samsvarende leverandørdeler funnet" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Fant leverandørdel" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "Artikkelen er allerede mottatt" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "Flere samsvarende elementer funnet" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "Ingen samsvarende element funnet" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "Strekkoden samsvarer ikke med eksisterende lagervare" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "Lagervare samsvarer ikke med linjeelement" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Utilstrekkelig lagerbeholdning" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "Lagervaren er tildelt en salgsordre" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Ikke nok informasjon" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "Mer informasjon nødvendig for å motta artikkelen" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Mottok ordreartikkelen" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "Gir innebygd støtte for strekkoder" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "Slack innkommende webhook" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Utvidelsens \"Key\"" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "Navn på utvidelsen" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "Utvidelse" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Ingen forfatter funnet" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, 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:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Utvidelsen krever minst versjon {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Utvidelsen krever maks versjon {v}" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "Installasjonen ble ikke bekreftet" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "Enten pakkenavn eller URL må angis" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serienummer" @@ -8097,7 +8230,7 @@ msgstr "Testrapport for lagervare" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Installerte artikler" @@ -8130,495 +8263,519 @@ msgstr "Ingen resultat (obligatorisk)" msgid "No result" msgstr "Ingen resultat" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Asset-filen eksisterer ikke" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "Bildefil ikke funnet" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "part_image-taggen krever en Part-instans" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "company_image-taggen krever en Company-instans" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Statuskode" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Ekstern plassering" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Del-tre" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Utløpsdato før" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Utløpsdato etter" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Foreldet" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Antall kreves" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Gyldig del må oppgis" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Oppgitt leverandørdel eksisterer ikke" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Leverandørdelen har en pakkestørrelse definert, men flagget \"use_pack_size\" er ikke satt" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serienumre kan ikke angis for en ikke-sporbar del" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "Lagerplasseringstype" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "Lagerplasseringstyper" -#: stock/models.py:98 +#: stock/models.py:100 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:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Lagerplassering" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Lagerplasseringer" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Eier" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Velg eier" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Lagervarer kan ikke knyttes direkte mot en strukturell lagerplassering, men kan knyttes mot underplasseringer." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Ekstern" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Dette er en ekstern lagerplassering" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Plasseringstype" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "Lagerplasseringstype for denne plasseringen" -#: stock/models.py:308 +#: stock/models.py:296 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:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagervarer kan ikke plasseres i strukturelle plasseringer!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "Lagervare kan ikke opprettes for virtuelle deler" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Deltype ('{self.supplier_part.part}') må være {self.part}" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Antall må være 1 for produkt med et serienummer" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Serienummeret kan ikke angis hvis antall er større enn 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Elementet kan ikke tilhøre seg selv" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Elementet må ha en produksjonsrefereanse om is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Produksjonsreferanse peker ikke til samme del-objekt" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Overordnet lagervare" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Basisdel" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Velg en tilsvarende leverandørdel for denne lagervaren" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Hvor er denne lagervaren plassert?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "Inpakningen denne lagervaren er lagret i" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Installert i" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Er denne artikkelen montert i en annen artikkel?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Serienummer for denne artikkelen" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Batchkode for denne lagervaren" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Lagerantall" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Kildeproduksjon" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Produksjon for denne lagervaren" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Brukt av" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Produksjonsordren som brukte denne lagervaren" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Kildeinnkjøpsordre" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Innkjøpsordre for denne lagervaren" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Tildelt Salgsordre" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Utløpsdato for lagervare. Lagerbeholdning vil bli ansett som utløpt etter denne datoen" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Slett når oppbrukt" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Slett lagervaren når beholdningen er oppbrukt" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Innkjøpspris per enhet på kjøpstidspunktet" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Konvertert til del" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Delen er ikke angitt som sporbar" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Antall må være heltall" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Antallet stemmer ikke overens med serienumrene" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Lagervare har blitt tildelt en salgsordre" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Lagervare er montert i en annen artikkel" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Lagervare inneholder andre artikler" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Lagervare har blitt tildelt til en kunde" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Lagervare er for tiden i produksjon" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Serialisert lagerbeholdning kan ikke slås sammen" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Duplisert lagervare" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Lagervarer må referere til samme del" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Lagervarer må referere til samme leverandørdel" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Lagerstatuskoder må være like" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Lagervare kan ikke flyttes fordi den ikke er på lager" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Oppføringsnotater" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Verdi må angis for denne testen" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Vedlegg må lastes opp for denne testen" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Testresultat" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Testens verdi" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Vedlegg til testresultat" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Testnotater" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Overodnet element" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 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:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Angi serienummer for nye artikler" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Leverandørens delnummer" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Utløpt" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Underordnede artikler" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "Innkjøpspris for denne lagervaren, per enhet eller forpakning" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Angi antall lagervarer som skal serialiseres" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Antall kan ikke overstige tilgjengelig lagerbeholdning ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Til Lagerplassering" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "Serienummer kan ikke tilordnes denne delen" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Seriernummer eksisterer allerede" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Velg lagervare å montere" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "Antall å installere" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "Angi antallet elementer som skal installeres" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Legg til transaksjonsnotat (valgfritt)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "Antall å installere må være minst 1" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "Lagervaren er utilgjengelig" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "Valgt del er ikke i stykklisten" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "Antall å installere må ikke overskride tilgjengelig antall" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Lagerplassering for den avinstallerte artikkelen" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "Velg del å konvertere lagervare til" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "Valgt del er ikke et gyldig alternativ for konvertering" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Kan ikke konvertere lagerprodukt med tildelt leverandørdel" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "Lagervare statuskode" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "Velg lagervarer for å endre status" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "Ingen lagervarer valgt" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Underplasseringer" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "Delen må være salgbar" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "Artikkelen er tildelt en salgsordre" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "Artikkelen er tildelt en produksjonsordre" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Kunde å tilordne lagervarer" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "Valgt firma er ikke en kunde" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Lagervare-tildelignsnotater" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "En liste av lagervarer må oppgis" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Notater om lagersammenslåing" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Tillat forskjellige leverandører" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "Tillat lagervarer med forskjellige leverandørdeler å slås sammen" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Tillat forskjellig status" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "Tillat lagervarer med forskjellige statuskoder å slås sammen" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Minst to lagervarer må oppgis" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Lagervare primærnøkkel verdi" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Lager transaksjonsnotater" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "Salgsordre" msgid "Return Orders" msgstr "Returordrer" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Brukernavn" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Fornavn" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Fornavn på brukeren" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Etternavn" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Etternavn på brukeren" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "E-postadressen til brukeren" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Personale" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Har denne brukeren personelltillatelser" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Superbruker" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Er denne brukeren en superbruker" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Er denne brukerkontoen aktiv" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Din konto er opprettet." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Vennligst bruk funksjonen for å tilbakestille passord for å logge inn" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Velkommen til InvenTree" diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po index 806279a514..7a18f9b40f 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "Nie znaleziono punktu końcowego API" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Dla operacji masowych należy podać wykaz przedmiotów lub filtrów" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Elementy muszą być podane jako lista" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Podano nieprawidłową listę artykułów" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Filtry muszą być dostarczone jako kartka" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Podano niepoprawne filtry" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Wszystkie filtry muszą być używane tylko z true" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Żaden element nie spełnia podanych kryteriów" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Nie dostarczono danych" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Użytkownik nie ma uprawnień do przeglądania tego modelu" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Adres email (ponownie)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Potwierdzenie adresu email" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Należy ponownie wpisać ten sam adres e-mail." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Podany podstawowy adres e-mail jest nieprawidłowy." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Podany e-mail domeny nie został zatwierdzony." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nie udało się przeliczyć {original} na {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Podano nieprawidłową ilość" @@ -112,13 +104,13 @@ msgstr "Wprowadź dane" msgid "Invalid decimal value" msgstr "Niepoprawna wartość dziesiętna" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Uwagi" @@ -131,75 +123,75 @@ msgstr "Wartość '{name}' nie pojawia się w formacie wzoru" msgid "Provided value does not match required pattern: " msgstr "Podana wartość nie pasuje do wymaganego wzoru: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Nie można serializować więcej niż 1000 przedmiotów naraz" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Pusty ciąg numeru seryjnego" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Podwójny numer seryjny" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Nieprawidłowa grupa: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Zakres grupy {group} przekracza dozwoloną ilość ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nie znaleziono numerów seryjnych" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Liczba niepowtarzających się numerów seryjnych ({n}) musi odpowiadać ilości / liczbie ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Usuń znaczniki HTML z tej wartości" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Dane zawierają zabronione treści znacznika" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Błąd połączenia" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Serwer odpowiedział z nieprawidłowym kodem statusu" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Wystąpił wyjątek" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Serwer odpowiedział z nieprawidłową wartością Content-Length" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Rozmiar obrazu jest zbyt duży" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Przekroczono maksymalny rozmiar pobieranego obrazu" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Zdalny serwer zwrócił pustą odpowiedź" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Podany adres URL nie jest poprawnym plikiem obrazu" @@ -207,11 +199,11 @@ msgstr "Podany adres URL nie jest poprawnym plikiem obrazu" msgid "Log in to the app" msgstr "Logowanie do aplikacji" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Adres E-Mail" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Musisz włączyć uwierzytelnianie dwuskładnikowe przed wykonaniem czegokolwiek innego." @@ -255,133 +247,124 @@ msgstr "Odniesienie musi być zgodne z wymaganym wzorem" msgid "Reference number is too large" msgstr "Numer odniesienia jest zbyt duży" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Błędny wybór" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nazwa" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Opis (opcjonalny)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Ścieżka" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikaty nazw nie mogą istnieć pod tym samym rodzicem" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Notatki Markdown (opcjonalne)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Dane kodu kreskowego" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Dane kodu kreskowego stron trzecich" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Hasz kodu kreskowego" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Unikalny hasz danych kodu kreskowego" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Znaleziono istniejący kod kreskowy" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Niepowodzenie zadania" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Zadanie pracownika w tle '{f}' nie powiodło się po próbach {n}" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Błąd serwera" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Błąd został zapisany w logach serwera." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Obraz" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Waluta" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Wybierz walutę z dostępnych opcji" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Nieprawidłowa wartość" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Obrazek zewnętrzny" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "Adres URL zdalnego pliku obrazu" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Pobieranie obrazów ze zdalnego URL nie jest włączone" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Nie udało się pobrać obrazu ze zdalnego adresu URL" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "chiński (uproszczony)" msgid "Chinese (Traditional)" msgstr "chiński (tradycyjny)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "Dostępna aktualizacja" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "Dostępna jest aktualizacja dla InvenTree" @@ -553,30 +536,30 @@ msgstr "Niewłaściwa jednostka fizyczna" msgid "Not a valid currency code" msgstr "Nieprawidłowy kod waluty" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Status zamówienia" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Budowa nadrzędna" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Obejmuje warianty" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Obejmuje warianty" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Obejmuje warianty" msgid "Part" msgstr "Komponent" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategoria" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Budowa poprzednika" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Przypisane do mnie" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Stworzony przed" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Stworzony po" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Ma datę rozpoczęcia" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Data rozpoczęcia przed" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Data rozpoczęcia po" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Posiada docelową datę" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Data docelowa przed" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Docelowa data po" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Zakończone przed" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Zakończone po" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "Minimalna data" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "Maksymalna data" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Wyklucz drzewo" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Kompilacja musi zostać anulowana, zanim będzie mogła zostać usunięta" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Materiał eksploatacyjny" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Opcjonalne" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Złożenie" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Śledzony" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Testowalne" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Zaległe zamówienie" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Przydzielono" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Dostępne" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "W Zamówieniu" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Zlecenie Budowy" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Lokalizacja" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Wyjście" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Zlecenia budowy" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Zbiór BOM nie został zatwierdzony" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Zlecenie budowy nie może być utworzone dla nieaktywnej części" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Zlecenie budowy nie może zostać utworzone dla odblokowanej części" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Odpowiedzialny użytkownik lub grupa muszą być określone" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Nie można zmienić elementu kompletacji" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Data docelowa musi być po dacie rozpoczęcia" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Odwołanie do zamówienia wykonania" msgid "Reference" msgstr "Referencja" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Krótki opis produkcji (opcjonalny)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Zamówienie budowy, do którego budowa jest przypisana" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Wybierz część do budowy" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Odwołanie do zamówienia sprzedaży" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Zamówienie sprzedaży, do którego budowa jest przypisana" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Lokalizacja źródła" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Wybierz lokalizację, z której pobrać element do budowy (pozostaw puste, aby wziąć z dowolnej lokalizacji)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "Budowa zewnętrzna" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Lokalizacja docelowa" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Wybierz lokalizację, w której będą przechowywane ukończone elementy" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Ilość do stworzenia" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Ilość przedmiotów do zbudowania" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Ukończone elementy" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Ilość produktów magazynowych które zostały ukończone" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Status budowania" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Kod partii" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Data utworzenia" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "Data rozpoczęcia budowy" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Zaplanowana data rozpoczęcia dla tego zamówienia budowy" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Docelowy termin zakończenia" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Docelowa data zakończenia kompilacji. Po tej dacie kompilacja będzie zaległa." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Data zakończenia" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "zrealizowane przez" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Wydany przez" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Użytkownik, który wydał to zamówienie" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odpowiedzialny" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Użytkownik lub grupa odpowiedzialna za te zlecenie produkcji" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Link Zewnętrzny" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link do zewnętrznego adresu URL" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Priorytet budowy" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Priorytet tego zamówienia produkcji" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Kod projektu" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Kod projektu dla tego zlecenia produkcji" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Nie udało się wyładować zadania, aby ukończyć alokację budowli" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Kolejność kompilacji {build} została zakończona" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Kolejność kompilacji została zakończona" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Należy podać numery seryjne dla lokalizowania części" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nie określono danych wyjściowych budowy" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Budowanie wyjścia jest już ukończone" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Ilość nie może być większa niż ilość wyjściowa" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Wyjście budowy {serial} nie przeszło wszystkich testów" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Zbuduj obiekt" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Zbuduj obiekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Ilość" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Wymagana ilość dla zlecenia produkcji" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Element kompilacji musi określać dane wyjściowe kompilacji, ponieważ część główna jest oznaczona jako możliwa do śledzenia" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "Wybrana pozycja magazynowa nie pasuje do pozycji w zestawieniu BOM" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Ilość musi wynosić 1 dla serializowanych zasobów" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Przydzielona ilość ({q}) nie może przekraczać dostępnej ilości zapasów magazynowych ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Pozycja magazynowa jest nadmiernie przydzielona" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Alokowana ilość musi być większa niż zero" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Ilość musi wynosić 1 dla serializowanych zasobów" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "Wybrana pozycja magazynowa nie pasuje do pozycji w zestawieniu BOM" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "Przydzielona ilość przekracza dostępną ilość zapasów" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Element magazynowy" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Lokalizacja magazynowania przedmiotu" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Ilość zapasów do przydzielenia do produkcji" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Zainstaluj do" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Docelowa lokalizacja magazynowa przedmiotu" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Poziom budowania" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nazwa komponentu" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Numer seryjny" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Automatycznie przydzielaj numery seryjne" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Poniższe numery seryjne już istnieją lub są nieprawidłowe" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Odrzuć przydziały" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Zaakceptuj niekompletną alokację" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Usuń produkcje, które nie zostały zakończone" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Niedozwolone" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Zaakceptuj jako zużyte przez zlecenie produkcji" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Nadmierny przydział zasobów" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Zaakceptuj nieprzydzielone" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Zaakceptuj, że przedmioty magazynowe nie zostały w pełni przypisane do tego zlecenia budowy" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Wymagany stan nie został w pełni przypisany" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Akceptuj niekompletne" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostępna ilość ({q}) przekroczona" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Magazyn, z którego mają być pozyskane elementy (pozostaw puste, aby pobrać z dowolnej lokalizacji)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Wyklucz lokalizację" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Wyklucz produkty magazynowe z wybranej lokalizacji" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Magazyn wymienny" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Towary magazynowe w wielu lokalizacjach mogą być stosowane zamiennie" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Zastępczy magazyn" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Przedmiot opcjonalny" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Przydziel opcjonalne elementy BOM do zbudowania zamówienia" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Odniesienie BOM" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID części BOM" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Nazwa części BOM" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Wersja" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Część dostawcy" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Ilość zarezerwowana" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Możliwość śledzenia" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Zezwalaj na warianty" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "W produkcji" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Zew. zasoby magazynowe" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Dostępna ilość" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Dostępny magazyn zastępczy" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "Wstrzymane" msgid "Cancelled" msgstr "Anulowano" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Zakończono" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "Jest plikiem" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Brak wtyczki" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Zaktualizowany" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Data ostatniej aktualizacji" @@ -1546,778 +1554,778 @@ msgstr "Zaktualizowano przez" msgid "User who last updated this object" msgstr "Użytkownik, który ostatnio zaktualizował ten obiekt" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Unikalny kod projektu" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Opis projektu" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Klucz ustawień" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Ustawienia wartości" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Wybrana wartość nie jest poprawną opcją" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Wartość musi być wartością binarną" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Wartość musi być liczbą całkowitą" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "Wartość musi być poprawną liczbą" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "Wartość nie zgadza się z kontrolą poprawności" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Ciąg musi być unikatowy" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Użytkownik" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Cena" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Cena jednostkowa po określonej ilości" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Punkt końcowy" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktywny" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Token dostępu" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Sekret" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Współdzielony sekret dla HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "Id wiadomości" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Unikalny identyfikator dla tej wiadomości" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Host" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Host, od którego otrzymano tę wiadomość" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Nagłówek" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Nagłówek tej wiadomości" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Zawartość" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Treść tej wiadomości" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Opracowany na" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Czy prace nad tą wiadomością zostały zakończone?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "Id" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Tytuł" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Łącze" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Opublikowano" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Autor" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Podsumowanie" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Czytaj" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Czy ta wiadomość była przeczytana?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Plik obrazu" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Jednostka Niestandardowa" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "Symbol jednostki musi być unikalny" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Nazwa jednostki musi być prawidłowym identyfikatorem" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Nazwa jednostki" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Opcjonalny symbol jednostki" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definicja" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Definicja jednostki" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Załącznik" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Brak pliku" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Brak zewnętrznego odnośnika" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Typ modelu" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "Docelowy typ modelu dla obrazu" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Wybierz plik do załączenia" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Komentarz" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Komentarz do załącznika" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Data dodania" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Data przesłania pliku" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Rozmiar pliku" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Rozmiar pliku w bajtach" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Wartość" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Etykieta" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Kolor" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Model" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "Model musi być wybrany" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "Klucz musi być wybrany" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Zablokowany" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Utworzony" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Ostatnia aktualizacja" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Jednostki" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Aktywne" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Szablon" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Dane" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Wartość parametru" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Uwaga" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Wynik" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "Doręczono" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Klucz" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} anulowany" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "Nadpisz" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Jest uruchomiony" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Oczekujce zadania" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Zaplanowane zadania" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Zadania zakończone błędem" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID zadania" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Unikalny identyfikator zadania" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Blokada" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Czas blokady" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Nazwa zadania" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Funkcja" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Nazwa funkcji" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumenty" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumenty zadania" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Nazwa pliku" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Typ modelu" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Użytkownik nie ma uprawnień do tworzenia lub edytowania załączników dla tego modelu" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lista wyboru jest zablokowana" @@ -2445,1128 +2461,1157 @@ msgstr "Lista wyboru jest zablokowana" msgid "No group" msgstr "Brak grupy" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "Adres URL witryny jest zablokowany przez konfigurację" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Wymagane ponowne uruchomienie" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Zmieniono ustawienie, które wymaga restartu serwera" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Oczekujące migracje" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Liczba oczekujących migracji bazy danych" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "Aktywne kody ostrzeżeń" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "ID instancji" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "Unikalny identyfikator dla tej instancji InvenTree" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Nazwa instancji serwera" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Użyj nazwy instancji" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nazwa firmy" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Wewnętrzna nazwa firmy" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "Bazowy URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "Bazowy adres URL dla instancji serwera" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Domyślna waluta" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Interwał aktualizacji waluty" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Jak często aktualizować kursy wymiany walut (ustaw zero aby wyłączyć)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "dni" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Wtyczka aktualizacji waluty" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Pobierz z adresu URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Zezwól na pobieranie zewnętrznych obrazów i plików z zewnętrznego URL" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Limit rozmiaru pobierania" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Ścisła weryfikacja adresu URL" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Wymagaj specyfikacji schematu podczas sprawdzania poprawności adresów URL" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Częstotliwość sprawdzania aktualizacji" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Jak często aktualizować kursy wymiany walut (ustaw zero aby wyłączyć)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Automatyczna kopia zapasowa" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Włącz automatyczną kopię zapasową bazy danych i plików multimedialnych" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Interwał automatycznego tworzenia kopii zapasowych" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Określ liczbę dni między zdarzeniami automatycznej kopii zapasowej" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Interwał usuwania zadań" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Obsługa kodu kreskowego" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "Wyrażenie regularne IPN" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Zezwól na powtarzający się IPN" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Zezwól na edycję IPN" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Skopiuj BOM komponentu" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Możliwość zakupu" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Części są domyślnie z możliwością zakupu" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Możliwość sprzedaży" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Części są domyślnie z możliwością sprzedaży" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Części są domyślnie z możliwością śledzenia" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Wirtualny" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Części są domyślnie wirtualne" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Pokaż powiązane części" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Użyj cennika dostawcy" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Nadpisanie historii zakupów" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Ceny wewnętrzne" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Włącz drukowanie etykiet" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Włącz drukowanie etykiet z interfejsu WWW" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "DPI etykiety" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Włącz raporty" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Tryb Debugowania" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Rozmiar strony" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "Przekonwertuj walutę" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "Konwertuj wartość przedmiotu na walutę bazową podczas otrzymywania zapasów" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Automatycznie wypełniaj zlecenia zakupu" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatycznie oznacz zlecenia jako zakończone po odebraniu wszystkich pozycji" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Włącz opcję zapomnianego hasła" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Włącz funkcję zapomnianego hasła na stronach logowania" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Włącz rejestrację" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Włącz samodzielną rejestrację dla użytkowników na stronach logowania" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Włącz SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Włącz SSO na stronach logowania" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Włącz rejestrację SSO" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Włącz samodzielną rejestrację przez SSO dla użytkowników na stronach logowania" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "Włącz synchronizację grupy SSO" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Włącz synchronizację grup InvenTree z grupami dostarczonymi przez IdP" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Adres e-mail jest wymagany" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Autouzupełnianie użytkowników SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatycznie wypełnij dane użytkownika z danych konta SSO" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "E-mail dwa razy" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich adres e-mail" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Hasło dwukrotnie" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Przy rejestracji dwukrotnie zapytaj użytkowników o ich hasło" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Grupuj przy rejestracji" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Wymuś MFA" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Użytkownicy muszą używać zabezpieczeń wieloskładnikowych." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Sprawdź wtyczki przy starcie" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Sprawdź dostępność aktualizacji wtyczek" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Włącz okresowe sprawdzanie aktualizacji zainstalowanych wtyczek" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Włącz integrację URL" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Włącz wtyczki, aby dodać ścieżki URL" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Włącz integrację z aplikacją" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Włącz wtyczki, aby dodać aplikacje" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Włącz wtyczki, aby uruchamiać zaplanowane zadania" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "Włącz kody projektów" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "Włącz kody projektów do śledzenia projektów" -#: common/setting/system.py:1083 -msgid "Enable Stock History" -msgstr "Włącz historię zapasów" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" +msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "Włącz funkcjonalność dla zapisywania historycznych poziomów zapasów i wartości" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "Komponent jest aktywny" msgid "Manufacturer is Active" msgstr "Producent jest aktywny" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Producent" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Firma" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Firmy" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Opis firmy" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Opis firmy" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Strona WWW" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "Witryna internetowa firmy" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Numer telefonu" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Numer telefonu kontaktowego" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Kontaktowy adres e-mail" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakt" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Punkt kontaktowy" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link do informacji o zewnętrznym przedsiębiorstwie" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Czy sprzedajesz produkty tej firmie?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Czy kupujesz przedmioty od tej firmy?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Czy to przedsiębiorstwo produkuje części?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Adres" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Miasto/Region" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Kod pocztowy miasto/region" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Stan/Województwo" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Stan lub województwo" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Kraj" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Kraj" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notatki przewozowe kuriera" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notatki dla kuriera" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Wewnętrzne notatki przewozowe" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Notatki wysyłkowe do użytku wewnętrznego" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Komponent producenta" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Część bazowa" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Wybierz część" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Wybierz producenta" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Numer producenta komponentu" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Dostawca" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Wybierz dostawcę" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "koszt podstawowy" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Opakowanie" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Opakowanie części" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Ilość w opakowaniu" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "wielokrotność" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Zamów wiele" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Dostępność zaktualizowana" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Domyślna waluta używana dla tego dostawcy" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "Na stanie" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "Umieszczony" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Plik danych" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "Status importu" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Ważny" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "Liczba kopii do wydrukowania dla każdej etykiety" msgid "Connected" msgstr "Połączono" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Nieznany" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Numer zamówienia" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Utworzony przez" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Posiada ceny" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Zamówienie" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Komponent wewnętrzny" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Zamówienie oczekujące" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Zakończone" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Zlecenie zakupu" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Zlecenie zakupu" msgid "Sales Order" msgstr "Zamówienie zakupu" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Cena całkowita" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Link do zewnętrznej witryny" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data docelowa" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Data wydania" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Data wystawienia zamówienia" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Odniesienie zamówienia" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Status zamówienia zakupu" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "odebrane przez" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Przeznaczenie" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Pozycja nie pasuje do zlecenia zakupu" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Wartość musi być liczbą dodatnią" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Klient" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Data wysyłki" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "wysłane przez" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Ilość elementów" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Odebrane" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Cena zakupu" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Cena zakupu jednostkowego" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Cena sprzedaży" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Jednostkowa cena sprzedaży" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Wysłane" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Wysłana ilość" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Data wysyłki" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Sprawdzone przez" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Użytkownik, który sprawdził tę wysyłkę" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Przesyłka" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Numer przesyłki" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Numer śledzenia" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Informacje o śledzeniu przesyłki" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "Przesyłka została już wysłana" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Alokowana ilość musi być większa niż zero" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Linia" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Komponent" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopiuj parametry" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "Zlecenie zakupu musi być określone" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "Dostawca musi być zgodny ze zleceniem zakupu" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "Zlecenie zakupu musi być zgodne z dostawcą" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data ważności" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Kod kreskowy" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "Zwrot pieniędzy" msgid "Reject" msgstr "Odrzuć" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Zaległe zlecenie zakupu" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Zlecenie zakupu {po} jest teraz zaległe" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Kategoria komponentu" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Kategorie części" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Domyślna lokalizacja" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Domyślna lokalizacja dla komponentów w tej kategorii" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Domyślne słowa kluczowe" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Wartość domyślna" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Części" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Nazwa komponentu" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Czy szablon" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Czy ta część stanowi szablon części?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Czy ta część jest wariantem innej części?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Wariant" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Słowa kluczowe" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Wersja" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Domyślne wygasanie" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Czy ten komponent może być zbudowany z innych komponentów?" -#: part/models.py:1297 +#: part/models.py:1260 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:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "Czy ta część wymaga śledzenia każdego towaru z osobna?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Czy ta część jest aktywna?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 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:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Tworzenie użytkownika" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Sprzedaj wiele" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Data" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Nazwa testu" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Testowy opis" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Wprowadź opis do tego testu" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Wymagane" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Wymaga wartości" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Wymaga załącznika" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Wybierz część nadrzędną" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Podczęść" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Ten element BOM jest opcjonalny" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Notatki pozycji BOM" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Suma kontrolna" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Zatwierdzone" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Część zastępcza" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Część 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Część 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Wybierz powiązaną część" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Waluta zakupu tego towaru" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopiuj obraz" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Kopiuj BOM" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Kopiuj parametry" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Towary" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Dostawcy" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Duplikuj część" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Usuń istniejące dane" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Pomiń nieprawidłowe wiersze" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "Nie określono działania" msgid "No matching action found" msgstr "Nie znaleziono pasującej akcji" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Nie znaleziono wyników dla danych kodu kreskowego" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Znaleziono wyniki dla danych kodu kreskowego" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Kod kreskowy pasuje do istniejącego elementu" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "Kod kreskowy nie pasuje do istniejących pozycji magazynowych" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "Dalsze informacje wymagane do odbioru pozycji" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Otrzymana pozycja zlecenia zakupu" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Klucz wtyczki" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "Nazwa wtyczki" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "Wtyczka" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Nie znaleziono autora" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "Instalacja nie została potwierdzona" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "Razem" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Numer Seryjny" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Zainstalowane elementy" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Lokacje stanu magazynowego" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Właściciel" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Wybierz właściciela" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Nadrzędny towar" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Część podstawowa" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Wybierz pasującą część dostawcy dla tego towaru" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Zainstalowane w" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Ilość w magazynie" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Wyszukaj zlecenie zakupu" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Zlecenie zakupu dla tego towaru" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Usuń po wyczerpaniu" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Ilość musi być liczbą całkowitą" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Notatki do wpisu" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Należy podać wartość dla tego testu" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Wynik testu" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Element nadrzędny" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Termin minął" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Elementy podrzędne" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Numer seryjny już istnieje" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Podlokalizacje" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "Część musi być dostępna do sprzedaży" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Czy to konto użytkownika jest aktywne" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Twoje konto zostało utworzone." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Zresetuj hasło" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Witamy w InvenTree" diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po index 55b18c4787..2d7e180300 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API endpoint não encontrado" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Usuário não tem permissão para ver este modelo" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "E-mail (novamente)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Confirmação do endereço de email" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Você deve digitar o mesmo e-mail todas as vezes." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "O endereço primário de e-mail não é válido." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "O domínio de e-mail providenciado não foi aprovado." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Não foi possível converter {original} para {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Quantidade fornecida inválida" @@ -112,13 +104,13 @@ msgstr "Insira uma Data" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Anotações" @@ -131,75 +123,75 @@ msgstr "Valor '{name}' não está no formato correto" msgid "Provided value does not match required pattern: " msgstr "O valor fornecido não corresponde ao padrão exigido: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Número serial em branco" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Número de série duplicado" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Intervalo do grupo {group} excede a quantidade permitida ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nenhum número de série foi encontrado" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Remova as \"tags\" HTML deste valor" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Erro de conexão" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "O servidor respondeu com código estado inválido" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Ocorreu uma exceção" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "O servidor respondeu com valor inválido do tamanho de conteúdo" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Tamanho da imagem muito grande" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "O download da imagem excedeu o tamanho máximo" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "O servidor remoto retornou resposta vazia" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "A URL fornecida não é um arquivo de imagem válido" @@ -207,11 +199,11 @@ msgstr "A URL fornecida não é um arquivo de imagem válido" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "A referência deve corresponder ao padrão exigido" msgid "Reference number is too large" msgstr "O número de referência é muito grande" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Escolha inválida" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Descrição" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Descrição (opcional)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Caminho" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Nomes duplicados não podem existir sob o mesmo parental" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Notas Markdown (opcional)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Dados de código de barras" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Dados de código de barras de terceiros" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Hash de código de barras" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Hash exclusivo de dados de código de barras" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Erro de servidor" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Log de erro salvo pelo servidor." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Imagem" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Preicsa ser um numero valido" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Selecione a Moeda nas opções disponíveis" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Imagens Remota" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL do arquivo de imagem remoto" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Baixar imagens de URL remota não está habilitado" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Chinês (Simplificado)" msgid "Chinese (Traditional)" msgstr "Chinês (Tradicional)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "Unidade física inválida" msgid "Not a valid currency code" msgstr "Não é um código de moeda válido" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Situação do pedido" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Produção Progenitor" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "Peça" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categoria" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Produção deve ser cancelada antes de ser deletada" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Consumível" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Opcional" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Montagem" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Monitorado" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Alocado" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponível" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "No pedido" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordem de Produção" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Local" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Ordens de Produções" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Usuário ou grupo responsável deve ser especificado" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Peça da ordem de produção não pode ser alterada" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Referência do pedido de produção" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Referência do pedido de produção" msgid "Reference" msgstr "Referência" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Breve descrição da produção (opcional)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Pedido de produção para qual este serviço está alocado" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Selecionar peça para produção" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referência do pedido de venda" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Pedido de Venda para qual esta produção está alocada" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Local de Origem" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selecione a localização para pegar do estoque para esta produção (deixe em branco para tirar a partir de qualquer local de estoque)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Local de Destino" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Selecione o local onde os itens concluídos serão armazenados" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Quantidade de Produção" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Número de itens em estoque para produzir" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Itens concluídos" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Número de itens em estoque concluídos" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Progresso da produção" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Código de situação da produção" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Código de Lote" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Código do lote para esta saída de produção" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Criado em" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Data alvo final" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data alvo para finalização de produção. Estará atrasado a partir deste dia." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Data de conclusão" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "Concluído por" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Usuário que emitiu este pedido de produção" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsável" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Usuário ou grupo responsável para este pedido de produção" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Link Externo" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link para URL externa" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Prioridade de Produção" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioridade deste pedido de produção" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Código do projeto" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Código do projeto para este pedido de produção" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Falha ao descarregar tarefa para concluir alocações de construção" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "O Pedido de produção {build} foi concluído!" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Um pedido de produção foi concluído" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Números de série devem ser fornecidos para peças rastreáveis" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nenhuma saída de produção especificada" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Saída de produção já completada" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Saída da produção não corresponde ao Pedido de Produção" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Quantidade não pode ser maior do que a quantidade de saída" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "O item de produção {serial} não passou todos os testes necessários" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Item da linha de Produção" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Objeto de produção" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Objeto de produção" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Quantidade" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Quantidade necessária para o pedido de produção" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de produção deve especificar a saída, pois peças mestres estão marcadas como rastreáveis" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "Item estoque selecionado não coincide com linha da LDM" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Quantidade deve ser 1 para estoque serializado" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em estoque ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "O item do estoque está sobre-alocado" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Quantidade alocada deve ser maior que zero" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Quantidade deve ser 1 para estoque serializado" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "Item estoque selecionado não coincide com linha da LDM" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Item de estoque" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Origem do item em estoque" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Quantidade do estoque para alocar à produção" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Instalar em" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Destino do Item do Estoque" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nome da Peça" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Saída da Produção" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Saída de produção não coincide com a produção progenitora" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Peça de saída não coincide com a peça da ordem de produção" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Esta saída de produção já foi concluída" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "A saída de produção não está completamente alocada" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Entre a quantidade da saída de produção" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantidade inteira necessária, pois a lista de materiais contém peças rastreáveis" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Números de Série" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Digite os números de série para saídas de produção" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Local de estoque para a produção" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Alocar Números de Série Automaticamente" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alocar automaticamente os itens necessários com os números de série correspondentes" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Os seguintes números de série já existem ou são inválidos" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Uma lista de saídas de produção deve ser fornecida" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Local de estoque para saídas recicladas" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Descartar alocações" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar quaisquer alocações de estoque para saídas sucateadas" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Motivo para sucatear saída(s) de produção" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Aceitar Alocação Incompleta" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Concluir saídas se o estoque não tiver sido totalmente alocado" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Consumir Estoque Alocado" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Consumir qualquer estoque que já tenha sido alocado para esta produção" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Remover Saídas Incompletas" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Excluir quaisquer saídas de produção que não tenham sido completadas" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Não permitido" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Aceitar conforme consumido por esta ordem de produção" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Desatribua antes de completar este pedido de produção" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Estoque sobrealocado" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Como deseja manejar itens de estoque extras atribuídos ao pedido de produção" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Alguns itens de estoque foram sobrealocados" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Aceitar não alocados" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta produção" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceitar que o número requerido de saídas de produção não foi concluído" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Quantidade de produção requerida não foi concluída" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Pedido de produção tem saídas incompletas" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Linha de produção" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Saída da Produção" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Saída de produção deve indicar a mesma produção" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Item da linha de produção" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bin_item.part deve indicar a mesma peça do pedido de produção" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "Item deve estar em estoque" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantidade disponível ({q}) excedida" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Saída de produção deve ser definida para alocação de peças rastreadas" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Saída de produção deve ser definida para alocação de peças não rastreadas" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Alocação do Item precisa ser fornecida" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Local de estoque onde peças serão extraídas (deixar em branco para qualquer local)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Local não incluso" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Não incluir itens de estoque deste local" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Estoque permutável" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Itens de estoque em múltiplos locais pode ser permutável" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Substituir Estoque" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Itens opcionais" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Alocar itens LDM opcionais para o pedido de produção" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Falha ao iniciar tarefa de auto-alocação" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Fornecedor da Peça" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Quantidade Alocada" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Rastreável" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Permitir variações" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Item LDM" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Estoque Disponível" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Completado" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Estoque obrigatório para o pedido de produção" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Pedido de produção vencido" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Pedido de produção {bo} está atrasada" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "É uma Ligação" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "É um arquivo" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "O Utilizador não tem permissão para remover este anexo" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Código da Moeda invalida" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Código da Moeda duplicada" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Nenhum código de moeda válido foi fornecido" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Sem extensão" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Atualizado" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Tempo da última atualização" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Código único do projeto" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Descrição do projeto" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Usuário ou grupo responsável por este projeto" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Valor da Configuração" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Valor escolhido não é uma opção válida" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Valor deve ser um valor booleano" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Valor deve ser um número inteiro" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "A frase senha deve ser diferenciada" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Usuario" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Preço" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Preço unitário na quantidade especificada" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Ponto final" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Ponto final em qual o gancho web foi recebido" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Nome para este webhook" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Ativo" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Este gancho web está ativo" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Token de acesso" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Segredo" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Segredo compartilhado para HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "ID da Mensagem" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Identificador exclusivo desta mensagem" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Servidor" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Servidor do qual esta mensagem foi recebida" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Cabeçalho" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Cabeçalho da mensagem" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Corpo" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Corpo da mensagem" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Ponto do qual esta mensagem foi recebida" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Trabalhado em" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "O trabalho desta mensagem foi concluído?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Título" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Ligação" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Publicado" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Autor" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Resumo" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Lida" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Esta notícia do item foi lida?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Arquivo de imagem" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Nome da unidade deve ser um identificador válido" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Nome da unidade" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Símbolo de unidade opcional" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definição" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Definição de unidade" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Anexo" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Arquivo ausente" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Link externo não encontrado" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Selecione arquivo para anexar" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Comentario" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valor" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Criado" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Última atualização" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Modelo de parâmetro" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "Parâmetros da caixa de seleção não podem ter unidades" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "Os parâmetros da caixa de seleção não podem ter escolhas" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "Escolhas devem ser únicas" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "Nome do modelo de parâmetro deve ser único" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Nome do Parâmetro" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Unidades" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Unidades físicas para este parâmetro" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Descrição do Parâmetro" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Caixa de seleção" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Este parâmetro é uma caixa de seleção?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Escolhas" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opções válidas para este parâmetro (separadas por vírgulas)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Escolha inválida para valor do parâmetro" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Modelo" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Dados" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Valor do Parâmetro" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Anotação" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Campo opcional de notas" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultado" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Chave" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} cancelado" msgid "A order that is assigned to you was canceled" msgstr "Um pedido atribuído a você foi cancelado" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Itens Recebidos" @@ -2351,93 +2359,101 @@ msgstr "Os itens de um pedido de compra foram recebidos" msgid "Items have been received against a return order" msgstr "Os itens de um pedido de devolução foram recebidos" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Executando" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Tarefas Pendentes" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Tarefas Agendadas" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Tarefas com Falhas" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID da Tarefa" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "ID Único da Tarefa" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Tempo de bloqueio" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Nome da tarefa" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Função" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Nome da função" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumentos da tarefa" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Argumentos de Palavra-chave" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Argumentos Palavra-chave da Tarefa" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Nome do arquivo" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "Nenhum grupo" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "URL do site está bloqueada por configuração" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Reinicialização necessária" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Uma configuração que requer uma reinicialização do servidor foi alterada" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Migrações pendentes" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Número de migrações pendentes na base de dados" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Nome da Instância do Servidor" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Descritor de frases para a instância do servidor" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Usar nome da instância" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Usar o nome da instância na barra de título" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Restringir a exibição 'sobre'" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Mostrar 'sobre' modal apenas para superusuários" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nome da empresa" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Nome interno da Empresa" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "URL de Base" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "URL Base da instância do servidor" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Moeda Padrão" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Selecione a moeda base para cálculos de preços" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Moedas suportadas" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Lista de códigos de moeda suportados" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Intervalo de Atualização da Moeda" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Com que frequência atualizar as taxas de câmbio (defina como zero para desativar)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "dias" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Extensão de Atualização de Moeda" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Extensão de Atualização de Moeda a utilizar" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Baixar do URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Permitir baixar imagens remotas e arquivos de URLs externos" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Limite de tamanho para baixar" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Maior tamanho de imagem remota baixada permitida" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "Usuário-agente utilizado para baixar da URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permitir a substituição de imagens e arquivos usados baixados por usuário-agente (deixar em branco por padrão)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Validação rigorosa de URL" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Exigir especificação de esquema ao validar URLs" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Atualizar Intervalo de Verificação" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Frequência para verificar atualizações (defina como zero para desativar)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Cópia de Segurança Automática" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Ativar cópia de segurança automática do banco de dados e arquivos de mídia" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Intervalo de Backup Automático" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Especificar o número de dia entre as cópias de segurança" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Intervalo para Excluir da Tarefa" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Os resultados da tarefa no plano de fundo serão excluídos após um número especificado de dias" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Intervalo para Excluir do Registro de Erro" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Registros de erros serão excluídos após um número especificado de dias" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Intervalo para Excluir de Notificação" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Notificações de usuários será excluído após um número especificado de dias" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Suporte aos códigos de barras" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Ativar suporte a leitor de código de barras na interface web" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Atraso na entrada de código de barras" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Tempo de atraso de processamento de entrada de barras" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Suporte a código de barras via Câmera" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir escanear código de barras por câmera pelo navegador" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Revisões de peças" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Habilitar campo de revisão para a Peça" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Permitir a exclusão da Montagem" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permitir a remoção de peças usadas em uma montagem" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Padrão de expressão regular adequado para Peça IPN" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Permitir Duplicação IPN" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que várias peças compartilhem o mesmo IPN" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Permitir Edição IPN" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Permitir trocar o valor do IPN enquanto se edita a peça" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Copiar dados da LDM da Peça" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar dados da LDM por padrão quando duplicar a peça" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Copiar Dados de Parâmetro da Peça" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Copiar dados de parâmetros por padrão quando duplicar uma peça" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Copiar Dados Teste da Peça" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Copiar dados de teste por padrão quando duplicar a peça" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Copiar Parâmetros dos Modelos de Categoria" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Copiar parâmetros do modelo de categoria quando criar uma peça" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Peças são modelos por padrão" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Peças podem ser montadas a partir de outros componentes por padrão" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Componente" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Peças podem ser usadas como sub-componentes por padrão" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Comprável" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Peças são compráveis por padrão" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Vendível" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Peças vão vendíveis por padrão" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Peças vão rastreáveis por padrão" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Peças são virtuais por padrão" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Mostra peças relacionadas" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Mostrar peças relacionadas para uma peça" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Dados Iniciais de Estoque" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Permitir Criação de estoque inicial quando adicional uma nova peça" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Dados Iniciais de Fornecedor" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permitir criação de dados iniciais de fornecedor quando adicionar uma nova peça" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Formato de Exibição do Nome da Peça" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Formato para exibir o nome da peça" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Ícone de Categoria de Peça Padrão" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Ícone padrão de categoria de peça (vazio significa sem ícone)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de Casas Decimais do Preço" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Mínimo número de casas decimais a exibir quando renderizar dados de preços" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Máximo Casas Decimais de Preço" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Número máximo de casas decimais a exibir quando renderizar dados de preços" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Usar Preços do Fornecedor" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Incluir quebras de preço do fornecedor nos cálculos de preços globais" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Sobrescrever histórico de compra" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Histórico do pedido de compra substitui os intervalos dos preços do fornecedor" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Usar Preços do Item em Estoque" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Usar preço inserido manualmente no estoque para cálculos de valores" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Idade do preço do Item em Estoque" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Não incluir itens em estoque mais velhos que este número de dias no cálculo de preços" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Usar Preço Variável" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir preços variáveis nos cálculos de valores gerais" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Apenas Ativar Variáveis" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Apenas usar peças variáveis ativas para calcular preço variáveis" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Intervalo de Reconstrução de Preços" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Número de dias antes da atualização automática dos preços das peças" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Preços Internos" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Habilitar preços internos para peças" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Sobrepor Valor Interno" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Se disponível, preços internos sobrepõe variação de cálculos de preço" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Ativar impressão de etiquetas" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Ativar impressão de etiqueta pela interface da internet" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "DPI da Imagem na Etiqueta" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Resolução de DPI quando gerar arquivo de imagens para fornecer à extensão de impressão de etiquetas" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Habilitar Relatórios" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Ativar geração de relatórios" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Modo de depuração" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Gerar relatórios em modo de depuração (saída HTML)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Relatório de erros" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Registro de erros que ocorrem ao gerar relatórios" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Tamanho da página" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Tamanho padrão da página PDF para relatórios" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Forçar Unidades de Parâmetro" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Se as unidades são fornecidas, os valores do parâmetro devem corresponder às unidades especificadas" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Seriais Únicos Globais" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Números de série para itens de estoque devem ser globalmente únicos" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Excluir Estoque Esgotado" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina o comportamento padrão quando um item de estoque é esgotado" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Modelo de Código de Lote" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Modelo para gerar códigos de lote padrão para itens de estoque" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Validade do Estoque" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Ativar função de validade de estoque" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Vender estoque expirado" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Permitir venda de estoque expirado" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Tempo de Estoque Inativo" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de dias em que os itens em estoque são considerados obsoleto antes de vencer" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Produzir Estoque Vencido" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Permitir produção com estoque vencido" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Controle de propriedade do estoque" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Ativar controle de propriedade sobre locais e itens de estoque" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Ícone padrão do local de estoque" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Ícone padrão de local de estoque (vazio significa sem ícone)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Mostrar Itens de Estoque Instalados" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Exibir itens de estoque instalados nas tabelas de estoque" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Verificar BOM ao instalar itens" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Itens de estoque instalados devem existir na BOM para a peça parente" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Permitir Transferência Fora do Estoque" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permitir que os itens que não estão em estoque sejam transferidos entre locais de estoque" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Produção" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Produção" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Requer Proprietário Responsável" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Um proprietário responsável deve ser atribuído a cada ordem" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Bloquear até os Testes serem Aprovados" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Impedir que as saídas da produção sejam concluídas até que todos os testes sejam aprovados" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Ativar Pedidos de Devolução" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Ativar funcionalidade de pedido de retorno na interface do usuário" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Devolução" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Editar os Pedidos de Devolução Concluídos" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Permitir a edição de pedidos de devolução após serem enviados ou concluídos" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Venda" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Venda" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Envio Padrão de Pedidos de Venda" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Habilitar criação de envio padrão com Pedidos de Vendas" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Editar os Pedidos de Vendas concluídos" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Permitir a edição de pedidos de vendas após serem enviados ou concluídos" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Compras" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Compra" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Editar Pedidos de Compra Concluídos" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Permitir a edição de pedidos de compras após serem enviados ou concluídos" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Autocompletar Pedidos de Compra" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marcar automaticamente os pedidos de compra como concluídos quando todos os itens de linha forem recebidos" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Habitar esquecer senha" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Habilitar a função \"Esqueci minha senha\" nas páginas de acesso" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Habilitar cadastro" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Ativar auto-registro para usuários na página de entrada" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Ativar SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Ativar SSO na página de acesso" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Ativar registro SSO" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Ativar auto-registro por SSO para usuários na página de entrada" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Email obrigatório" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Exigir do usuário o e-mail no cadastro" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Auto-preencher usuários SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Preencher automaticamente os detalhes do usuário a partir de dados da conta SSO" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Enviar email duplo" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "No registro pedir aos usuários duas vezes pelo email" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Senha duas vezes" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "No registro pedir aos usuários duas vezes pela senha" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Domínios permitidos" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restringir registros a certos domínios (separados por vírgula, começando com @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Grupo no cadastro" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Forçar AMF" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Os usuários devem usar uma segurança multifator." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Checar extensões no início" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Checar que todas as extensões instaladas no início — ativar em ambientes de contêineres" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Verificar por atualizações de plugin" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Habilitar verificações periódicas de atualizações para plugins instalados" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Ativar integração URL" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Ativar extensão para adicionar rotas URL" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Ativar integração de navegação" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Ativar extensões para integrar à navegação" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Ativa integração com aplicativo" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Ativar extensões para adicionar aplicativos" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Ativar integração do calendário" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Ativar extensões para executar tarefas agendadas" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Ativar integração de eventos" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Ativar extensões para responder a eventos internos" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Excluir Locais Externos" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Período de Balanço Automático" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "Mostrar nomes completos dos usuários" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "Mostrar Nomes Completos em vez de Nomes de Usuário" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "Mostrar nomes completos dos usuários" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Mostrar Nomes Completos em vez de Nomes de Usuário" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Empresas" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Descrição da empresa" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Descrição da empresa" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Página Web" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "URL do Site da empresa" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Número de telefone" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Número de telefone do contato" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Endereço de e-mail do contato" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contato" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Ponto de contato" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link para informações externas da empresa" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Você vende itens para esta empresa?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Você compra itens desta empresa?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Esta empresa fabrica peças?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Moeda padrão utilizada para esta empresa" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Endereço" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Endereços" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Selecione a Empresa" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Título do endereço" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Título descrevendo a entrada de endereço" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Endereço Principal" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Definir como endereço principal" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Linha 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Linha de endereço 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Linha 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Linha de endereço 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Código Postal" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Cidade/Região" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Código Postal Cidade / Região" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Estado/Provincia" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Estado ou Província" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "País" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "País do endereço" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notas de envio da transportadora" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notas para o envio da transportadora" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Notas de envio interno" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Notas de envio para uso interno" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Link para as informações do endereço (externo)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Peça do Fabricante" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Peça base" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Selecionar peça" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "NPF" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Número de Peça do Fabricante" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL do link externo da peça do fabricante" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Descrição da peça do fabricante" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Unidades de pacote devem ser compatíveis com as unidades de peça base" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Unidades de pacote deve ser maior do que zero" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Fornecedor" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Selecionar peça do fabricante" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL do link externo da peça do fabricante" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Descrição da peça fornecedor" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "preço base" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Embalagem" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Embalagem de peças" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Quantidade de embalagens" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantidade total fornecida em um único pacote. Deixe em branco para itens únicos." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "múltiplo" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Pedir múltiplos" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Quantidade disponível do fornecedor" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Disponibilidade Atualizada" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Data da última atualização da disponibilidade dos dados" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Moeda padrão utilizada para este fornecedor" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "Em Estoque" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "Colocado" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Arquivo de dados" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Colunas" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Válido" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Desconhecido" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Referência do Pedido" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Criado por" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Pedido" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Peça Interna" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Concluído" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Pedido de Compra" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Pedido de Compra" msgid "Sales Order" msgstr "Pedido de Venda" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Preço Total" msgid "Total price for this order" msgstr "Preço total deste pedido" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Moeda do pedido" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Moeda para este pedido (deixe em branco para usar o padrão da empresa)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "O contato não corresponde à empresa selecionada" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Descrição do pedido (opcional)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Selecione o código do projeto para este pedido" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Link para página externa" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data alvo" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Data esperada para entrega do pedido. O Pedido estará atrasado após esta data." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Data de emissão" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Dia que o pedido foi feito" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Usuário ou grupo responsável para este pedido" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Ponto de contato para este pedido" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Endereço da empresa para este pedido" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Referência do pedido" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Situação" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Situação do pedido de compra" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Empresa da qual os itens estão sendo encomendados" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Referencia do fornecedor" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Código de referência do pedido fornecedor" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "recebido por" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Dia que o pedido foi concluído" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Destino" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Fornecedor de peça deve corresponder a fornecedor da OC" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "O item de linha não corresponde ao pedido de compra" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Quantidade deve ser um número positivo" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Empresa para qual os itens foi vendidos" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Referência do Cliente " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Código de Referência do pedido do cliente" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Data de Envio" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Apenas um pedido aberto pode ser marcado como completo" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Pedido não pode ser concluído, pois, há envios incompletos" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "Pedido não pode ser concluído, pois, há itens na linha incompletos" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Quantidade do item" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Referência do Item em Linha" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Observações do Item de Linha" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Data alvo para este item de linha (deixe em branco para usar a data alvo do pedido)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Descrição item de linha (opcional)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Contexto adicional para esta linha" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Preço Unitário" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "A peça do fornecedor deve corresponder ao fornecedor" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Fornecedor da Peça" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Recebido" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Número de itens recebidos" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Preço de Compra" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Preço unitário de compra" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "Apenas peças vendáveis podem ser atribuídas a um pedido de venda" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Preço de Venda" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Preço de venda unitário" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Quantidade enviada" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Data do envio" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Data de Entrega" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Data da entrega do envio" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Verificado por" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Usuário que verificou esta remessa" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Remessa" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Número do Envio" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Número de Rastreamento" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Informação de rastreamento da remessa" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Número da Fatura" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Número de referência para fatura associada" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "O pedido já foi enviado" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "Remessa não foi alocada nos itens de estoque" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "O item do estoque não foi atribuído" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "Não é possível alocar o item de estoque para uma linha de uma peça diferente" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "Não é possível alocar uma linha sem uma peça" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "A quantidade de alocação não pode exceder a quantidade em estoque" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Quantidade alocada deve ser maior que zero" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "Quantidade deve ser 1 para item de estoque serializado" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "Pedidos de venda não coincidem com a remessa" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Remessa não coincide com pedido de venda" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Linha" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Referência de remessa do pedido de venda" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Selecione o item de estoque para alocar" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Insira a quantidade de atribuição de estoque" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Referência de Pedidos de Devolução" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Empresa da qual os itens estão sendo retornados" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Estado do pedido de retorno" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Selecione o item a ser devolvido pelo cliente" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Data de Recebimento" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "Data que o pedido a ser devolvido foi recebido" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Despesa/gastos" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Gastos com esta linha de itens" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Gastos para reparar e/ou devolver esta linha de itens" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Copiar Parâmetros" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Itens de linha" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Nome do Fornecedor" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "Pedido não pode ser cancelado" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir que o pedido seja fechado com itens de linha incompletos" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "O pedido tem itens da linha incompletos" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "O pedido não está aberto" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Moeda de preço de compra" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Numero interno do produto" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "A peça do fornecedor deve ser especificada" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "O pedido de compra deve ser especificado" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "O fornecedor deve corresponder o pedido de compra" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "Pedido de compra deve corresponder ao fornecedor" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Itens de linha" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Selecione o local de destino para os itens recebidos" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Digite o código do lote para itens de estoque recebidos" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data de validade" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Digite o número de série para itens de estoque recebidos" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Código de barras já em uso" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Itens de linha deve ser providenciados" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "Loca de destino deve ser especificado" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Código de barras fornecido deve ser único" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Envios concluídos" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Moeda de preço de venda" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Nenhum detalhe da remessa fornecido" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "Item de linha não está associado a este pedido" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "Quantidade deve ser positiva" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Digite números de série para alocar" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "O pedido já foi enviado" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "O envio não está associado a este pedido" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "Nenhuma correspondência encontrada para os seguintes números de série" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Devolver item do pedido" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "Item do pedido não bate com o pedido de devolução" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "Item do pedido já foi recebido" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "Itens só podem ser recebidos de pedidos em processamento" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Tipo de moeda para o item do pedido" @@ -5532,1174 +5613,1226 @@ msgstr "Reembolsar" msgid "Reject" msgstr "Recusar" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Pedido de compra vencido" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Pedido de compra {po} está atrasada" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Pedido de venda vencido" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Pedido de venda {so} está atrasada" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Categoria da Peça" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Categorias de Peça" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Local Padrão" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Local padrão para peças desta categoria" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Estrutural" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Peças não podem ser diretamente atribuídas a uma categoria estrutural, mas podem ser atribuídas a categorias filhas." -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Palavras-chave Padrão" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Palavras-chave padrão para peças nesta categoria" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Ícone" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Ícone (opcional)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "Você não pode tornar esta categoria em estrutural, pois, algumas partes já estão alocadas!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Valor Padrão" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Valor Padrão do Parâmetro" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Peças" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Peça '{self}' não pode ser utilizada na BOM para '{parent}' (recursiva)" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Peça '{parent}' é usada na BOM para '{self}' (recursiva)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN deve corresponder ao padrão regex {pattern}" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Item em estoque com este número de série já existe" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Não é permitido duplicar IPN em configurações de partes" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Uma parte com este Nome, IPN e Revisão já existe." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Peças não podem ser atribuídas a categorias estruturais!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Nome da peça" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "É um modelo" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Esta peça é uma peça modelo?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Esta peça é variante de outra peça?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Descrição da peça (opcional)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Palavras chave" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Palavras-chave para melhorar a visibilidade nos resultados da pesquisa" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Revisão de peça ou número de versão" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Revisão" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Onde este item é armazenado normalmente?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Fornecedor Padrão" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Fornecedor padrão da peça" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Validade Padrão" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Validade (em dias) para itens do estoque desta peça" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Estoque Mínimo" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Nível mínimo de estoque permitido" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Unidade de medida para esta peça" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Essa peça pode ser construída a partir de outras peças?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "Essa peça pode ser usada para construir outras peças?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "Esta parte tem rastreamento para itens únicos?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "Esta peça pode ser comprada de fornecedores externos?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "Esta peça pode ser vendida a clientes?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Esta parte está ativa?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "Esta é uma peça virtual, como um software de produto ou licença?" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Soma de Verificação da LDM" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Soma de verificação da LDM armazenada" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "LDM conferida por" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "LDM verificada no dia" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Criação de Usuário" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Proprietário responsável por esta peça" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Venda múltipla" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Moeda usada para armazenar os cálculos de preços" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Custo Mínimo da LDM" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Custo mínimo das peças componentes" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Custo Máximo da LDM" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Custo máximo das peças componentes" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Custo Mínimo de Compra" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Custo mínimo histórico de compra" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Custo Máximo de Compra" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Custo máximo histórico de compra" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Preço Interno Mínimo" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Custo mínimo baseado nos intervalos de preço internos" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Preço Interno Máximo" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Custo máximo baseado nos intervalos de preço internos" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Preço Mínimo do Fornecedor" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Preço mínimo da peça de fornecedores externos" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Preço Máximo do Fornecedor" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Preço máximo da peça de fornecedores externos" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Custo Mínimo variável" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Custo mínimo calculado das peças variáveis" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Custo Máximo Variável" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Custo máximo calculado das peças variáveis" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Custo Mínimo" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Sobrepor o custo mínimo" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Custo Máximo" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Sobrepor o custo máximo" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Custo total mínimo calculado" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Custo total máximo calculado" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Preço Mínimo de Venda" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Preço mínimo de venda baseado nos intervalos de preço" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Preço Máximo de Venda" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Preço máximo de venda baseado nos intervalos de preço" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Custo Mínimo de Venda" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Preço histórico mínimo de venda" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Custo Máximo de Venda" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Preço histórico máximo de venda" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Peça para Balanço" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Total de Itens" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "Número de entradas de estoques individuais no momento do balanço" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "Estoque total disponível no momento do balanço" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Data" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Data de realização do balanço" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Custo Mínimo de Estoque" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Custo mínimo estimado de estoque disponível" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Custo Máximo de Estoque" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "Custo máximo estimado de estoque disponível" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Nome de Teste" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Insira um nome para o teste" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Descrição do Teste" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Digite a descrição para este teste" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Requerido" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Este teste é obrigatório passar?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Requer Valor" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "Este teste requer um valor ao adicionar um resultado de teste?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Anexo obrigatório" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "Este teste requer um anexo ao adicionar um resultado de teste?" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Selecione a Peça Parental" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Sub peça" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Selecionar peça a ser usada na LDM" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "Quantidade de LDM para este item LDM" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Este item LDM é opcional" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Este item LDM é consumível (não é rastreado nos pedidos de construção)" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Referência do Item LDM" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Notas do Item LDM" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Soma de verificação" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "Soma de Verificação da LDM da linha" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Validado" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "O item da LDM foi validado" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Obtém herdados" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Este item da LDM é herdado por LDMs para peças variáveis" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Itens de estoque para as peças das variantes podem ser usados para este item LDM" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Quantidade deve ser valor inteiro para peças rastreáveis" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Sub peça deve ser especificada" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "Substituir Item da LDM" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "A peça de substituição não pode ser a mesma que a peça mestre" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Item LDM Parental" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Substituir peça" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Selecionar Peça Relacionada" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "Relacionamento da peça não pode ser criada com ela mesma" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "Relação duplicada já existe" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Categoria de peça pai" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Sub-categorias" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Moeda de compra deste item de estoque" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Peça Original" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Selecione a peça original para duplicar" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Copiar imagem" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Copiar LDM" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Copiar lista de materiais da peça original" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Copiar Parâmetros" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Copiar dados do parâmetro da peça original" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Quantidade Inicial de Estoque" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Especificar a quantidade inicial de estoque para a peça. Se for zero, nenhum estoque é adicionado." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Local Inicial do Estoque" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Especifique o local do estoque inicial para esta Peça" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Selecione o fornecedor (ou deixe em branco para pular)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecione fabricante (ou deixe em branco para pular)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Número de Peça do Fabricante" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "A empresa selecionada não é um fornecedor válido" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "A empresa selecionada não é um fabricante válido" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "A peça do fabricante que corresponde a essa MPN já existe" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "A peça do fornecedor que corresponde a essa SKU já existe" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Nome da Categoria" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Produzindo" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Fornecedores" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Peça duplicada" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Copiar dados iniciais de outra peça" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Estoque inicial" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Criar peça com a quantidade inicial de estoque" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Informações do Fornecedor" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Adicionar informação inicial de fornecedor para esta peça" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Copiar Parâmetros da Categoria" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Copiar modelos de parâmetros a partir de categoria de peça selecionada" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Imagem Existente" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Nome de arquivo de uma imagem de peça existente" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "A imagem não existe" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Validar a Lista de Materiais completa" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Pode Produzir" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Preço Mínimo" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Sobrepor valor calculado para preço mínimo" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Moeda do preço mínimo" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Preço Máximo" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Sobrepor valor calculado para preço máximo" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Moeda do preço máximo" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Atualizar preços desta peça" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Não foi possível converter das moedas fornecidas para {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Preço mínimo não pode ser maior que o preço máximo" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Preço máximo não pode ser menor que o preço mínimo" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Selecionar peça para copiar a LDM" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Remover Dado Existente" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Remova itens LDM existentes antes de copiar" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Incluir Herdados" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Incluir itens LDM que são herdados de peças modelo" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Pular Linhas inválidas" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Habilitar esta opção para pular linhas inválidas" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Copiar Peças Substitutas" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copiar peças de substitutas quando duplicar itens de LDM" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Notificação de estoque baixo" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "O estoque disponível para {part.name} caiu abaixo do nível mínimo definido" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "Nenhuma ação especificada" msgid "No matching action found" msgstr "Nenhuma ação correspondente encontrada" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Nenhum resultado encontrado para os dados do código de barras" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Coincidência encontrada para dados de código de barras" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Código de barras corresponde ao item existente" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "Nenhuma informação de peça correspondente encontrada" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "Nenhuma peça de fornecedor correspondente encontrada" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "Múltiplas peças de fornecedores correspondentes encontradas" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Peça de fornecedor correspondente" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "Item do pedido já foi recebido" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "Diversos itens de linha correspondentes encontrados" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "Nenhum item de linha correspondente encontrado" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "Código de barras não corresponde a item de estoque válido" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "Item do estoque não corresponde ao item de linha" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Estoque insuficiente disponível" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "Item de estoque atribuído para pedido de venda" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Não há informação suficiente" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "Mais informações necessárias para receber o item de linha" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Item de linha do pedido de compra recebido" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "Fornece suporte nativo para códigos de barras" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "Link do gancho de entrada do Slack" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Chave da extensão" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "Nome da Extensão" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "Extensões" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Nenhum autor encontrado" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "A extensão '{p}' não é compatível com a versão atual do InvenTree {v}" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Extensão requer pelo menos a versão {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Extensão requer no máximo a versão {v}" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "Instalação não confirmada" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "Qualquer nome do pacote URL deve ser fornecido" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Número de Sério" @@ -8097,7 +8230,7 @@ msgstr "Relatório Teste do Item em Estoque" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Itens instalados" @@ -8130,495 +8263,519 @@ msgstr "Sem resultado (obrigatório)" msgid "No result" msgstr "Nenhum resultado" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "O arquivo não existe" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "Arquivo de imagem não encontrado" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "Tag part_image necessita de uma instância de Peça" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "Tag company_image necessita de uma instância de Empresa" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Código da situação" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Localização externa" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Árvore de Peças" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Data de validade antes" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Data de validade depois" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Inativo" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Quantidade obrigatória" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Uma peça válida deve ser fornecida" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "A peça do fornecedor informado não existe" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "A peça do fornecedor tem um tamanho de pacote definido, mas o item use_pack_size não foi definida" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Números de série não podem ser fornecidos para uma parte não rastreável" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "Tipo de Local de estoque" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "Tipos de Locais de estoque" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "Ícone padrão para todos os locais que não tem um ícone (opcional)" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Localização do estoque" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Locais de estoque" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Responsavel" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Selecionar Responsável" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Os itens de estoque podem não estar diretamente localizados em um local de estoque estrutural, mas podem ser localizados em locais filhos." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Externo" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Esta é uma localização de estoque externo" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Tipo de localização" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "Tipo de Local de Estoque para esta locação" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Você não pode tornar este local do estoque estrutural, pois alguns itens de estoque já estão localizados nele!" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Os itens de estoque não podem estar localizados em locais de estoque estrutural!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "Item de estoque não pode ser criado para peças virtuais" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Tipo de peça('{self.supplier_part.part}') deve ser {self.part}" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "A quantidade deve ser 1 para um item com número de série" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Número de série não pode ser definido se quantidade maior que 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "O item não pode pertencer a si mesmo" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Item deve ter uma referência de produção se is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Referência de produção não aponta ao mesmo objeto da peça" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Item de Estoque Parental" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Peça base" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Selecione uma peça do fornecedor correspondente para este item de estoque" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Onde está localizado este item de estoque?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "Embalagem deste item de estoque está armazenado em" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Instalado em" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Este item está instalado em outro item?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Número de série para este item" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Código do lote para este item de estoque" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Quantidade de Estoque" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Produção de Origem" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Produção para este item de estoque" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Consumido por" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Pedido de produção que consumiu este item de estoque" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Pedido de compra Fonte" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Pedido de Compra para este item de estoque" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Destino do Pedido de Venda" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Data de validade para o item de estoque. Estoque será considerado expirado após este dia" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Excluir quando esgotado" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Excluir este item de estoque quando o estoque for esgotado" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Preço de compra unitário único no momento da compra" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Convertido para peça" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Peça não está definida como rastreável" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Quantidade deve ser inteira" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Quantidade não deve exceder a quantidade em estoque ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "A quantidade não corresponde aos números de série" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Item em estoque foi reservado para um pedido" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Item em estoque está instalado em outro item" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "item em estoque contem outro(s) items" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Item em estoque foi reservado para outro cliente" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Item no estoque está em produção no momento" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Itens de série não podem ser mesclados" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Item de estoque duplicado" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Itens de estoque devem se referir à mesma peça" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Itens de estoque devem se referir à mesma peça do fornecedor" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Códigos de estado do estoque devem corresponder" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Item do estoque não pode ser realocado se não houver estoque da mesma" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Observações de entrada" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Deve-se fornecer o valor desse teste" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "O anexo deve ser enviado para este teste" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Resultado do teste" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Valor da saída do teste" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Anexo do resultado do teste" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Notas do teste" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Item Primário" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Usar tamanho do pacote ao adicionar: a quantidade definida é o número de pacotes" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Inserir número de série para novos itens" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Expirado" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Itens Filhos" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "Preço de compra para este item de estoque, por unidade ou pacote" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Insira o número de itens de estoque para serializar" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Quantidade não deve exceder a quantidade disponível em estoque ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Local de destino do estoque" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "Números de série não podem ser atribuídos a esta peça" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Números de série já existem" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Selecione o item de estoque para instalar" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "Quantidade a Instalar" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "Insira a quantidade de itens a instalar" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Adicionar nota de transação (opcional)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "A quantidade para instalar deve ser pelo menos 1" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "Item de estoque indisponível" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "Peça selecionada não está na Lista de Materiais" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "Quantidade a instalar não deve exceder a quantidade disponível" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Local de destino para o item desinstalado" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "Selecione peça para converter o item de estoque em" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "Peça selecionada não é uma opção válida para conversão" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Não é possível converter o item de estoque com a Peça de Fornecedor atribuída" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "Código de estado do item estoque" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "Selecionar itens de estoque para mudar estados" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "Nenhum item de estoque selecionado" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Sub-locais" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "Parte deve ser comercializável" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "Item é alocado para um pedido de venda" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "Item está alocado a um pedido de produção" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Cliente para atribuir itens de estoque" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "A empresa selecionada não é um cliente" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Nodas atribuídas a estoque" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "Uma lista de item de estoque deve ser providenciada" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Notas de fusão de estoque" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Permitir fornecedores divergentes" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "Permitir a fusão de itens de estoque de fornecedores diferentes" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Permitir estado incompatível" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "Permitir a fusão de itens de estoque com estado diferentes" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Ao menos dois itens de estoque devem ser providenciados" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Valor da chave primária do Item Estoque" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Notas da transação de estoque" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "Pedidos de vendas" msgid "Return Orders" msgstr "Pedidos de Devolução" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Nome de usuário" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Primeiro Nome" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Sobrenome" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Sua conta foi criada." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Por favor, use a função de redefinir senha para acessar" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Bem-vindo(a) ao InvenTree" diff --git a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po index a73f534a50..12ef70d8e9 100644 --- a/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API endpoint não encontrado" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "A lista de itens ou filtros devem ser fornecidas para operação em massa" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Os itens devem ser fornecidos como lista" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Lista de itens inválida fornecida" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Filtros devem ser fornecidos como" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Filtros inválidos fornecidos" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Todos os filtros devem ser usados apenas como verdadeiro" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Nenhum item corresponde com os critérios fornecidos" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Nenhum dado fornecido" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "Este campo deve ser único." -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "O usuário não tem permissão para visualizar esse modelo" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Email (novamente)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "E-mail de confirmação" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Você deve digitar o mesmo e-mail todas às vezes." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "O endereço de e-mail fornecido não é válido." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "O domínio de e-mail fornecido não foi aprovado." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Não foi possível converter {original} para {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Quantidade inválida" @@ -112,13 +104,13 @@ msgstr "Informe a data" msgid "Invalid decimal value" msgstr "Valor decimal inválido" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Observações" @@ -131,75 +123,75 @@ msgstr "O valor '{name}' não aparece no formato padrão" msgid "Provided value does not match required pattern: " msgstr "O valor fornecido não corresponde ao padrão exigido: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Não é possível serializar mais de 1000 itens de uma vez" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Número serial em branco" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Número serial duplicado" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Grupo invalido:{group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Intervalo do grupo {group} excede a quantidade permitida ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nenhum número de série foi encontrado" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "O número de números seriais únicos ({n}) deve corresponder a quantidade ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Remover as \"tags\" HTML deste valor" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Os dados contêm conteúdo de marcação proibido" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Erro de conexão" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "O servidor respondeu com código de estado inválido" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Ocorreu uma exceção" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "O servidor respondeu com valor inválido do tamanho de conteúdo" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "O download da imagem excedeu seu tamanho máximo" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "O servidor remoto retornou uma resposta vazia" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "A URL fornecida não é um arquivo de imagem válido" @@ -207,11 +199,11 @@ msgstr "A URL fornecida não é um arquivo de imagem válido" msgid "Log in to the app" msgstr "Entrar no aplicativo" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Você deve habilitar a autenticação de dois fatores antes de fazer qualquer coisa." @@ -255,133 +247,124 @@ msgstr "A referência deve corresponder ao padrão exigido" msgid "Reference number is too large" msgstr "O número de referência é muito longo" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Escolha inválida" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Descrição" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Descrição (opcional)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Caminho" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Nomes duplicados não podem existir sob o mesmo parental" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Notas Markdown (opcional)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Dados de código de barras" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Dados de código de barras de terceiros" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Hash de código de barras" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Hash exclusivo de dados de código de barras" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Falha na Tarefa" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Falha na tarefa de trabalho '{f}' em segundo plano após tentativas {n}" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Erro de servidor" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Um erro foi registrado pelo servidor." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Imagem" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Deve ser um número válido" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Selecione a moeda entre as opções disponíveis" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "Este campo não pode ser nulo." -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Imagem remota" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL do arquivo da imagem remota" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Baixar imagens de URL remota não está habilitado" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Falha ao baixar a imagem da URL remota" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" -msgstr "" +msgstr "Formato de conteúdo inválido" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" -msgstr "" +msgstr "Tipo de conteúdo não encontrado" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Chinês (simplificado)" msgid "Chinese (Traditional)" msgstr "Chinês (tradicional)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "Atualização disponível" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "Uma atualização para o InvenTree está disponível" @@ -553,30 +536,30 @@ msgstr "Unidade física inválida" msgid "Not a valid currency code" msgstr "O código de moeda não é válido" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Situação de pedido" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Produção Progenitora" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Incluir Variáveis" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Incluir Variáveis" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Incluir Variáveis" msgid "Part" msgstr "Parte" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Categoria" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Construção de Ancestrais" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Atribuído a mim" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Atribuído a" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Criado antes" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Criado após" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Tem a data inicial" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Data inicial antes" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Data de início após" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Tem data limite" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Data limite antes" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Data limite depois" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Concluído antes" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Concluído após" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "Data Mínima" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "Data máxima" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Excluir árvore" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "A compilação deve ser cancelada antes de ser excluída" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Consumível" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Opcional" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Montagem" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Rastreado" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Testável" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Pedido pendente" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Alocado" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Disponível" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Em pedido" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Ordem da compilação" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Local" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" -msgstr "" +msgstr "Saída" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Ordens de Produções" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "O BOM da montagem não foi validado" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Ordem de compilação não pode ser criada para uma parte inativa" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Ordem de compilação não pode ser criado para uma parte desbloqueada" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Criar ordens só pode ser realizado externamente para partes compráveis" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Usuário ou grupo responsável deve ser especificado" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Parte do pedido de compilação não pode ser alterada" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "A data limite deve ser posterior à data inicial" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Referência do pedido de produção" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Referência do pedido de produção" msgid "Reference" msgstr "Referência" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Breve descrição da produção (opcional)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Ordem de produção para qual este serviço está alocado" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Selecione a peça para construir" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referência do pedido de venda" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Ordem de Venda para qual esta produção está alocada" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Local de Origem" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Selecione o local para fazer estoque para esta compilação (deixe em branco para tirar a partir de qualquer local de estoque)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "Produção Externa" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Esta ordem de compilação é atendida externamente" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Local de Destino" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Selecione o local onde os itens concluídos serão armazenados" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Quantidade de Produção" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Número de itens em estoque para produzir" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Itens concluídos" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Número de itens em estoque concluídos" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Progresso da produção" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Código de situação da produção" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Código do lote" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Código do lote para esta saída de produção" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Criado em" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "Data inicial da produção" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Data de início agendada para esta ordem de produção" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Data alvo final" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data limite para finalização de produção. Estará atrasado a partir deste dia." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Data de conclusão" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "concluído por" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Emitido por" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Usuário que emitiu esta ordem de produção" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsável" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Usuário ou grupo responsável para esta ordem de produção" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Link Externo" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link para URL externa" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Prioridade de Produção" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioridade desta ordem de compilação" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Código do Projeto" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Código do projeto para esta ordem de compilação" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Não é possível concluir o pedido de produção com pedidos secundários abertos" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Não é possível concluir o pedido com saídas incompletas" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Falha ao descarregar tarefa para concluir alocações de compilação" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "O Pedido de produção {build} foi concluído" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Um pedido de produção foi concluído" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Números de série devem ser fornecidos para peças rastreáveis" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nenhuma saída de produção especificada" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Saída da produção já está concluída" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Saída da produção não corresponde à Ordem de Produção" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "A quantidade não pode ser maior que a quantidade de saída" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "A saída da produção não passou em todos os testes necessários" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "A saída da produção {serial} não passou em todos os testes necessários" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Item da ordem de produção" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Compilar objeto" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Compilar objeto" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Quantidade" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Quantidade necessária para o pedido de produção" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Item de produção deve especificar a saída, pois peças mestres estão marcadas como rastreáveis" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "O item de estoque selecionado não coincide com linha da BOM" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Quantidade deve ser 1 para estoque serializado" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Quantidade alocada ({q}) não deve exceder a quantidade disponível em estoque ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "O item do estoque está sobre-alocado" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Quantidade alocada deve ser maior que zero" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Quantidade deve ser 1 para estoque serializado" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "O item de estoque selecionado não coincide com linha da BOM" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Item de Estoque" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Origem do item em estoque" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Quantidade do estoque para alocar à produção" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Instalar em" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Destino do Item do Estoque" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Nível de produção" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Nome da Peça" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Rótulo de código do projeto" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Saída da Produção" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Saída de produção não coincide com a produção progenitora" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Peça de saída não coincide com a peça da ordem de produção" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Esta saída de produção já foi concluída" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Esta saída de produção não está totalmente alocada" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Insira a quantidade para construir a saída de produção" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Quantidade inteira necessária para peças rastreáveis" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Quantidade inteira necessária, pois a lista de materiais contém peças rastreáveis" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Números de Série" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Digite os números de série para saídas de produção" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Local de estoque para saídas de produção" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Alocar Números de Série Automaticamente" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Alocar automaticamente os itens necessários com os números de série correspondentes" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Os seguintes números de série já existem ou são inválidos" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Uma lista de saídas de produção deve ser fornecida" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Local de estoque para saídas eliminadas" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Descartar alocações" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Descartar quaisquer alocações de estoque para saídas eliminadas" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Motivo para eliminar saída(s) de produção" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Local para saídas de produção concluídas" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Aceitar Alocação Incompleta" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Concluir saídas se o estoque não tiver sido totalmente alocado" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Consumir Estoque Alocado" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Consumir qualquer estoque que já tenha sido alocado para esta produção" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Remover Saídas Incompletas" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Excluir quaisquer saídas de produção que não tenham sido completadas" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Não permitido" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Aceitar conforme consumido por esta ordem de produção" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Desatribua antes de completar esta ordem de produção" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Como deseja manejar itens de estoque extras atribuídos ao pedido de produção" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Alguns itens de estoque foram sobrecarregados" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Aceitar não alocados" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta encomenda" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Aceitar que o número requerido de saídas de produção não foi concluído" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Quantidade de produção requerida não foi concluída" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "A ordem de produção tem ordens de produção secundárias abertas" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Ordem de produção deve estar no estado de produção" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Ordem de produção tem saídas incompletas" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Linha de Produção" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Saída da Produção" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Saída de produção deve indicar a mesma produção" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Item da linha de produção" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part deve apontar para a mesma parte que a ordem de produção" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "O item deve estar em estoque" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantidade disponível ({q}) excedida" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Saída de produção deve ser definida para alocação de peças rastreadas" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Saída de produção não pode ser definida para alocação de peças não rastreadas" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Alocação de itens precisam ser fornecidos" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Localização do estoque onde as peças devem ser originadas (deixe em branco a partir de qualquer local)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Excluir Local" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Excluir itens de estoque desta localização selecionada" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Estoque Intercambiável" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Itens de estoque em múltiplos locais podem ser intercambiáveis" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Estoque Substituto" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Permitir alocação de peças substitutas" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Itens opcionais" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Alocar itens BOM opcionais para ordem de produção" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Falha ao iniciar tarefa de alocação automática" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Referência do BOM" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID da parte BOM" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Nome da peça BOM" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Produção" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Fornecedor da Peça" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Quantidade Alocada" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Referência da produção" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Nome da Categoria" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Rastreável" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Herdado" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Item BOM" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Agendado para produção" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Estoque Externo" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Estoque Disponível" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Estoque Substituto Disponível" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Estoque de Variantes Disponível" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "Em Espera" msgid "Cancelled" msgstr "Cancelado" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Concluído" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Estoque obrigatório para a ordem de produção" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Ordem de produção {build} requer estoque adicional" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Ordem de produção vencido" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Ordem de produção {bo} está atrasada" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "É um link" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "É um arquivo" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "O usuário não tem permissão para deletar esses anexos" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "O usuário não tem permissão para deletar esse anexo" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Código de moeda inválido" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Código de moeda duplicado" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Nenhum código de moeda válido fornecido" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Sem extensão" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Rótulo de código do projeto" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Atualizado" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Tempo da última atualização" @@ -1546,778 +1554,778 @@ msgstr "Atualizado Por" msgid "User who last updated this object" msgstr "Usuário que atualizou este objeto pela última vez" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Código único do projeto" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Descrição do projeto" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Usuário ou grupo responsável por este projeto" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Chave de configurações" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Valor da Configuração" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Valor escolhido não é uma opção válida" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Valor deve ser um valor booleano" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Valor deve ser um número inteiro" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "O valor deve ser um número válido" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "O valor não passa em verificações de validação" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "A frase senha deve ser diferenciada" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Usuário" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Preço" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Preço unitário na quantidade especificada" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Ponto final" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Ponto final em qual o webhook foi recebido" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Nome para este webhook" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Ativo" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Este webhook está ativo" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Ficha" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Ficha para acesso" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Secreto" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Segredo compartilhado para HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "ID da Mensagem" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Identificador exclusivo desta mensagem" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Servidor" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Servidor do qual esta mensagem foi recebida" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Cabeçalho" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Cabeçalho da mensagem" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Corpo" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Corpo da mensagem" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Ponto do qual esta mensagem foi recebida" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Trabalhado em" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "O trabalho desta mensagem foi concluído?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "Id" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Título" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Publicado" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Autor" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Resumo" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Lida" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Esta notícia do item foi lida?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Arquivo de imagem" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "Tipo modelo de destino para esta imagem" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "ID do modelo de destino para esta imagem" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Unidade Personalizada" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "O símbolo da unidade deve ser único" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Nome da unidade deve ser um identificador válido" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Nome da unidade" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Símbolo de unidade opcional" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definição" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Definição de unidade" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Anexo" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Arquivo ausente" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Link externo não encontrado" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Categoria de Modelo" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "Tipo modelo de destino para esta imagem" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Selecione arquivo para anexar" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Comentário" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Comentário de anexo" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Data de envio" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Data em que o arquivo foi enviado" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Tamanho do arquivo" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Tamanho do arquivo em bytes" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Categoria de modelo especificado inválido para anexo" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "Estado personalizado" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "Estados personalizados" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "Status Referência Definido" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "Conjunto de status estendido com este estado personalizado" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Chave lógica" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "Chave lógica de estado que é igual a este estado personalizado na lógica de negócios" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Valor" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "Valor numérico que será salvo no banco de dados dos modelos" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Nome do estado" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Etiqueta que será exibida no frontend" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Cor" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Cor que será exibida no frontend" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Modelo" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "Modelo que este estado está associado a" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "Modelo deve ser selecionado" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "A chave deve ser selecionada" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "Chave lógica deve ser selecionada" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "A chave deve diferir da chave lógica" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "Uma classe de estado de referência válida deve ser fornecida" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "A chave deve diferir das chaves lógicas do estado de referência" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "A chave lógica deve estar nas chaves lógicas do estado de referência" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "O nome deve diferir dos nomes do estado de referência" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Lista de Seleção" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Listas de Seleção" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Nome da lista de seleção" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Descrição da lista de seleção" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Bloqueado" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "Esta lista de seleção está bloqueada?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "Esta lista de seleção pode ser usada?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Extensão de origem" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Extensão que fornece a lista de seleção" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Série de Origem" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Série opcional identificando a fonte usada para esta lista" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Entrada Padrão" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Entrada padrão para esta lista de seleção" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Criado em" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Data e hora em que a lista de seleção foi criada" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Última Atualização" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "Data e hora da última atualização da lista de seleção" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Entrada na lista de seleção" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Entradas na Lista de Seleção" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Lista de seleção à qual esta entrada pertence" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Valor da entrada da lista de seleção" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Rótulo para a entrada da lista de seleção" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Descrição da entrada da lista de seleção" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "Esta entrada da lista de seleção está ativa?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Nome do Parâmetro" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Unidades" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Caixa de seleção" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Modelo" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Dados" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Anotação" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" -msgstr "" +msgstr "Campo opcional de notas" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Escaneamento de Código de Barras" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Dados de código de barras" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Usuário que escaneou o código de barras" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Marcador de hora" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Data e hora da verificação do código de barras" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "O endpoint da URL que processou o código de barras" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Dados de contexto para escanear código de barras" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Resposta" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Dados de resposta da verificação de código de barras" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultado" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "O código de barras foi digitalizado com sucesso?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "Ocorreu um erro" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: exclusão de registro de e-mail está protegida. Defina INVENTREE_PROTECT_EMAIL_LOG para Falso para permitir a exclusão." -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "Mensagem de e-mail" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "Mensagens de Email" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "Anunciado" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "Enviado" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "Falhou" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "Entregue" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "Confirmado" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "Entrada" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "Saída" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "Não responder" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "Rastrear Entrega" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "Monitorado" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "Clique no caminho" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "ID Global" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "Identificador para esta mensagem (pode ser fornecido por sistema externo)" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "ID do Tópico" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Identificador deste tópico de mensagem (pode ser fornecido por sistema externo)" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "Tópico" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "Tópico vinculado para esta mensagem" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "Tópico do e-mail" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "Tópicos de e-mail" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Chave" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "Chave única para este tópico (usada para identificar o tópico)" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "Identificador exclusivo deste tópico" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "Iniciado interno" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "Este tópico foi iniciado internamente?" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "Data e hora em que o tópico foi criado" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "Data e hora da última atualização do tópico" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} cancelado" msgid "A order that is assigned to you was canceled" msgstr "Um pedido atribuído a você foi cancelado" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Itens Recebidos" @@ -2351,93 +2359,101 @@ msgstr "Os itens de um pedido de compra foram recebidos" msgid "Items have been received against a return order" msgstr "Os itens de um pedido de devolução foram recebidos" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "É indicado se a configuração é substituída por uma variável de ambiente" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "Substituir" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Está em execução" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Tarefas Pendentes" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Tarefas Agendadas" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Tarefas com Falhas" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID da Tarefa" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "ID Único da Tarefa" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Bloquear" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Congelar tempo" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Nome da tarefa" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Função" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Nome da função" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumentos" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumentos da tarefa" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Argumentos de Palavra-chave" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Argumentos Palavra-chave da Tarefa" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Nome do arquivo" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Categoria de Modelo" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Usuário não tem permissão para criar ou editar anexos para este modelo" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lista de seleção bloqueada" @@ -2445,1128 +2461,1157 @@ msgstr "Lista de seleção bloqueada" msgid "No group" msgstr "Sem Grupo" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "URL do site está bloqueada por configuração" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Reinicialização necessária" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Uma configuração que requer uma reinicialização do servidor foi alterada" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Migrações pendentes" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Número de migrações pendentes na base de dados" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "Códigos de aviso ativos" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "Um dicionário dos códigos de aviso ativos" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "ID da instância" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "Identificador exclusivo para esta instância do InvenTree" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "Anúncio ID" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Anuncie a ID da instância do servidor na informação de estado do servidor (não autenticado)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Nome da Instância do Servidor" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Descritor de frases para a instância do servidor" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Usar nome da instância" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Usar o nome da instância na barra de título" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Restringir a exibição 'sobre'" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Mostrar 'sobre' modal apenas para superusuários" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Nome da empresa" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Nome interno da Empresa" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "URL de Base" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "URL de base para instância do servidor" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Moeda Padrão" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Selecione a moeda base para cálculos de preços" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Moedas Suportadas" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Lista de códigos de moeda suportados" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Intervalo de Atualização da Moeda" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Com que frequência atualizar as taxas de câmbio (defina como zero para desativar)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "dias" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Extensão de Atualização de Moeda" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Extensão de Atualização de Moeda a utilizar" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Baixar do URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Permitir baixar imagens remotas e arquivos de URL externos" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Limite de tamanho para baixar" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Tamanho máximo permitido para download da imagem remota" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "Usuário-agente utilizado para baixar da URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Permitir a substituição de imagens e arquivos usados baixados por usuário-agente (deixar em branco por padrão)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Validação rigorosa de URL" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Exigir especificação de esquema ao validar URLs" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Atualizar Intervalo de Verificação" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Frequência para verificar atualizações (defina como zero para desativar)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Backup Automático" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Ativar cópia de segurança automática do banco de dados e arquivos de mídia" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Intervalo de Backup Automático" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Especificar o número de dia entre as cópias de segurança" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Intervalo para Excluir da Tarefa" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Os resultados da tarefa no plano de fundo serão excluídos após um número especificado de dias" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Intervalo para Excluir do Registro de Erro" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Registros de erros serão excluídos após um número especificado de dias" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Intervalo para Excluir de Notificação" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Notificações de usuários será excluído após um número especificado de dias" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "Intervalo de Exclusão de e-mail" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "Mensagens de e-mail serão excluídas após um determinado número de dias" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "Proteger o Log de E-mail" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "Evitar exclusão de entradas de registros de e-mail" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Suporte aos códigos de barras" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Ativar suporte a leitor de código de barras na interface web" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "Armazenar Resultados do Código de Barras" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "Armazenar a verificação do código de barras no banco de dados" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "Contagem máxima de códigos de barras" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "Número máximo de resultados de digitalização de códigos de barras para armazenar" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Atraso na entrada de código de barras" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Tempo de atraso de processamento de entrada de barras" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Suporte a webcam com código de barras" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir a verificação de códigos de barras via webcam no navegador" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "Código de barras Exibir Dados" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Exibir dados do código de barras no navegador como texto" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Extensão de geração de códio de barras" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Extensão para usar para geração de dados de código de barras interno" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Revisões de peças" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Ativar campo de revisão para a Peça" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "Somente Revisão da Assembleia" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "Permitir revisões apenas para peças de montagem" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Permitir a exclusão da Assembleia" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Permitir a exclusão de peças que são usadas em uma montagem" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Padrão de expressão regular para correspondência de Parte IPN" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Permitir Duplicação IPN" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que várias peças compartilhem o mesmo IPN" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Permitir Edição IPN" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Permitir trocar o valor do IPN enquanto se edita a peça" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Copiar dados da LDM da Peça" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar dados da LDM por padrão quando duplicar a peça" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Copiar Dados de Parâmetro da Peça" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Copiar dados de parâmetros por padrão quando duplicar uma peça" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Copiar Dados Teste da Peça" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Copiar dados de teste por padrão quando duplicar a peça" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Copiar Parâmetros dos Modelos de Categoria" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Copiar parâmetros do modelo de categoria quando criar uma peça" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Peças são modelos por padrão" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Peças podem ser montadas a partir de outros componentes por padrão" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Componente" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Peças podem ser usadas como sub-componentes por padrão" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Comprável" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Peças são compráveis por padrão" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Comercializável" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Peças vão vendíveis por padrão" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Peças vão rastreáveis por padrão" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Peças são virtuais por padrão" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Mostrar peças relacionadas" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Exibir peças relacionadas com uma peça" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Dados Iniciais de Estoque" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Permitir a criação do estoque inicial quando adicionar uma nova peça" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Dados Iniciais de Fornecedor" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Permitir a criação de dados iniciais de fornecedor quando adicionar uma nova peça" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Formato de Exibição do Nome da Peça" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Formato para exibir o nome da peça" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Ícone de Categoria de Peça Padrão" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Ícone padrão de categoria de peça (vazio significa sem ícone)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de Casas Decimais do Preço" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Mínimo número de casas decimais a exibir quando renderizar dados de preços" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Máximo Casas Decimais de Preço" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Número máximo de casas decimais a exibir quando renderizar dados de preços" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Usar Preços do Fornecedor" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Incluir quebras de preço do fornecedor nos cálculos de preços globais" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Substituir Histórico de Compras" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Histórico do pedido de compra substitui os intervalos dos preços do fornecedor" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Usar Preços do Item em Estoque" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Usar preço inserido manualmente no estoque para cálculos de valores" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Idade do preço do Item em Estoque" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Não incluir itens em estoque mais velhos que este número de dias no cálculo de preços" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Usar Preço Variável" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir preços variáveis nos cálculos de valores gerais" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Apenas Ativar Variáveis" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Apenas usar peças variáveis ativas para calcular preço variáveis" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "Atualização automática dos preços" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "Atualizar automaticamente o preço da peça quando dados internos forem alterados" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Intervalo de Reconstrução de Preços" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Número de dias antes da atualização automática dos preços das peças" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Preços Internos" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Habilitar preços internos para peças" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Substituição de preço interno" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Se disponível, os preços internos substituem os cálculos da faixa de preços" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Habilitar Impressão de Etiqueta" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Ativar impressão de etiqueta pela interface da internet" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "DPI da Imagem na Etiqueta" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Resolução de DPI quando gerar arquivo de imagens para fornecer à extensão de impressão de etiquetas" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Ativar Relatórios" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Ativar geração de relatórios" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Modo de depuração" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Gerar relatórios em modo de depuração (saída HTML)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Registro de erros" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Registrar erros que ocorrem ao gerar relatórios" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Tamanho da página" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Tamanho padrão da página PDF para relatórios" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Forçar Unidades de Parâmetro" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Se as unidades são fornecidas, os valores do parâmetro devem corresponder às unidades especificadas" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Seriais Únicos Globais" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Números de série para itens de estoque devem ser globalmente únicos" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Excluir Estoque Esgotado" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Determina o comportamento padrão, quando um item de estoque é esgotado" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Modelo de Código de Lote" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Modelo para gerar códigos de lote padrão para itens de estoque" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Validade do Estoque" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Ativar função de validade de estoque" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Vender estoque expirado" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Permitir venda de estoque expirado" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Tempo de Estoque Inativo" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Número de dias em que os itens em estoque são considerados obsoleto antes de vencer" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Produzir Estoque Vencido" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Permitir produção com estoque vencido" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Controle de propriedade do estoque" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Ativar controle de propriedade sobre locais e itens de estoque" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Ícone padrão do local de estoque" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Ícone padrão de local de estoque (vazio significa sem ícone)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Mostrar Itens de Estoque Instalados" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Exibir itens de estoque instalados nas tabelas de estoque" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Verificar LDM ao instalar itens" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Itens do estoque instalado devem existir na LDM para a parte principal" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Permitir Fora de Transferência" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Permitir que os itens que não estão em estoque sejam transferidos entre locais de estoque" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Produção" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Produção" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Exigir proprietário responsável" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Um proprietário responsável deve ser atribuído a cada pedido" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "Requer Parte Ativa" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "Impedir a criação de ordem para partes inativas" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Exigir parte bloqueada" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "Impedir criação de pedidos para peças desbloqueadas" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "Exigir validade, BOM" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "Impedir criação de pedido de compilação a menos que LDM tenha sido validada" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "Exigir pedidos secundários fechados" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "Impedir o preenchimento do pedido de construção até que todos os pedidos secundários sejam fechados" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "Pedido de Produção Externo" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "Ativar funcionalidade de pedido de construção externa" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Bloquear Até Passagem de Testes" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Impedir que as saídas da produção sejam concluídas até que todos os testes necessários passem" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Ativar Pedidos de Devolução" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Ativar funcionalidade de pedido de devolução na interface do usuário" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Devolução" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Devolução" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Editar os Pedidos de Devolução Concluídos" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Permitir a edição de pedidos de devolução após serem enviados ou concluídos" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Venda" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Venda" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Envio Padrão de Pedidos de Venda" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Habilitar criação de envio padrão com Pedidos de Vendas" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Editar os Pedidos de Vendas concluídos" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Permitir a edição de pedidos de vendas após serem enviados ou concluídos" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Marcar pedidos enviados como concluídos" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Pedidos de vendas marcados como enviados automaticamente serão concluídos, ignorando o status \"enviado\"" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Compras" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Modelo necessário para gerar campo de referência do Pedido de Compra" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Editar Pedidos de Compra Concluídos" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Permitir a edição de pedidos de compras após serem enviados ou concluídos" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "Converter Moeda" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "Converter valor de item para moeda base quando receber o estoque" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Completar automaticamente os pedidos de Compra" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Marcar automaticamente os pedidos de compra como concluídos quando todos os itens de linha forem recebidos" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Ativar senha esquecida" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Ativar a função \"Esqueci minha senha\" nas páginas de acesso" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Ativar cadastro" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Ativar auto-registro para usuários na página de entrada" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Ativar SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Ativar SSO na página de acesso" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Ativar registro SSO" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Ativar auto-registro via SSO para usuários nas páginas de login" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "Ativar sincronização de grupo SSO" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Ativar sincronização de grupos do InvenTree com grupos fornecidos pelo IdP" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "Chave de grupo SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "O nome dos grupos reivindicam o atributo fornecido pelo IdP" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "Mapa do grupo SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Um mapeamento de grupos de SSO para grupos locais de InvenTree. Se o grupo local não existir, será criado." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "Remover grupos fora do SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Se os grupos atribuídos ao usuário devem ser removidos somente se eles não são o backend pelo IdP. Pois, essa configuração desabilitada pode causar problemas de segurança" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Email obrigatório" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Exigir do usuário o e-mail no cadastro" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Auto-preencher usuários SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Preencher automaticamente os detalhes do usuário a partir de dados da conta SSO" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Enviar email duplo" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Ao se registrar, peça aos usuários duas vezes por seus e-mails" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Senha duas vezes" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "No registro pedir aos usuários duas vezes pela senha" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Domínios permitidos" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Restringir registros a certos domínios (separados por vírgula, começando com @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Grupo no cadastro" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupo ao qual novos usuários serão atribuídos ao registro. Se a sincronização de grupo SSO estiver ativada, este grupo só estará definido se nenhum grupo puder ser atribuído a partir do IdP." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Forçar AMF" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Os usuários devem usar uma segurança multifatorial." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Verificar extensões na inicialização" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Checar que todas as extensões instaladas no início — ativar em ambientes de contêineres" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Verificar por atualizações de extensão" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Ativar verificações periódicas de atualizações para a extensão instalados" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Ativar integração URL" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Ativar extensão para adicionar rotas URL" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Ativar integração de navegação" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Ativar extensões para integrar à navegação" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Ativar integração com aplicativo" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Ativar extensões para adicionar aplicativos" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Ativar integração com agendas" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Ativar extensões para executar tarefas agendadas" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Ativar integração de eventos" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Ativar extensões para responder a eventos internos" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Ativar integração de interface" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Ativar extensões para integrar na interface do usuário" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "Ativar integração com o e-mail" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Ativar extensão para processar e-mails de saída/entrada" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "Ativar códigos de projeto" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "Ativar códigos de projeto para rastrear projetos" -#: common/setting/system.py:1083 -msgid "Enable Stock History" -msgstr "Ativar Histórico de Ações" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" +msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "Ativar funcionalidade para gravação de níveis e valor de estoque históricos" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Excluir Locais Externos" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" -msgstr "Excluir itens de estoque em locais externos dos cálculos do histórico de ações" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Período de contagem automática" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" -msgstr "Número de dias entre gravação automática de histórico de estoque" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" +msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "Excluir entradas antigas do histórico do estoque" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "Eliminar entradas no histórico de ações anteriores ao número especificado de dias" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "Intervalo de Exclusão do Histórico" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "Histórico de ações de estoque será excluído após um número especificado de dias" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "Exibir nomes completos dos usuários" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "Exibir nomes completos dos usuários em vez de nomes de usuários" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "Exibir Perfis de Usuário" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" -msgstr "Exibir Perfis de Usuários em sua página de perfil" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" +msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "Ativar Dados da Estação de Teste" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" -msgstr "Ativar coleção de dados da estação de teste para resultados de teste" +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "Exibir nomes completos dos usuários" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Exibir nomes completos dos usuários em vez de nomes de usuários" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "Exibir Perfis de Usuário" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "Exibir Perfis de Usuários em sua página de perfil" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "Ativar Dados da Estação de Teste" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "Ativar coleção de dados da estação de teste para resultados de teste" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3800,7 +3845,7 @@ msgstr "" #: common/setting/user.py:202 msgid "Enable spotlight navigation functionality" -msgstr "" +msgstr "Ativar a navegação do Spotlight" #: common/setting/user.py:207 msgid "Navigation Icons" @@ -3868,7 +3913,7 @@ msgstr "Salvar as últimas máquinas de impressão usadas para um usuário" #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "Todos os modelos" #: common/validators.py:63 msgid "No attachment model type provided" @@ -3911,366 +3956,370 @@ msgstr "A peça está ativa" msgid "Manufacturer is Active" msgstr "Fabricante está ativo" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "A peça do Fornecedor está ativa" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "A peça interna está ativa" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "O fornecedor está Ativo" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Fabricante" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Empresa" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "Tem estoque" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Empresas" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Descrição da empresa" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Descrição da empresa" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Página Web" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "URL do Site da empresa" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Número de telefone" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Número de telefone do contato" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Endereço de e-mail do contato" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Contato" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Ponto de contato" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link para informações externas da empresa" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "Esta empresa está ativa?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "É um cliente" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Você vende itens para esta empresa?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "É fornecedor" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Você compra itens desta empresa?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "É fabricante" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Esta empresa fabrica peças?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Moeda padrão utilizada para esta empresa" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "CNPJ" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "CNPJ da empresa" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Endereço" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Endereços" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Selecione a Empresa" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Título do endereço" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Título descrevendo a entrada do endereço" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Endereço Principal" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Definir como endereço principal" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Linha 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Linha de endereço 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Linha 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Linha de endereço 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "CEP" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Cidade/Região" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Cidade CEP / região" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Estado/Provincia" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Estado ou Província" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "País" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "País do endereço" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Notas de envio por correio" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Notas para o envio da transportadora" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Notas de envio interno" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Notas de envio para uso interno" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Link para as informações do endereço (externo)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Fabricante da peça" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Peça base" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Selecionar peça" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "NPF" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Número de Peça do Fabricante" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL do link externo da peça do fabricante" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Descrição da peça do fabricante" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Unidades de pacote devem ser compatíveis com as unidades de peça base" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Unidades de pacote devem ser maior que zero" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Parte do fabricante vinculado deve fazer referência à mesma peça base" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Fornecedor" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Esta parte de fornecedor está ativa?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Selecionar peça do fabricante" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL do link externo da peça do fabricante" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Descrição da peça fornecedor" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "preço base" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Embalagem" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Embalagem de peças" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Quantidade de embalagens" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Quantidade total fornecida em um único pacote. Deixe em branco para itens individuais." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "múltiplo" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Pedido múltiplo" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Quantidade disponível do fornecedor" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Disponibilidade Atualizada" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Data da última atualização de dados disponíveis" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Parcelamento de Preço do Fornecedor" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "Retorna a representação de cadeia de caracteres para o endereço primário. Esta propriedade existe para compatibilidade retroativa." - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Moeda padrão utilizada para este fornecedor" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Nome da Empresa" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "Em Estoque" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Ocorreu um erro ao exportar os dados" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "A extensão de exportação de dados retornou dados incorretos" @@ -4318,119 +4367,119 @@ msgstr "Localizado" msgid "Invalid status code" msgstr "Código de status inválido" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Arquivo de dados" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "Arquivo de dados para importar" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Colunas" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "Categoria de modelo de destino para esta sessão de importação" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "Status de importação" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Campos padrões" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "Substituições de campo" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Campo de Filtros" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "Alguns campos necessários não foram mapeados" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "A coluna já está mapeada a um campo de banco de dados" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "O campo já está mapeado para uma coluna de dados" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "Mapeamento de coluna deve ser ligado a uma sessão de importação válida" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "A coluna não existe no arquivo de dados" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "O campo não existe no modelo de destino" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "O campo selecionado é somente leitura" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Importar Sessão" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Campo" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Coluna" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Índice de fileira" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "Dados da linha original" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Erros" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Válido" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "Número de cópias para cada rótulo" msgid "Connected" msgstr "Conectado" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Desconhecido" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Referência do Pedido" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "Pendente" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "Tem código do projeto" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Criado por" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "Criado Antes" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Criado Após" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "Tem Data Inicial" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "Data Inicial Antes" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "Data Inicial Após" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "Tem Data Prevista" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "Data Prevista Antes" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "Data Prevista Antes" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Tem Preço" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "Concluído Antes" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "Concluído Após" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "Pedido de Produção Vencido" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Pedido" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "Pedido Completo" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Peça Interna" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Pedido pendente" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Concluído" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "Possui Envio" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Pedido de Compra" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Pedido de Compra" msgid "Sales Order" msgstr "Pedido de Venda" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Preço Total" msgid "Total price for this order" msgstr "Preço total deste pedido" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Moeda do Pedido" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Moeda para este pedido (deixe em branco para usar o padrão da empresa)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "Este pedido está bloqueado e não pode ser modificado" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "O contato não corresponde à empresa selecionada" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Data inicial deve ser anterior à data limite" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Descrição do pedido (opcional)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Selecione o código do projeto para este pedido" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Link para página externa" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "Data inicial" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Data de início programada para esta encomenda" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data Prevista" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Data esperada para entrega do pedido. O Pedido estará atrasado após esta data." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Data de emissão" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Dia que o pedido foi feito" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Usuário ou grupo responsável para este pedido" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Ponto de contato para este pedido" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Endereço da empresa para este pedido" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Referência do pedido" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Situação" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Estado do pedido" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Empresa da qual os itens estão sendo encomendados" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Referencia do fornecedor" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Código de referência do pedido fornecedor" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "recebido por" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Dia que o pedido foi concluído" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Destino" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "Destino para os itens recebidos" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Fornecedor de peça deve corresponder a fornecedor da OC" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Quantidade deve ser um número positivo" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Empresa para qual os itens foi vendidos" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "Situação do Pedido de Venda" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Referência do Cliente " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Código de Referência do pedido do cliente" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Data de envio" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "O pedido já está completo" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "O pedido já está cancelado" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Apenas um pedido aberto pode ser marcado como completo" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Pedido não pode ser concluído, pois, há envios incompletos" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "O pedido não pode ser concluído, pois, há alocações incompletas" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "O pedido não pode ser concluído, pois, há itens de linha incompletos" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "O pedido está bloqueado e não pode ser modificado" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Quantidade do item" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Referência do Item em Linha" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Observações do Item de Linha" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Data limite para este item de linha (deixe em branco para usar a data limite do pedido)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Descrição do item de linha (opcional)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Contexto adicional para esta linha" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Preço Unitário" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "Item de linha de pedido de compra" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "A peça do fornecedor deve corresponder ao fornecedor" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "Pedido de produção deve ser marcada como externa" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "Os pedidos de produção só podem ser vinculados a partes de montagem" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "Criar parte do pedido deve combinar a parte do item de linha" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Fornecedor da Peça" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Recebido" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Número de itens recebidos" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Preço de Compra" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Preço unitário de compra" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "Pedido de produção externa para ser preenchida por este item de linha" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "Linha Extra do Pedido de Compra" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "Item de Linha de Pedido de Vendas" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "Apenas peças vendáveis podem ser atribuídas a um pedido de venda" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Preço de Venda" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Preço de venda unitário" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Quantidade enviada" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "Envio do Pedido de Venda" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Data do envio" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Data de Entrega" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Data da entrega do envio" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Verificado por" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Usuário que verificou este envio" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envio" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Número do Envio" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Número de rastreio" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Informação de rastreamento" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Quantidade alocada deve ser maior que zero" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Linha" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Item" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Copiar linhas" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Duplicar Pedido" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "ID do pedido inválido" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "O pedido não pode ser cancelado" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Mesclar Itens" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Número Interno da Peça" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "Nome Interno da Peça" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Código de barras já está em uso" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "Itens Alocados" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "Os seguintes números de série não estão disponíveis" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "Rejeitado" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Categoria da Peça" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Categorias de Peça" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Local Padrão" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Local padrão para peças desta categoria" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Palavras-chave Padrão" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Palavras-chave padrão para peças nesta categoria" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Ícone" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Ícone (opcional)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Valor Padrão" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Valor Padrão do Parâmetro" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Peças" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Nome da peça" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "É um modelo" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Descrição da peça (opcional)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Palavras-chaves" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Fornecedor Padrão" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Fornecedor padrão da peça" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Validade Padrão" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Validade (em dias) para itens do estoque desta peça" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Estoque Mínimo" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Criação de Usuário" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Data" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Modelos de teste só podem ser criados para partes testáveis" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Obrigatório" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Sub peça" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Estoque Inicial" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Ignorar Linhas Inválidas" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Habilite essa opção para ignorar linhas inválidas" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "Expirou {abs(days_diff)} dias atrás" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} dias" @@ -6732,108 +6865,108 @@ msgstr "Nenhuma ação especificada" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Nenhum resultado encontrado para os dados do código de barras" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Correspondência encontrada para dados de código de barras" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "Modelo não suportado" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Código de barras corresponde ao item existente" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "Opções" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "Total" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Estoque mínimo" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Estoque máximo" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Responsável" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Selecionar Responsável" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Nome de usuário" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Primeiro Nome" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Primeiro nome do usuário" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Sobrenome" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Sobrenome do usuário" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Endereço de e-mail do usuário" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Superusuário" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "Somente um superusuário pode ajustar este campo" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "Senha" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "Senha do usuário" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "Você não tem permissão para criar usuários" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Sua conta foi criada." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Bem-vindo(a) ao InvenTree" diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po index 2600bc902b..6bb3f34253 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -17,409 +17,392 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" +msgstr "Criteriul API final nu a fost găsit" + +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "" - -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" -msgstr "" +msgstr "Articolele trebuie să fie furnizate ca o listă" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" -msgstr "" +msgstr "Listă de articole nevalidă furnizată" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" +#: InvenTree/api.py:458 +msgid "All filter must only be used with true" +msgstr "Toate filtrele trebuie folosite doar cu adevărat" #: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 -msgid "All filter must only be used with true" -msgstr "" - -#: InvenTree/api.py:473 msgid "No items match the provided criteria" -msgstr "" +msgstr "Niciun articol nu corespunde criteriilor furnizate" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" -msgstr "" +msgstr "Nu sunt furnizate date" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "Acest câmp trebuie să fie unic." -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Utilizatorul nu are permisiunea de a vedea acest model" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" -msgstr "" +msgstr "E-mail (din nou)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" -msgstr "" +msgstr "Confirmare adresă e-mail" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." -msgstr "" +msgstr "Trebuie să tastați același e-mail de fiecare dată." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." -msgstr "" +msgstr "Adresa de e-mail principală furnizată nu este validă." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Domeniul de e-mail furnizat nu este aprobat." #: InvenTree/conversion.py:240 #, python-brace-format msgid "Invalid unit provided ({unit})" -msgstr "" +msgstr "Unitate nevalidă furnizată ({unit})" #: InvenTree/conversion.py:257 msgid "No value provided" -msgstr "" +msgstr "Nicio valoare furnizată" #: InvenTree/conversion.py:284 #, python-brace-format msgid "Could not convert {original} to {unit}" -msgstr "" +msgstr "Nu s-a putut converti {original} în {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" -msgstr "" +msgstr "Cantitate furnizata nevalida" #: InvenTree/exceptions.py:136 msgid "Error details can be found in the admin panel" -msgstr "" +msgstr "Detaliile de eroare pot fi găsite în panoul de administrare" #: InvenTree/fields.py:146 msgid "Enter date" -msgstr "" +msgstr "Enter Date" #: InvenTree/fields.py:169 msgid "Invalid decimal value" -msgstr "" +msgstr "Valoare zecimală nevalidă" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" -msgstr "" +msgstr "Notițe" #: InvenTree/format.py:166 #, python-brace-format msgid "Value '{name}' does not appear in pattern format" -msgstr "" +msgstr "Valoarea '{name}' nu apare în formatul modelului" #: InvenTree/format.py:177 msgid "Provided value does not match required pattern: " -msgstr "" +msgstr "Valoarea furnizată nu se potrivește cu modelul necesar: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" -msgstr "" +msgstr "Nu se pot serializa mai mult de 1000 de elemente odată" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" -msgstr "" +msgstr "Golire șir de numere de serie" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Număr de serie duplicat" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" -msgstr "" +msgstr "Grup nevalid: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" -msgstr "" +msgstr "Interval de grup {group} depășește cantitatea permisă ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" -msgstr "" +msgstr "Niciun număr de serie găsit" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" -msgstr "" +msgstr "Numărul unic de numere de serie ({n}) trebuie să corespundă cu cantitatea ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" -msgstr "" +msgstr "Elimină tag-urile HTML din această valoare" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" -msgstr "" +msgstr "Datele conţin conţinut de marcaje interzis" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" -msgstr "" +msgstr "Eroare de conexiune" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" -msgstr "" +msgstr "Serverul a răspuns cu un cod de stare invalid" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" -msgstr "" +msgstr "Excepție apărută" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" -msgstr "" +msgstr "Serverul a răspuns cu o valoare de Content-Length invalidă" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" -msgstr "" - -#: InvenTree/helpers_model.py:167 -msgid "Image download exceeded maximum size" -msgstr "" +msgstr "Dimensiunea imaginii este prea mare" #: InvenTree/helpers_model.py:172 -msgid "Remote server returned empty response" -msgstr "" +msgid "Image download exceeded maximum size" +msgstr "Descărcarea imaginii a depăşit dimensiunea maximă" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:177 +msgid "Remote server returned empty response" +msgstr "Serverul la distanță a returnat un răspuns gol" + +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" -msgstr "" +msgstr "URL-ul furnizat nu este un fișier imagine valid" #: InvenTree/magic_login.py:31 msgid "Log in to the app" -msgstr "" +msgstr "Conectați-vă la aplicație" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" -msgstr "" +msgstr "E-mail" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." -msgstr "" +msgstr "Trebuie să activați autentificarea cu doi factori înainte de a face orice altceva." #: InvenTree/models.py:114 msgid "Error running plugin validation" -msgstr "" +msgstr "Eroare la rularea validării plugin-ului" #: InvenTree/models.py:195 msgid "Metadata must be a python dict object" -msgstr "" +msgstr "Metadata trebuie să fie un obiect dict python" #: InvenTree/models.py:201 msgid "Plugin Metadata" -msgstr "" +msgstr "Metadatele plugin" #: InvenTree/models.py:202 msgid "JSON metadata field, for use by external plugins" -msgstr "" +msgstr "Câmp de metadate JSON pentru utilizare de plugin-uri externe" #: InvenTree/models.py:385 msgid "Improperly formatted pattern" -msgstr "" +msgstr "Model formatat incorect" #: InvenTree/models.py:392 msgid "Unknown format key specified" -msgstr "" +msgstr "Format necunoscut cheie specificat" #: InvenTree/models.py:398 msgid "Missing required format key" -msgstr "" +msgstr "Lipseste cheia de format" #: InvenTree/models.py:409 msgid "Reference field cannot be empty" -msgstr "" +msgstr "Câmpul de referință nu poate fi gol" #: InvenTree/models.py:417 msgid "Reference must match required pattern" -msgstr "" +msgstr "Referința trebuie să corespundă modelului necesar" #: InvenTree/models.py:448 msgid "Reference number is too large" -msgstr "" +msgstr "Numărul de referință este prea mare" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" -msgstr "" +msgstr "Alegere invalidă" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" -msgstr "" +msgstr "Nume" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" -msgstr "" +msgstr "Descriere" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" -msgstr "" +msgstr "Descriere (opțional)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" -msgstr "" +msgstr "Cale" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" -msgstr "" +msgstr "Duplicate nume nu poate exista sub acelaşi părinte" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" -msgstr "" +msgstr "Note Markdown (opțional)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" -msgstr "" +msgstr "Date Cod de Bare" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" -msgstr "" +msgstr "Date coduri de bare terțe" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" -msgstr "" +msgstr "Date Cod de Bare" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" -msgstr "" +msgstr "Hash unic al codului de bare" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" -msgstr "" +msgstr "Cod de bare existent găsit" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" -msgstr "" +msgstr "Eroare de server" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." -msgstr "" +msgstr "A fost înregistrată o eroare de către server." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" -msgstr "" +msgstr "Imagine" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" -msgstr "" +msgstr "Trebuie sa fie un număr valid" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" -msgstr "" +msgstr "Monedă" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" -msgstr "" +msgstr "Selectați moneda din opțiunile disponibile" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "Acest câmp nu poate fi null." -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" -msgstr "" +msgstr "Valoare invalidă" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" -msgstr "" +msgstr "Imagini de la distanţă" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" -msgstr "" +msgstr "URL-ul imaginii la distanţă" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" -msgstr "" +msgstr "Descărcarea imaginilor din URL-ul de la distanţă nu este activată" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" -msgstr "" +msgstr "Descărcarea imaginii din URL-ul de la distanță a eșuat" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" -msgstr "" +msgstr "Format de tip de conținut nevalid" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" -msgstr "" +msgstr "Tipul de conținut nu a fost găsit" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "Tipul de conținut nu se potrivește cu mixin necesar clasei" #: InvenTree/setting/locales.py:20 msgid "Arabic" -msgstr "" +msgstr "Arabic" #: InvenTree/setting/locales.py:21 msgid "Bulgarian" -msgstr "" +msgstr "Bulgară" #: InvenTree/setting/locales.py:22 msgid "Czech" -msgstr "" +msgstr "Cehă" #: InvenTree/setting/locales.py:23 msgid "Danish" -msgstr "" +msgstr "Daneză" #: InvenTree/setting/locales.py:24 msgid "German" -msgstr "" +msgstr "Germană" #: InvenTree/setting/locales.py:25 msgid "Greek" -msgstr "" +msgstr "Greacă" #: InvenTree/setting/locales.py:26 msgid "English" -msgstr "" +msgstr "Engleză" #: InvenTree/setting/locales.py:27 msgid "Spanish" -msgstr "" +msgstr "Spaniolă" #: InvenTree/setting/locales.py:28 msgid "Spanish (Mexican)" -msgstr "" +msgstr "Spaniolă (Mexican)" #: InvenTree/setting/locales.py:29 msgid "Estonian" @@ -427,156 +410,156 @@ msgstr "Estonă" #: InvenTree/setting/locales.py:30 msgid "Farsi / Persian" -msgstr "" +msgstr "Farsi / persană" #: InvenTree/setting/locales.py:31 msgid "Finnish" -msgstr "" +msgstr "Finlandeză" #: InvenTree/setting/locales.py:32 msgid "French" -msgstr "" +msgstr "Franceză" #: InvenTree/setting/locales.py:33 msgid "Hebrew" -msgstr "" +msgstr "Ebraică" #: InvenTree/setting/locales.py:34 msgid "Hindi" -msgstr "" +msgstr "Hindi" #: InvenTree/setting/locales.py:35 msgid "Hungarian" -msgstr "" +msgstr "Maghiară" #: InvenTree/setting/locales.py:36 msgid "Italian" -msgstr "" +msgstr "Italiană" #: InvenTree/setting/locales.py:37 msgid "Japanese" -msgstr "" +msgstr "Japoneză" #: InvenTree/setting/locales.py:38 msgid "Korean" -msgstr "" +msgstr "Coreeană" #: InvenTree/setting/locales.py:39 msgid "Lithuanian" -msgstr "" +msgstr "Lituaniană" #: InvenTree/setting/locales.py:40 msgid "Latvian" -msgstr "" +msgstr "Letonă" #: InvenTree/setting/locales.py:41 msgid "Dutch" -msgstr "" +msgstr "Olandeză" #: InvenTree/setting/locales.py:42 msgid "Norwegian" -msgstr "" +msgstr "Norvegiană" #: InvenTree/setting/locales.py:43 msgid "Polish" -msgstr "" +msgstr "Poloneză" #: InvenTree/setting/locales.py:44 msgid "Portuguese" -msgstr "" +msgstr "Portugheză" #: InvenTree/setting/locales.py:45 msgid "Portuguese (Brazilian)" -msgstr "" +msgstr "Portugheză (braziliană)" #: InvenTree/setting/locales.py:46 msgid "Romanian" -msgstr "" +msgstr "Română" #: InvenTree/setting/locales.py:47 msgid "Russian" -msgstr "" +msgstr "Rusă" #: InvenTree/setting/locales.py:48 msgid "Slovak" -msgstr "" +msgstr "Slovacă" #: InvenTree/setting/locales.py:49 msgid "Slovenian" -msgstr "" +msgstr "Slovenă" #: InvenTree/setting/locales.py:50 msgid "Serbian" -msgstr "" +msgstr "Sârbă" #: InvenTree/setting/locales.py:51 msgid "Swedish" -msgstr "" +msgstr "Suedeză" #: InvenTree/setting/locales.py:52 msgid "Thai" -msgstr "" +msgstr "Thai" #: InvenTree/setting/locales.py:53 msgid "Turkish" -msgstr "" +msgstr "Turcă" #: InvenTree/setting/locales.py:54 msgid "Ukrainian" -msgstr "" +msgstr "Ucraineană" #: InvenTree/setting/locales.py:55 msgid "Vietnamese" -msgstr "" +msgstr "Vietnameză" #: InvenTree/setting/locales.py:56 msgid "Chinese (Simplified)" -msgstr "" +msgstr "Chineză (simplificată)" #: InvenTree/setting/locales.py:57 msgid "Chinese (Traditional)" -msgstr "" +msgstr "Chineză (tradițională)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" -msgstr "" +msgstr "Actualizare disponibilă" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" -msgstr "" +msgstr "O actualizare pentru InvenTree este disponibilă" #: InvenTree/validators.py:28 msgid "Invalid physical unit" -msgstr "" +msgstr "Unitate fizică nevalidă" #: InvenTree/validators.py:34 msgid "Not a valid currency code" -msgstr "" +msgstr "Nu este un cod valutar valid" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" -msgstr "" +msgstr "Starea comenzii" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" -msgstr "" +msgstr "Construcție părinte" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" -msgstr "" +msgstr "İnclude variante" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,434 +568,443 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 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/email/part_event_notification.html:15 #: templates/email/stale_stock_notification.html:17 msgid "Part" -msgstr "" +msgstr "Piesă" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" -msgstr "" +msgstr "Categorie" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" -msgstr "" +msgstr "Ancestor Build" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" -msgstr "" +msgstr "Alocate mie" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" -msgstr "" +msgstr "Atribuit către" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" -msgstr "" +msgstr "Creat înainte de" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" -msgstr "" +msgstr "Creat după" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" -msgstr "" +msgstr "Are data de începere" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" -msgstr "" +msgstr "Data de început înainte de" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" -msgstr "" +msgstr "Data de incepere după" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" -msgstr "" +msgstr "Are dată țintă" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" -msgstr "" +msgstr "Data de început înainte de" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" -msgstr "" +msgstr "Data de incepere după" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" -msgstr "" +msgstr "Finalizat înainte de" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" -msgstr "" +msgstr "Finalizat după" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" -msgstr "" +msgstr "Dată min" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" -msgstr "" +msgstr "Dată maximă" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" -msgstr "" +msgstr "Exclude arbore" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" -msgstr "" +msgstr "Construcția trebuie anulată înainte de a putea fi ștearsă" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" -msgstr "" +msgstr "Consumabile" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" -msgstr "" +msgstr "Opţional" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" -msgstr "" +msgstr "Asamblate" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" -msgstr "" +msgstr "Urmarit" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" -msgstr "" +msgstr "Testabilă" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" -msgstr "" +msgstr "Comandă restantă" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" -msgstr "" +msgstr "Alocate" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" -msgstr "" +msgstr "Consumat" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" -msgstr "" +msgstr "Disponibil" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" +msgstr "Pe comandă" + +#: build/api.py:671 +msgid "Build not found" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" -msgstr "" +msgstr "Comenzi de Producție" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" -msgstr "" +msgstr "Locatie" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" -msgstr "" +msgstr "Ieșire" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." -msgstr "" +msgstr "Filtrează după ID-ul elementelor de ieșire din stoc. Utilizați \"null\" pentru a găsi elemente de construcție dezinstalate." -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Comenzi de Producție" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" -msgstr "" +msgstr "BOM-ul nu a fost validată" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" -msgstr "" +msgstr "Comandă de producție nu poate fi creată pentru piesa inactiva" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" -msgstr "" - -#: build/models.py:201 -msgid "Build orders can only be externally fulfilled for purchaseable parts" -msgstr "" - -#: build/models.py:208 order/models.py:370 -msgid "Responsible user or group must be specified" -msgstr "" +msgstr "Comandă de producție nu poate fi creată pentru piesa deblocată" #: build/models.py:213 +msgid "Build orders can only be externally fulfilled for purchaseable parts" +msgstr "Comenzile de producție pot fi îndeplinite extern doar pentru piesele achiziționabile" + +#: build/models.py:220 order/models.py:373 +msgid "Responsible user or group must be specified" +msgstr "Utilizator sau grup responsabil trebuie specificat" + +#: build/models.py:225 msgid "Build order part cannot be changed" -msgstr "" +msgstr "Piesa din comanda de producție nu poate fi schimbata" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" -msgstr "" +msgstr "Data țintă trebuie să fie după data de început" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" -msgstr "" +msgstr "Referință comandă producție" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 #: report/templates/report/inventree_sales_order_report.html:28 msgid "Reference" -msgstr "" +msgstr "Referinţă" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" -msgstr "" +msgstr "Scurtă descriere a construcției (opțional)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "Comanda de producție pentru care această construcție este alocată" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" -msgstr "" +msgstr "Selectează piesa pentru construit" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" -msgstr "" +msgstr "Referință comandă de vânzare" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "Comanda de vânzare pentru care această construcție este alocată" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" -msgstr "" - -#: build/models.py:296 -msgid "Select location to take stock from for this build (leave blank to take from any stock location)" -msgstr "" - -#: build/models.py:302 -msgid "External Build" -msgstr "" - -#: build/models.py:303 -msgid "This build order is fulfilled externally" -msgstr "" +msgstr "Locație sursă" #: build/models.py:308 -msgid "Destination Location" -msgstr "" +msgid "Select location to take stock from for this build (leave blank to take from any stock location)" +msgstr "Selectați locația de unde se va prelua stocul pentru această producție (lăsați câmpul necompletat pentru a prelua stocul din orice locație)" -#: build/models.py:313 -msgid "Select location where the completed items will be stored" -msgstr "" +#: build/models.py:314 +msgid "External Build" +msgstr "Construcție externă" -#: build/models.py:317 -msgid "Build Quantity" -msgstr "" +#: build/models.py:315 +msgid "This build order is fulfilled externally" +msgstr "Această comandă de producție este îndeplinită extern" #: build/models.py:320 +msgid "Destination Location" +msgstr "Locul destinației" + +#: build/models.py:325 +msgid "Select location where the completed items will be stored" +msgstr "Selectaţi locaţia unde vor fi stocate elementele complete" + +#: build/models.py:329 +msgid "Build Quantity" +msgstr "Cantitatea construirii" + +#: build/models.py:332 msgid "Number of stock items to build" -msgstr "" +msgstr "Numărul de articole de stoc pentru producție" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" -msgstr "" +msgstr "Articole finalizate" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" -msgstr "" +msgstr "Numărul de articole din stoc care au fost finalizate" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" -msgstr "" +msgstr "Stare producției" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" -msgstr "" +msgstr "Cod status producție" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" -msgstr "" +msgstr "Cod lot" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" -msgstr "" +msgstr "Cod de lot pentru această producție" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" -msgstr "" +msgstr "Data creării" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" -msgstr "" +msgstr "Data începerii construcției" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" -msgstr "" +msgstr "Data de început programată pentru această comandă de construcție" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" -msgstr "" +msgstr "Data finalizării țintă" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." -msgstr "" +msgstr "Data țintă pentru finalizarea construcției. Construcția va fi depășită după această dată." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" -msgstr "" +msgstr "Data completării" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" -msgstr "" +msgstr "finalizat până la" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" -msgstr "" +msgstr "Emis de" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" -msgstr "" +msgstr "Utilizatorul care a emis această comandă de producție" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" -msgstr "" - -#: build/models.py:400 -msgid "User or group responsible for this build order" -msgstr "" - -#: build/models.py:405 stock/models.py:1093 -msgid "External Link" -msgstr "" - -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 -msgid "Link to external URL" -msgstr "" +msgstr "Responsabil" #: build/models.py:412 -msgid "Build Priority" -msgstr "" +msgid "User or group responsible for this build order" +msgstr "Utilizatorul sau grupul responsabil pentru această comandă de producție" -#: build/models.py:415 -msgid "Priority of this build order" -msgstr "" +#: build/models.py:417 stock/models.py:1100 +msgid "External Link" +msgstr "Link extern" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 -msgid "Project Code" -msgstr "" +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 +msgid "Link to external URL" +msgstr "Link către URL-ul extern" #: build/models.py:424 +msgid "Build Priority" +msgstr "Prioritate de construire" + +#: build/models.py:427 +msgid "Priority of this build order" +msgstr "Prioritatea acestei comenzi de producție" + +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 +msgid "Project Code" +msgstr "Cod proiect" + +#: build/models.py:436 msgid "Project code for this build order" -msgstr "" +msgstr "Cod de proiect pentru această comandă de construcție" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" -msgstr "" +msgstr "Nu se poate finaliza construcția comenzii cu versiuni deschise" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" -msgstr "" +msgstr "Nu se poate completa comanda de producție cu rezultate incomplete" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" -msgstr "" +msgstr "Nu s-a putut descărca sarcina pentru a finaliza alocarea construcției" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "" +msgstr "A fost finalizată o comandă de producție {build}" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" -msgstr "" +msgstr "A fost finalizată o comandă de producție" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" -msgstr "" +msgstr "Numerele de serie trebuie furnizate pentru piesele urmăribile" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" -msgstr "" +msgstr "Nu este specificată nicio ieșire de producție" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" -msgstr "" +msgstr "Construcția este deja finalizată" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" -msgstr "" +msgstr "Construcția nu se potrivește cu Comanda de producție" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" -msgstr "" +msgstr "Cantitatea trebuie să fie mai mare decât zero" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" -msgstr "" +msgstr "Cantitatea nu poate fi mai mare decât cantitatea de ieşire" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" -msgstr "" +msgstr "Construcția nu a trecut toate testele necesare" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" -msgstr "" +msgstr "Construcția {serial} nu a trecut toate testele necesare" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "Stocurile alocate sunt încă în producţie" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" -msgstr "" +msgstr "Nu se poate finaliza parțial o construcție cu elemente alocate" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" -msgstr "" +msgstr "Element linie comandă de producție" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" -msgstr "" +msgstr "Construiește obiectul" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" -msgstr "" +msgstr "Cantitate" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" -msgstr "" +msgstr "Cantitatea necesară pentru comanda de producție" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" -msgstr "" +msgstr "Cantitatea de stoc consumată" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "" +msgstr "Articolul contruit trebuie să specifice o ieșire de construcție, deoarece piesa principală este marcată ca urmăribilă." -#: build/models.py:1784 -#, python-brace-format -msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "" - -#: build/models.py:1805 order/models.py:2547 -msgid "Stock item is over-allocated" -msgstr "" - -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 +#: build/models.py:1951 msgid "Selected stock item does not match BOM line" -msgstr "" +msgstr "Articolul din stoc selectat nu se potrivește cu linia BOM" -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 -#: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 -msgid "Stock Item" -msgstr "" - -#: build/models.py:1966 -msgid "Source stock item" -msgstr "" +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "Cantitatea alocată trebuie să fie mai mare decât zero" #: build/models.py:1976 -msgid "Stock quantity to allocate to build" -msgstr "" - -#: build/models.py:1985 -msgid "Install into" -msgstr "" +msgid "Quantity must be 1 for serialized stock" +msgstr "Cantitatea trebuie sa fie 1 pentru stoc serializat" #: build/models.py:1986 +#, python-brace-format +msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" +msgstr "Cantitate alocata ({q}) nu trebuie sa depaseasca cantitatea disponibila de stoc ({a})" + +#: build/models.py:2003 order/models.py:2556 +msgid "Stock item is over-allocated" +msgstr "Articolul din stoc este supra alocat" + +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 +#: report/templates/report/inventree_sales_order_shipment_report.html:29 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 +msgid "Stock Item" +msgstr "Articol Stoc" + +#: build/models.py:2093 +msgid "Source stock item" +msgstr "Locație articol stoc" + +#: build/models.py:2103 +msgid "Stock quantity to allocate to build" +msgstr "Cantitatea de stoc alocată pentru construcție" + +#: build/models.py:2112 +msgid "Install into" +msgstr "Instalează în" + +#: build/models.py:2113 msgid "Destination stock item" -msgstr "" +msgstr "Destinație articol in stoc" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" -msgstr "" +msgstr "Nivel de construcție" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" -msgstr "" +msgstr "Numele Piesei" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" -msgstr "" +msgstr "Rezultat de construcție" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" -msgstr "" +msgstr "Producția nu corespunde cu producția-mamă" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" -msgstr "" +msgstr "Componenta de ieșire nu corespunde componentei din comanda de producție" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" -msgstr "" +msgstr "Această producție este deja finalizată" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" -msgstr "" +msgstr "Această producție nu este alocată integral" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" -msgstr "" +msgstr "Introduceți cantitatea pentru producția de ieșire" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" -msgstr "" +msgstr "Număr de serie" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" -msgstr "" +msgstr "Nu este permisă" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" -msgstr "" +msgstr "Acceptați nealocat" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" -msgstr "" +msgstr "Acceptați Incomplet" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" -msgstr "" +msgstr "Linie de construcție" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" -msgstr "" +msgstr "Rezultatul construirii" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" -msgstr "" +msgstr "Locația stocului de unde vor fi procurate piesele (lăsați necompletat pentru a prelua piesele din orice locație)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" +msgstr "Nume piesă BOM" + +#: build/serializers.py:1242 +msgid "Install Into" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" -msgstr "" +msgstr "Producție" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" -msgstr "" +msgstr "Nume Categorie Piesă" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" -msgstr "" +msgstr "În Producţie" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" -msgstr "" +msgstr "Stoc extern" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" -msgstr "" +msgstr "Stoc disponibil" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" -msgstr "" +msgstr "Stoc de înlocuire disponibil" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1458,83 +1462,87 @@ msgstr "" #: generic/states/tests.py:131 order/status_codes.py:12 #: order/status_codes.py:44 order/status_codes.py:76 order/status_codes.py:102 msgid "Pending" -msgstr "" +msgstr "În așteptare" #: build/status_codes.py:12 msgid "Production" -msgstr "" +msgstr "Producție" #: build/status_codes.py:13 order/status_codes.py:14 order/status_codes.py:51 #: order/status_codes.py:81 msgid "On Hold" -msgstr "" +msgstr "Suspendat" #: build/status_codes.py:14 order/status_codes.py:16 order/status_codes.py:53 #: order/status_codes.py:84 msgid "Cancelled" -msgstr "" +msgstr "Anulat" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" -msgstr "" +msgstr "Finalizat" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" -msgstr "" +msgstr "Comandă de producție restantă" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" -msgstr "" +msgstr "Comanda de producție {bo} este în întârziere" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Etichetă Cod Proiect" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" -msgstr "" +msgstr "Descrierea proiectului" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" -msgstr "" +msgstr "Utilizatorul sau grupul responsabil pentru acest proiect" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" -msgstr "" +msgstr "Valoarea nu trece verificările de validare" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" -msgstr "" +msgstr "Utilizator" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" -msgstr "" +msgstr "Preț" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" -msgstr "" +msgstr "Preț unitar la cantitatea specificată" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" -msgstr "" +msgstr "Punct final" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" -msgstr "" +msgstr "Punctul final la care acest webhook este primit" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" -msgstr "" +msgstr "Nume pentru acest webhook" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" -msgstr "" - -#: common/models.py:1419 -msgid "Is this webhook active" -msgstr "" - -#: common/models.py:1435 users/models.py:172 -msgid "Token" -msgstr "" +msgstr "Activ" #: common/models.py:1436 +msgid "Is this webhook active" +msgstr "Este acest webhook activ" + +#: common/models.py:1452 users/models.py:172 +msgid "Token" +msgstr "Token-ul" + +#: common/models.py:1453 msgid "Token for access" -msgstr "" +msgstr "Token pentru acces" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" -msgstr "" +msgstr "Secret" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" -msgstr "" +msgstr "Host" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" -msgstr "" +msgstr "Host de la care acest mesaj a fost primit" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" -msgstr "" +msgstr "Id-ul" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" -msgstr "" +msgstr "Titlu" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" -msgstr "" +msgstr "Link" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" -msgstr "" +msgstr "Publicată" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" -msgstr "" +msgstr "Autor" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" -msgstr "" +msgstr "Rezumat" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" -msgstr "" - -#: common/models.py:1735 -msgid "Was this news item read?" -msgstr "" +msgstr "Citit" #: common/models.py:1752 -msgid "Image file" -msgstr "" +msgid "Was this news item read?" +msgstr "A fost citită această știre?" -#: common/models.py:1764 +#: common/models.py:1769 +msgid "Image file" +msgstr "Fișier imagine" + +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" -msgstr "" +msgstr "Unitate personalizată" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" -msgstr "" +msgstr "Numele unității trebuie să fie un identificator valid" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" -msgstr "" +msgstr "Numele unității" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "" -#: common/models.py:1997 -msgid "Comment" -msgstr "" - -#: common/models.py:1998 -msgid "Attachment comment" -msgstr "" - #: common/models.py:2014 -msgid "Upload date" -msgstr "" +msgid "Comment" +msgstr "Comentariu" #: common/models.py:2015 +msgid "Attachment comment" +msgstr "Comentariu atașament" + +#: common/models.py:2031 +msgid "Upload date" +msgstr "Data încărcării" + +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" -msgstr "" +msgstr "Numele statului" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" -msgstr "" +msgstr "Descrierea listei de selecție" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" -msgstr "" +msgstr "Descrierea parametrului" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" -msgstr "" +msgstr "Numele acțiunii" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" -msgstr "" +msgstr "Nume funcție" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" -msgstr "" +msgstr "Nume fișier" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" -msgstr "" +msgstr "Nume Instanţă Server" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" -msgstr "" +msgstr "Utilizaţi numele instanţei" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" -msgstr "" +msgstr "Denumire companie" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" -msgstr "" +msgstr "Versiune Componente" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" -msgstr "" +msgstr "Șablon Cod lot" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" -msgstr "" +msgstr "Șablon pentru generarea codurilor de lot implicite pentru elementele de stoc" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" -msgstr "" +msgstr "Necesită Titularul Responsabil" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" -msgstr "" +msgstr "Titularul responsabil trebuie să fie atribuit fiecărei comenzi" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "Comenzi externe de producție" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" -msgstr "" +msgstr "Blochează până la trecerea testelor" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "" +msgstr "Previne ca ieșirile de construcție să fie finalizate până când toate testele necesare trec" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "" +msgstr "Comenzile de vânzare marcate ca expediate vor fi finalizate automat, ocolind starea \"expediate\"" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" -msgstr "" +msgstr "Activează parola uitată" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" -msgstr "" +msgstr "Activare parolă uitată funcție pe paginile de autentificare" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" -msgstr "" +msgstr "Parola de două ori" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" -msgstr "" +msgstr "La înscriere, cere de două ori parola lor" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "Afișează numele complet al utilizatorilor în loc de nume de utilizator" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Afișează numele complet al utilizatorilor în loc de nume de utilizator" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" -msgstr "" +msgstr "Descrierea Companiei" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" -msgstr "" +msgstr "Descrierea companiei" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" -msgstr "" +msgstr "Descrierea piesei de la producător" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 -msgid "Supplier part description" +msgid "Select manufacturer part" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 +msgid "Supplier part description" +msgstr "Descrierea piesei furnizorului" + +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" -msgstr "" +msgstr "Id comandă" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" -msgstr "" +msgstr "Descrierea comenzii (opțional)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "Utilizatorul sau grupul responsabil pentru această comandă de producție" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" -msgstr "" +msgstr "Descrierea elementului de rând (opțional)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" -msgstr "" +msgstr "Introduceți codul lotului pentru articolele din stoc primite" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" -msgstr "" +msgstr "Este versiune" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" -msgstr "" +msgstr "Are Versiuni" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" -msgstr "" +msgstr "Descrierea piesei (opțional)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" -msgstr "" +msgstr "Versiunea" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" -msgstr "" +msgstr "Este aceasta parte o versiune a unei alte părți?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" -msgstr "" +msgstr "Versiune Din" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" -msgstr "" +msgstr "Responsabil pentru acest capitol" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" -msgstr "" +msgstr "Descriere test" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" -msgstr "" +msgstr "Introduceți descrierea pentru acest test" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" -msgstr "" +msgstr "Este necesar acest test pentru a trece?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" -msgstr "" +msgstr "Versiunea" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "Descrierea piesei" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6943,7 +7076,7 @@ msgstr "" #: plugin/base/ui/serializers.py:49 msgid "Feature Description" -msgstr "" +msgstr "Descrierea funcției" #: plugin/base/ui/serializers.py:54 msgid "Feature Icon" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7036,7 +7169,7 @@ msgstr "" #: plugin/builtin/events/auto_issue_orders.py:32 msgid "Automatically issue build orders on the assigned target date" -msgstr "" +msgstr "Eliberarea automată a comenzilor de producție la data țintă atribuită" #: plugin/builtin/events/auto_issue_orders.py:38 msgid "Auto Issue Purchase Orders" @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -7860,11 +7993,11 @@ msgstr "" #: report/models.py:223 msgid "Template description" -msgstr "" +msgstr "Descrierea șablonului" #: report/models.py:229 msgid "Revision number (auto-increments)" -msgstr "" +msgstr "Număr versiune (creșteri automate)" #: report/models.py:235 msgid "Attach to Model on Print" @@ -7969,7 +8102,7 @@ msgstr "" #: report/models.py:816 msgid "Snippet file description" -msgstr "" +msgstr "Descrierea detaliată a fișierului" #: report/models.py:834 msgid "Asset" @@ -7981,7 +8114,7 @@ msgstr "" #: report/models.py:842 msgid "Asset file description" -msgstr "" +msgstr "Descriere fișier Asset" #: report/serializers.py:95 msgid "Select report template" @@ -8043,7 +8176,7 @@ msgstr "" #: report/templates/report/inventree_build_order_report.html:152 msgid "Issued By" -msgstr "" +msgstr "Emis de" #: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8084,7 +8217,7 @@ msgstr "" #: report/templates/report/inventree_sales_order_shipment_report.html:47 #: templates/email/stale_stock_notification.html:20 msgid "Batch" -msgstr "" +msgstr "Lot" #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" @@ -8097,14 +8230,14 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" #: report/templates/report/inventree_stock_report_merge.html:111 #: report/templates/report/inventree_test_report.html:167 msgid "Serial" -msgstr "" +msgstr "Serie" #: report/templates/report/inventree_test_report.html:97 msgid "Test Results" @@ -8116,7 +8249,7 @@ msgstr "" #: report/templates/report/inventree_test_report.html:129 msgid "Pass" -msgstr "" +msgstr "Ok" #: report/templates/report/inventree_test_report.html:131 msgid "Fail" @@ -8130,501 +8263,525 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" -msgstr "" +msgstr "Proprietar" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" -msgstr "" +msgstr "Codul lotului pentru acest element din stoc" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" #: stock/serializers.py:85 msgid "Generated batch code" -msgstr "" +msgstr "Cod lot generat" #: stock/serializers.py:94 msgid "Select build order" @@ -8632,15 +8789,15 @@ msgstr "" #: stock/serializers.py:103 msgid "Select stock item to generate batch code for" -msgstr "" +msgstr "Selectați articolul din stoc pentru a genera codul de lot" #: stock/serializers.py:112 msgid "Select location to generate batch code for" -msgstr "" +msgstr "Selectaţi locaţia pentru a genera codul de lot pentru" #: stock/serializers.py:121 msgid "Select part to generate batch code for" -msgstr "" +msgstr "Selectați articolul pentru a genera codul de lot pentru" #: stock/serializers.py:130 msgid "Select purchase order" @@ -8648,7 +8805,7 @@ msgstr "" #: stock/serializers.py:137 msgid "Enter quantity for batch code" -msgstr "" +msgstr "Introduceți cantitatea pentru codul de lot" #: stock/serializers.py:163 msgid "Generated serial number" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Nume utilizator" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Prenumele" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Prenumele utilizatorului" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" -msgstr "" +msgstr "Parolă" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" -msgstr "" +msgstr "Parolă pentru utilizator" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" -msgstr "" +msgstr "Suprascrie avertismentul cu privire la regulile parolei" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" -msgstr "" +msgstr "Vă rugăm să utilizați funcția de resetare a parolei pentru a vă autentifica" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po index 5cbd8c8ad0..1dfad47fbb 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "Конечная точка API не обнаружена" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Список элементов или фильтров должен быть указан для массовых операций" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Элементы должны быть представлены в виде списка" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Предоставлен недопустимый список элементов" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Фильтры должны быть предоставлены в виде словаря" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Не верные фильтры" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Все фильтры будут использоваться с параметром True" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Нет элементов, соответствующих заданным критериям" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Данные не предоставлены" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Поле должно быть уникальным." -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "У пользователя недостаточно прав для просмотра этой модели!" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Email (еще раз)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Подтверждение адреса электронной почты" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Вы должны вводить один и тот же адрес электронной почты." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Указанный основной адрес электронной почты неверен." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Указанный домен электронной почты не утверждён." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Невозможно преобразовать {original} в {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "недопустимое количество" @@ -112,13 +104,13 @@ msgstr "Введите дату" msgid "Invalid decimal value" msgstr "Не верное десятичное значение" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Заметки" @@ -131,75 +123,75 @@ msgstr "Значение '{name}' отсутствует в формате ша msgid "Provided value does not match required pattern: " msgstr "Предоставленное значение не соответствует требуемому формату: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Одновременно можно сериализовать только 1000 элементов" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Пустая строка серийного номера" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Повторяющийся серийный номер" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Недопустимая группа: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Диапазон группы {group} превышает допустимое количество ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Серийных номеров не найдено" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Количество уникальных серийных номеров ({n}) должно быть равно ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Удалить HTML теги из этого значения" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Данные содержат недопустимую разметку" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Ошибка соединения" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Сервер ответил неверным кодом статуса" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Произошло исключение" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Сервер ответил неверным значением Контент-Длина" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Изображение слишком большое" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Загрузка изображения превышен максимальный размер" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Удаленный сервер вернул пустой ответ" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Предоставленный URL не является допустимым файлом изображения" @@ -207,11 +199,11 @@ msgstr "Предоставленный URL не является допусти msgid "Log in to the app" msgstr "Войти в приложение" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Электронная почта" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Вы должны включить двухфакторную аутентификацию, прежде чем делать что-нибудь еще." @@ -255,135 +247,126 @@ msgstr "Ссылка должна соответствовать шаблону msgid "Reference number is too large" msgstr "Номер ссылки слишком большой" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Неверный выбор" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Название" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Описание" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Описание (необязательно)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Путь" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Повторяющиеся имена не могут существовать под одним и тем же родителем" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Записи о скидке (необязательно)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Данные штрихкода" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Данные стороннего штрих-кода" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Хэш штрих-кода" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Уникальный хэш данных штрих-кода" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Обнаружен существующий штрих-код" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Задача не удалась" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Фоновый процесс '{f}' после {n} попыток завершился с ошибкой" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Ошибка сервера" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Сервер зарегистрировал ошибку." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Изображение" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Должно быть действительным номером" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Валюта" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Выберите валюту из доступных вариантов" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "Это поле не может быть пустым." -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Неверное значение" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Удаленное изображение" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "ССЫЛКА файла изображения на удаленном сервере" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Загрузка изображений с удаленного URL-адреса не включена" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Не удалось загрузить изображение из URL адреса" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" -msgstr "" +msgstr "Неверный формат типа содержимого" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" -msgstr "" +msgstr "Тип содержимого не найден" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "Тип содержимого не соответствует требуемому классу миксина" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -537,11 +520,11 @@ msgstr "Китайский (Упрощенный)" msgid "Chinese (Traditional)" msgstr "Китайский (Традиционный)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "Доступно обновление" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "Доступно обновление для InvenTree" @@ -553,30 +536,30 @@ msgstr "Неверная физическая единица" msgid "Not a valid currency code" msgstr "Неверный код валюты" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Статус заказа" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Родительский заказ на производство" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Включая варианты" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Включая варианты" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Включая варианты" msgid "Part" msgstr "Деталь" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Категория" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Родительская сборка" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Назначено мне" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Назначено" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Создано до" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Создано после" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Есть дата начала" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Дата начала до" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Дата начала после" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Есть целевая дата" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Целевая дата до" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Целевая дата после" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Завершено до" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Завершено после" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "Минимальная дата" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "Максимальная дата" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Исключить дерево" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Заказ на производство должен быть отменен перед удалением" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Расходник" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Необязательно" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Сборная деталь" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Отслеживается" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Тестируемая" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Невыполненные заказы" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Зарезервировано" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Потреблено" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Доступно" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "В заказе" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Заказ на производство" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Расположение" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Выход" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "Фильтрация по идентификатору исходящей складской позиции. Используйте 'null', чтобы найти несмонтированные элементы сборки." -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Заказы на производство" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Сборка BOM не подтверждена" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Порядок сборки не может быть создан для неактивной части" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Порядок сборки не может быть создан для разблокированной части" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "Заказ на сборку может быть помечен сторонним только для покупных деталей" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Должен быть указан ответственный пользователь или группа" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Деталь заказа на производства не может быть изменена" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Целевая дата должна быть после даты начала" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Ссылка на заказ на производство" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Ссылка на заказ на производство" msgid "Reference" msgstr "Номер" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Краткое описание заказа на производство (необязательно)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "Заказ на производство, которому принадлежит этот заказ на производство" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Выберите деталь для производства" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Ссылка на заказ" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "Заказ на продажу, которому принадлежит этот заказ на производство" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Место хранения комплектующих" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Выберите место хранения для этого заказа на производство (оставьте пустым, чтобы взять с любого места на складе)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "Сторонняя сборка" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "Этот заказ на сборку выполнен сторонней компанией" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Место хранения результата" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Выберите место хранения завершенных элементов" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Количество производимых деталей" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Количество складских позиций для производства" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Произведенные детали" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Количество складских позиций, которые были произведены" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Статус заказа на производство" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Код статуса заказа на производство" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Код партии" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Код партии для продукции" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Дата создания" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "Дата начала сборки" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "Запланированная начальная дата этого заказа на сборку" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Целевая дата завершения" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Целевая дата для заказа на производства. Заказ будет просрочен после этой даты." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Дата завершения" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "выполнено" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Создано" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Пользователь, создавший этот заказ на производство" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ответственный" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Пользователь, ответственный за этот заказ на производство" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Внешняя ссылка" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Ссылка на внешний URL" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Приоритет производства" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Приоритет этого заказа на производство" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Код проекта" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Код проекта для этого заказа на производство" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Невозможно завершить заказ на сборку при наличии открытых дочерних сборок" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Невозможно завершить заказ на сборку при незавершенных выходах" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Не удалось выгрузить задачу для распределения на сборку" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Заказ на производство {build} был завершен" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Заказ на производство был завершен" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Для отслеживаемых деталей должны быть указаны серийные номера" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Продукция не указана" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Продукция уже произведена" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Продукция не совпадает с заказом на производство" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Количество не может быть больше количества продукции" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "Выход сборки не прошёл все необходимые тесты" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Сборка {serial} не прошла все необходимые тесты" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "Выделенные на складе товары все еще находятся в производстве" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "Невозможно частично завершить выход сборки с распределёнными элементами" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Номер позиции для производства" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Объект производства" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Объект производства" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Количество" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Требуемое количество для заказа на производство" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Количество израсходованного запаса" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Элемент производства должен указать продукцию, как главную деталь помеченную как отслеживаемая" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "Выбранная складская позиция не соответствует позиции в BOM" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "Резервируемое количество должно быть больше нуля" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Количество должно быть 1 для сериализованных запасов" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Резервируемое количество ({q}) не должно превышать доступное количество на складе ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Складская позиция перераспределена" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Резервируемое количество должно быть больше нуля" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Количество должно быть 1 для сериализованных запасов" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "Выбранная складская позиция не соответствует позиции в BOM" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "Выделенное количество превышает доступный запас" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Складская позиция" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Исходная складская позиция" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Количество на складе для производства" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Установить в" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Целевая складская позиция" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Уровень сборки" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Наименование детали" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Название кода проекта" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Выход Продукции" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Продукция не совпадает с родительским заказом на производство" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Продукция не соответствует детали заказа на производство" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Эта продукция уже помечена как завершенная" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Сырье для этой продукции не полностью зарезервировано" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Введите количество продукции" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Для отслеживаемых деталей должно быть указано целочисленное количество" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Требуется целое количество, так как материал содержит отслеживаемые детали" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Серийные номера" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Введите серийные номера для продукции" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Местоположение склада для результата сборки" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Автоматически выделить серийные номера" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Следующие серийные номера уже существуют или недействительны" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Необходимо представить список выхода деталей" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Место хранения для списанной продукции" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Отменить резервирование" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Отменить все резервы запасов для списанной продукции" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Причина списания продукции" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Место хранения для завершенной продукции" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Разрешить неполное резервирование" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Завершить продукцию, даже если остатки не были полностью зарезервированы" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Израсходовать зарезервированные остатки" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Израсходовать складские позиции, которые были зарезервированы для этой продукции" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Удалить незавершенную продукцию" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Удалить всю незавершенную продукцию" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Запрещено" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Принять как поглощенный этим заказом на производство" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Отменить резерв, до завершения заказа на производство" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Перераспределенные запасы" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Как вы хотите обработать дополнительные складские позиции, назначенные для заказа на производство" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Некоторые складские позиции были перераспределены" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Разрешить не полное резервирование" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Подтвердите, что складские позиции не были полностью зарезервированы для этого заказа на производство" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Необходимые запасы не были полностью зарезервированы" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Разрешить незавершенные производимые детали" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Допустить, что требуемое кол-во продукции не завершено" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Требуемое количество деталей не было произведено" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Производственный заказ имеет незавершённые дочерние заказы" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Заказ на производство должен быть в стадии выполнения" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Заказ на производство имеет незавершенную продукцию" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Позиция для производства" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Выход продукции" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Продукция должна указывать на тот же производство" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Позиция для производства" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part должна указывать на ту же часть, что и заказ на производство" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "Элемент должен быть в наличии" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Превышено доступное количество ({q})" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Продукция должна быть указан для резервирования отслеживаемых частей" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Продукция не может быть указана для резервирования не отслеживаемых частей" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Необходимо указать резервируемые элементы" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Место хранения, где будут зарезервированы детали (оставьте пустым, чтобы забрать их из любого места)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Исключить место хранения" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Исключить складские позиции из этого выбранного места хранения" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Обменный остаток" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Складские позиции в нескольких местах могут использоваться на взаимозаменяемой основе" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Заменить остатки" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Разрешить резервирование замещающих деталей" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Необязательные элементы" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Зарезервировать необязательные позиции BOM для заказа на производство" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Не удалось запустить задачу автораспределения" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Ссылка на спецификацию (BOM)" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID детали в спецификации (BOM)" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Название детали в спецификации (BOM)" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "Установить в" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Сборка" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Деталь поставщика" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Зарезервированное количество" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Ссылка на сборку" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Название категории детали" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Отслеживание" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Унаследованные" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Есть варианты" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Позиция BOM" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "В производстве" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "Запланировано к сборке" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Внешний склад" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Доступный запас" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Доступный запас заменителей" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Доступный запас вариантов" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "Потреблённое количество превышает выделенное количество" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Дополнительные примечания по расходу запаса" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "Элемент сборки должен ссылаться на правильный заказ на сборку" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "Дублирование выделения элемента сборки" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "Строка сборки должна ссылаться на правильный заказ на сборку" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "Дублирование выделения строки сборки" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "Должен быть указан хотя бы один элемент или строка" @@ -1474,67 +1478,71 @@ msgstr "Отложен" msgid "Cancelled" msgstr "Отменён" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Завершён" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Необходимый запас для заказа на производство" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Заказ на сборку {build} требует дополнительный запас" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Просроченный заказ сборки" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Заказ на производство {bo} просрочен" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "Ссылка" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "Файл" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "У пользователя нет прав для удаления этих вложений" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "У пользователя нет прав на удаление этого вложения" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Неверный код валюты" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Код валюты дублируется" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Не указаны действительные коды валют" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Нет плагина" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Название кода проекта" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Обновлено" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Временная метка последнего обновления" @@ -1546,778 +1554,778 @@ msgstr "Обновлено" msgid "User who last updated this object" msgstr "Пользователь, последний раз обновивший этот объект" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Уникальный код проекта" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Описание проекта" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Пользователь или группа, ответственные за этот проект" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Ключ настроек" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Значения настроек" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Выбранное значение не является допустимым" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Значение должно быть булевым" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Значение должно быть целым числом" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "Значение должно быть допустимым числом" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "Значение не прошло проверку" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Строка ключа должна быть уникальной" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Пользователь" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Скидка распространяется на заданное количество" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Цена" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Цена за единицу для указанного количества" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Конечная точка" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Конечная точка, на которой принимается этот веб-хук" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Имя для этого веб-хука" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Активный" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Этот веб-хук активен?" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Токен" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Токен для доступа" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Секрет" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Общий ключ для HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "ID Сообщения" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Уникальный идентификатор этого сообщения" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Хост" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Хост, с которого было получено это сообщение" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Заголовок" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Заголовок этого сообщения" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Тело" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Текст этого сообщения" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Конечная точка, на которую было получено это сообщение" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Работал над" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Работа над этим сообщением завершена?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "Код" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Заголовок" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Ссылка" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Опубликовано" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Автор" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Итого" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Читать" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Эта новость была прочитана?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Файл изображения" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "Тип целевой модели для этого изображения" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "ID целевой модели для этого изображения" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Пользовательская единица измерения" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "Символ единицы должен быть уникальным" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Имя единицы должно быть действительным идентификатором" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Название единицы" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Символ" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Обозначение единицы измерения (необязательно)" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Определение" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Определение единицы измерения" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Вложения" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Файл не найден" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Отсутствует внешняя ссылка" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Тип модели" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "Тип целевой модели для изображения" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Выберите файл для вложения" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Комментарий" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Описание вложения" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Дата загрузки" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Дата загрузки файла" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Размер файла" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Размер файла в байтах" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Указан недопустимый тип модели для вложения" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "Пользовательское состояние" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "Пользовательские состояния" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "Группа статусов" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "Группа статусов, которая будет дополнена пользовательским состоянием" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Логическое состояние" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "Логическое состояние, соответствующее пользовательскому состоянию в бизнес-логике" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Значение" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "Числовое значение, которое будет сохранено в базе данных" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Название состояния" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Метка" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Метка, которая будет отображаться на фронтенде" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Цвет" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Цвет отображения в интерфейсе" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Модель" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "Модель, с которой связано это состояние" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "Необходимо выбрать модель" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "Необходимо выбрать ключ" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "Логическое состояние должно быть выбрано" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "Ключ должен отличаться от логического ключа" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "Должен быть указан корректный класс ссылочного статуса" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "Состояние должно отличаться от других логических состояний выбранного статуса" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "Логическое состояние должно быть из множества логических состояний выбранного статуса" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "Имя должно отличаться от имен эталонного статуса" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Список выбора" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Списки выбора" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Название списка выбора" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Описание списка выбора" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Заблокирована" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "Этот список выбора заблокирован?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "Можно ли использовать этот список выбора?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Исходный плагин" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Плагин, который предоставляет список выбора" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Исходная строка" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Необязательная строка, определяющая источник, используемый для этого списка" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Запись по умолчанию" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Вариант по умолчанию для этого списка выбора" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Создано" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Дата и время создания списка выбора" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Последнее обновление" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "Дата и время последнего обновления списка выбора" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Вариант списка выбора" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Варианты списка выбора" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Список выбора, к которому относится данный вариант" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Значение варианта списка выбора" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Метка для элемента списка выбора" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Описание варианта списка выбора" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "Активен ли варианта списка выбора?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Шаблон параметра" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" -msgstr "" +msgstr "Шаблоны параметров" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "У параметров-переключателей не может быть единицы измерения" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "У параметров-переключателей не может быть вариантов" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "Варианты должны быть уникальными" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "Имя шаблона параметров должно быть уникальным" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" -msgstr "" +msgstr "Тип целевой модели для этого шаблона параметра" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Название параметра" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Единица измерения" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Физическая единица этого параметра" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Описание параметра" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Переключатель" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Этот параметр является переключателем?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Варианты" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Возможные варианты этого параметра (разделить запятой)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "Список выбора для этого параметра" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Включено" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "Включен ли этот шаблон параметра?" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" -msgstr "" +msgstr "Параметр" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" -msgstr "" +msgstr "Параметры" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Недопустимое значение параметра" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "Указан неверный тип модели для параметра" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" -msgstr "" +msgstr "ID модели" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "ID целевой модели для этого параметра" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Шаблон" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" -msgstr "" +msgstr "Шаблон параметра" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Данные" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Значение параметра" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Заметка" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Опциональное поле записей" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Сканирование штрихкодов" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Данные штрихкода" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Пользователь, который сканировал штрих-код" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Метка времени" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Дата и время сканирования штрих-кода" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "URL-адрес, обработавший штрихкод" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Контекст" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Контекстные данные для сканирования штрих-кода" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Ответ" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Данные ответа от сканирования штрихкода" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Результат" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "Сканирование штрихкода было успешным?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "Произошла ошибка" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8: Удаление журнала электронной почты защищено. Установите INVENTREE_PROTECT_EMAIL_LOG в False, чтобы разрешить удаление." -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "Сообщение электронной почты" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "Сообщения электронной почты" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "Объявлено" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "Отправлено" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "Неудача" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "Доставлено" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "Подтверждено" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "Входящее" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "Исходящее" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "Без ответа" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "Отслеживать доставку" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "Отслеживать прочтение" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "Отслеживать клики" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "Глобальный идентификатор" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "Идентификатор этого сообщения (может быть предоставлен внешней системой)" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "ID цепочки" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Идентификатор темы этого сообщения (может быть предоставлен внешней системой)" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "Цепочка" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "Связанная цепочка для этого сообщения" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "Приоритет" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "Цепочка электронной почты" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "Цепочки электронной почты" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Ключ" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "Уникальный ключ для этой цепочки (используется для идентификации цепочки)" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "Уникальный идентификатор этой цепочки" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "Запущено внутренне" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "Эта цепочка была начата внутри?" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "Дата и время создания цепочки" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "Дата и время последнего обновления цепочки" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} отменен" msgid "A order that is assigned to you was canceled" msgstr "Заказ, назначенный вам, был отменён" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Полученные элементы" @@ -2351,93 +2359,101 @@ msgstr "Товары были получены по заказу на закуп msgid "Items have been received against a return order" msgstr "Товары были получены по заказу на возврат" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "Показывает, если изменение этой настройки требует подтверждения" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "Этот параметр требует подтверждения перед изменением. Пожалуйста, подтвердите изменения." + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "Указывает, переопределена ли настройка переменной окружения" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "Переопределить" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Запущен" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Ожидающие задачи" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Запланированные задания" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Невыполненные Задачи" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "Код задачи" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Уникальный ID задачи" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Заблокировать" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Время блокировки" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Название задачи" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Функция" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Имя функции" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Аргументы" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Аргументы задачи" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Именованные аргументы" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Именованные аргументы задачи" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Имя файла" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Тип модели" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Пользователь не имеет разрешения создавать или редактировать вложения для этой модели" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" -msgstr "" +msgstr "У пользователя нет разрешения на создание или редактирование параметров для этой модели" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Список выбора заблокирован" @@ -2445,1128 +2461,1157 @@ msgstr "Список выбора заблокирован" msgid "No group" msgstr "Нет группы" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "URL сайта заблокирован настройками" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Требуется перезапуск" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Настройки были изменены, что требует перезапуска сервера" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Ожидаемые миграции" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Количество ожидаемых миграций базы данных" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "Активные коды предупреждений" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "Словарь активных кодов предупреждений" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "Идентификатор экземпляра" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "Уникальный идентификатор для этого экземпляра InvenTree" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "ID объявления" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "Сообщить ID экземпляра сервера в информации о состоянии сервера (без аутентификации)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Название сервера" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Текстовое описание сервера" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Название инстанса" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Имя сервера в заголовке" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Ограничить отображение `О...`" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Показать `О...` только суперпользователям" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Название компании" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Внутреннее название компании" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "Базовая ссылка" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "Базовая ссылка для экземпляра сервера" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Валюта по умолчанию" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Выберите базовую валюту для расчета цены" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Поддерживаемые валюты" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Список поддерживаемых кодов валют" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Интервал обновления курса валют" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Как часто обновлять курс валют (установите \"ноль\", чтобы выключить)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "дней" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Плагин обновления валют" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Модуль обновления валюты" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Скачать по ссылке" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Разрешить загрузку удаленных изображений и файлов по внешнему URL" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Ограничение размера загрузки" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Максимально допустимый размер загрузки для удалённого изображения" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "User-Agent, используемый для загрузки из URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Позволяет переопределить user-Agent, используемый для загрузки изображений и файлов с внешнего URL (оставьте пустым по умолчанию)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Строгая проверка URL-адреса" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Требуется спецификация схемы при проверке URL-адресов" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Интервал проверки обновлений" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Как часто проверять наличие обновлений (установите ноль чтобы выключить)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Автоматическое резервное копирование" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Включить автоматическое резервное копирование базы данных и медиа-файлов" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Интервал резервного копирования" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Укажите количество дней между событиями автоматического резервного копирования" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Интервал удаления задачи" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Результаты фоновых задач будут удалены после указанного количества дней" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Интервал удаления журнала ошибок" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Журналы ошибок будут удалены после указанного количества дней" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Интервал удаления уведомления" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Уведомления пользователя будут удалены после указанного количества дней" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "Интервал удаления электронной почты" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "Сообщения электронной почты будут удалены через указанное количество дней" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "Защитить журнал электронной почты" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "Предотвращать удаление записей журнала электронной почты" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Поддержка штрих-кодов" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Включить поддержку сканера штрих-кодов в веб-интерфейсе" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "Сохранять результаты сканирования штрихкодов" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "Сохранять результаты сканирования штрихкодов в базе данных" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "Максимальное количество сохранённых сканирований штрихкодов" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "Максимальное число результатов сканирования штрихкодов для хранения" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Задержка сканирования штрих-кода" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Время задержки обработки штрих-кода" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Поддержка веб-камер штрих-кодов" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Разрешить сканирование штрих-кода через веб-камеру в браузере" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "Показать данные штрих-кода" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Отображать данные штрих-кода в браузере в виде текста" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Плагин генерации штрих-кода" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Плагин для использования внутренней генерации данных штрих-кодов" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Ревизия детали" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Включить поле ревизии для элемента" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "Только ревизия сборки" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "Разрешить ревизии только для сборочных деталей" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Разрешить удаление из заказа" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Разрешить удаление частей, которые используются в заказе" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "Регулярное выражение IPN" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Шаблон регулярного выражения для сопоставления IPN детали" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Разрешить повторяющиеся IPN" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Разрешить нескольким элементам использовать один и тот же IPN" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Разрешить редактирование IPN" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Разрешить изменение значения IPN при редактировании детали" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Скопировать данные BOM детали" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Копировать данные BOM по умолчанию при дублировании детали" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Скопировать данные параметров детали" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Копировать данных параметров по умолчанию при дублировании детали" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Скопировать данные тестирования детали" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Копировать данные тестирования по умолчанию при дублировании детали" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Скопировать параметры по шаблону категории" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Копировать параметры по шаблону категории при создании детали" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "По умолчанию детали являются шаблонами" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "По умолчанию детали могут быть собраны из других компонентов" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Компонент" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "По умолчанию детали могут использоваться в качестве суб-компонентов" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Можно купить" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Можно продавать" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Детали продаются по умолчанию" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Виртуальная" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Детали являются виртуальными по умолчанию" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Показывать связанные детали" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Отображать связанные детали для элемента" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Начальные данные о запасах" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Разрешить создание начального запаса при добавлении новой детали" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Исходные данные о поставщике" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Разрешить создание исходных данных о поставщике при добавлении новой детали" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Формат отображения детали" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Формат для отображения имени детали" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Значок раздела по умолчанию" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Значок категории по умолчанию (пустой означает отсутствие значка)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Минимальные Цены Десятичные Значки" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Макс. Цены десятичные знаки" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Использовать цены поставщика" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Изменить историю покупки" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Ценообразование по историческим заказам на поставку отменяет различия в ценах поставщиков" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Использовать цены из складских позиций" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Использовать расценки из ручного ввода данных о запасах для расчета цен" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Возраст цен складских позиций" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Исключить складские позиции старше указанного количества дней с расчёта цен" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Использовать варианты цен" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Только Активные Варианты" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Использовать только активные запчасти для расчета стоимости варианта" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "Автоматическое обновление цен" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "Автоматически обновлять цены деталей при изменении внутренних данных" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Интервал пересчета цен" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Количество дней до автоматического обновления цены" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Внутренние цены" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Разрешить внутренние цены для частей" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Переопределение внутренней цены" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "При наличии внутренних цен переопределить ценовой диапазон" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Включить печать этикеток" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Включить печать этикеток из веб-интерфейса" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "Изображение меток DPI" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Разрешение DPI при создании файлов изображений для печати этикеток плагинов" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Включить отчеты" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Включить генерацию отчетов" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Режим отладки" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Генерировать отчеты в режиме отладки (вывод HTML)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Журнал ошибок отчета" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Журнал ошибок, которые возникают при создании отчетов" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Размер страницы" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Размер страницы по умолчанию для PDF отчетов" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Принудительное применение единиц измерения параметров" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Если введены единицы, значения параметра должны соответствовать указанным единицам измерения" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Глобально уникальные серийные номера" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Серийные номера для складских позиций должны быть уникальными глобально" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Удалить исчерпанный запас" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Определяет поведение по умолчанию, когда складская позиция заканчивается" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Код партии Шаблона" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Шаблон для создания кодов партии по умолчанию для складских позиций" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Срок годности Запасов" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Включить функцию истечения срока годности" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Использовать просроченные остатки в производстве" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Разрешить продажу просроченных запасов" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Время Залежалости Запасов" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Количество дней перед тем как складская единица будет считаться просроченной" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Использовать просроченные остатки в производстве" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Разрешить использовать просроченные остатки в производстве" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Контроль за собственными запасами" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Разрешить владельцу контролировать расположение складов и номенклатуры" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Значок местоположения по умолчанию" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Значок местоположения склада по умолчанию (пустой означает отсутствие значка)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Показать установленные складские позиции" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Отображать установленные складские позиции в складских таблицах" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Проверять спецификацию при установке изделий" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Установленные единица хранения должны присутствовать в спецификации для родительской детали" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Разрешить передачу товара, отсутствующего на складе" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Разрешить перемещение товаров, которых нет на складе, между складами" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Паттерн ссылки заказа на производство" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Поле требуемого паттерна для создания ссылки заказа на производство" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Требуется ответственный владелец" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Ответственный владелец должен быть назначен для каждого заказа" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "Требовать активную деталь" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "Запрещать создание заказов на сборку для неактивных деталей" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Требовать заблокированную деталь" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "Запрещать создание заказов на сборку для разблокированных деталей" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "Требовать валидную спецификацию" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "Запрещать создание заказов на сборку, пока спецификация не будет подтверждена" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "Требовать закрытия дочерних заказов" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "Запрещать завершение заказа на сборку, пока не закрыты все дочерние заказы" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "Сторонний заказ на сборку" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "Включить функциональность сторонних заказов на сборку" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Блокировать до прохождения тестов" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Запретить вывод сборки до тех пор, пока не пройдут все необходимые тесты" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Включить заказы на возврат" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Включите функцию заказа на возврат в пользовательском интерфейсе" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Шаблон заказа на возврат товара" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Необходимый шаблон для создания поля «Возврат заказа»" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Редактировать завершенные возвратные заказы" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Разрешить редактирование возвращенных заказов после их завершения" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Шаблон заказа на возврат товара" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Необходимый шаблон для создания поля «Возврат заказа»" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Отгрузка по умолчанию для заказа на продажу" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Включить создание отгрузки по умолчанию для заказов на продажу" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Редактирование завершённых заказов на продажу" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Разрешить редактирование заказов на продажу после их отправки или завершения" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "Отгрузка требует проверки" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "Запрещать завершение отгрузок, пока товары не проверены" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Отмечать отправленные заказы как завершённые" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Заказы на продажу, помеченные как отгруженные, будут автоматически завершены, минуя статус 'отгружено'" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Шаблон ссылки заказа на закупку" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Требуемый шаблон для генерации поля ссылки заказа на закупку" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Редактировать завершённые заказы на закупку" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Разрешить редактирование заказов после их отправки или завершения" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "Конвертировать валюту" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "Преобразовывать стоимость товара в базовую валюту при поступлении на склад" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Автоматически выполнять заказы на закупку" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Автоматически отмечать заказы на закупку как завершённые при получении всех позиций" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Включить функцию восстановления пароля" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Включить функцию восстановления пароля на странице входа" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Разрешить регистрацию" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Включить самостоятельную регистрацию пользователей на странице входа" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Включить SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Включить SSO на странице входа" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Включить регистрацию через SSO" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Включить самостоятельную регистрацию пользователей через SSO на странице входа" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "Включить синхронизацию групп через SSO" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Включить синхронизацию групп InvenTree с группами, предоставляемыми IdP" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "Ключ группы SSO" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Имя атрибута группы, предоставленного провайдером идентификации" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "Отображение групп SSO" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Отображение от групп SSO к локальным группам InvenTree. Если локальная группа не существует, она будет создана." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "Удалять группы вне SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Удалять ли группы, назначенные пользователю, если они не поддерживаются провайдером идентификации. Отключение этой настройки может привести к проблемам безопасности" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Необходимо указать EMail" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Требовать электронную почту при регистрации" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Автозаполнение пользователей SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Автоматически заполнять данные пользователя из аккаунта SSO" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Написать дважды" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "При регистрации дважды спрашивать адрес электронной почты" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Пароль дважды" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "При регистрации запросить пароль у пользователей дважды" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Разрешенные домены" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Ограничить регистрацию определёнными доменами (через запятую, начиная с @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Группа при новой регистрации" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Группа, на которую назначаются новые пользователи при регистрации. Если включена синхронизация группы SSO, эта группа задается только в том случае, если ни одна группа не может быть назначена через IdP." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Принудительное MFA" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Пользователи должны использовать многофакторную безопасность." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "Включение этой настройки потребует от всех пользователей настройки многофакторной аутентификации. Все сессии будут отключены немедленно." + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Проверять плагины при запуске" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Проверять, что все плагины установлены при запуске — включать в контейнерных средах" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Проверка обновлений плагинов" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Включить периодическую проверку обновлений установленных плагинов" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Включить интеграцию URL" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Разрешить плагинам добавлять маршруты URL" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Включить интеграцию навигации" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Разрешить плагинам интегрироваться в навигацию" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Включить интеграцию приложений" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Разрешить плагинам добавлять приложения" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Включить интеграцию расписаний" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Разрешить плагинам запускать запланированные задачи" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Включить интеграцию событий" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Разрешить плагинам реагировать на внутренние события" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Включить интеграцию интерфейса" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Разрешить плагинам интегрироваться в пользовательский интерфейс" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "Включить интеграцию почты" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Разрешить плагинам обрабатывать исходящую и входящую почту" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "Включить коды проекта" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "Включить коды проекта для отслеживания проектов" -#: common/setting/system.py:1083 -msgid "Enable Stock History" -msgstr "Включить историю запасов" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" +msgstr "Включить инвентаризацию" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "Включить функцию записи истории уровней и стоимости запасов" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Исключить сторонний склад" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" -msgstr "Исключать складские позиции во внешних локациях из расчёта истории запасов" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "Исключить из инвентаризации единицы хранения на внешних складах" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Автоматический период инвентаризации" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" -msgstr "Количество дней между автоматическими записями истории запасов" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" +msgstr "Кол-во дней между автоматических записей инвентаризации" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" +msgstr "Удалять устаревшие записи инвентаризаций" + +#: common/setting/system.py:1135 +msgid "Delete stocktake entries older than the specified number of days" +msgstr "Удалять записи инвентаризаций старше N дней" + +#: common/setting/system.py:1141 +msgid "Stocktake Deletion Interval" +msgstr "Частота удаления записей инвентаризаций" + +#: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "Записи инвентаризации будут удалены после N дней" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" msgstr "Удалять старые записи истории запасов" -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" msgstr "Удалять записи истории запасов старше указанного количества дней" -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" msgstr "Интервал удаления истории запасов" -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" msgstr "Записи истории запасов будут удалены через указанное количество дней" -#: common/setting/system.py:1123 +#: common/setting/system.py:1167 msgid "Display Users full names" msgstr "Показывать полные имена пользователей" -#: common/setting/system.py:1124 +#: common/setting/system.py:1168 msgid "Display Users full names instead of usernames" msgstr "Отображать полные имена пользователей вместо логинов" -#: common/setting/system.py:1129 +#: common/setting/system.py:1173 msgid "Display User Profiles" msgstr "Отображать профили пользователей" -#: common/setting/system.py:1130 +#: common/setting/system.py:1174 msgid "Display Users Profiles on their profile page" msgstr "Отображать профили пользователей на их странице профиля" -#: common/setting/system.py:1135 +#: common/setting/system.py:1179 msgid "Enable Test Station Data" msgstr "Добавлять данные об испытательном оборудовании" -#: common/setting/system.py:1136 +#: common/setting/system.py:1180 msgid "Enable test station data collection for test results" msgstr "Добавлять данные об испытательном оборудовании в результаты тестирования" -#: common/setting/system.py:1141 +#: common/setting/system.py:1185 msgid "Enable Machine Ping" msgstr "Включить пинг машин" -#: common/setting/system.py:1143 +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Включить периодическую задачу пинга зарегистрированных машин для проверки их статуса" @@ -3596,11 +3641,11 @@ msgstr "Отображение PDF-этикетки в браузере вмес #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "Сканирование штрих-кодов в формах" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "Разрешить ввод со сканера штрихкодов в поля формы" #: common/setting/user.py:51 msgid "Search Parts" @@ -3868,7 +3913,7 @@ msgstr "Сохранять последние использованные пе #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "Все модели" #: common/validators.py:63 msgid "No attachment model type provided" @@ -3911,366 +3956,370 @@ msgstr "Деталь активна" msgid "Manufacturer is Active" msgstr "Производитель активен" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "Поставляемая деталь активна" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "Внутренняя деталь активна" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "Поставщик активен" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Производитель" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Компания" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "Есть запас" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Компании" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Описание компании" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Описание компании" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Сайт" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "Сайт компании" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Телефон" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Контактный телефон" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Электронная почта контакта" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Контакт" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Контактное лицо" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Ссылка на описание компании" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "Эта компания активна?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "Покупатель" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Является ли компания покупателем?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "Поставщик" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Является ли компания поставщиком деталей?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Производитель" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Является ли компания производителем деталей?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Для этой компании используется валюта по умолчанию" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "Налоговый идентификатор" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "Налоговый идентификатор компании" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Адрес" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Адреса" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Выберите компанию" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Заголовок адреса" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Заголовок, описывающий запись адреса" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Основной адрес" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Указать основным адресом" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Строка 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Адресная строка 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Строка 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Адресная строка 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Почтовый индекс" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Город/Регион" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Почтовый индекс, город/регион" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Регион/Область" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Штат или провинция" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Страна" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Страна адреса" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Записи отправления" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Записи для курьера" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Внутренние записи отправления" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Записи отправления для внутреннего пользования" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Ссылка на адресную информацию (внешняя)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Производитель детали" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Базовая деталь" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Выберите деталь" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Выберите производителя" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "Артикул производителя" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Артикул производителя" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "Ссылка на сайт производителя" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Описание детали производителя" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Единицы измерения упаковки должны быть совместимы с единицами базовой детали" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Единицы упаковки должны быть больше нуля" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Связанная деталь производителя должна ссылаться на ту же базовую деталь" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Поставщик" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Выберите поставщика" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Артикул поставщика" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Является ли эта поставляемая деталь активной?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Выберите производителя части" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "Ссылка на сайт поставщика" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Описание детали поставщика" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "базовая стоимость" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Минимальная плата (например, складская)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Упаковка" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Упаковка детали" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Количество в упаковке" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Общее количество, поставляемое в одной упаковке. Оставьте пустым для отдельных элементов." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "множественные" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Кратность заказа" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Количество, доступное у поставщика" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Доступность обновлена" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Дата последнего обновления данных о доступности" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Ценовой порог поставщика" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "Возвращает строковое представление основного адреса. Это свойство существует для обратной совместимости." - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Валюта по умолчанию для этого поставщика" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Название компании" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "На складе" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "Ценовые пороги" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "Произошла ошибка при экспорте данных" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "Плагин экспорта данных вернул неправильный формат данных" @@ -4318,119 +4367,119 @@ msgstr "Оформлен" msgid "Invalid status code" msgstr "Недопустимый код статуса" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Файл данных" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "Файл с данными импорта" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Столбцы" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "Целевой тип модели для этой сессии импорта" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "Статус импорта" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Значения по умолчанию" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "Переопределения полей" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Фильтры полей" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "Обновлять существующие записи" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "Если включено, существующие записи будут обновлены новыми данными" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "Некоторые обязательные поля не были сопоставлены" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "ID" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "Существующий идентификатор записи в базе данных" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "Колонка уже сопоставлена с полем базы данных" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "Поле уже сопоставлено с колонкой данных" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "Сопоставление столбцов должно быть связано с корректным сеансом импорта" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "Колонка не существует в файле данных" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "Поле не существует в целевой модели" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "Выбранное поле доступно только для чтения" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Сессия импорта" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Поле" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Колонка" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Номер строки" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "Исходные данные строки" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Ошибки" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Корректный" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "Для обновления существующих записей требуется ID." -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "Запись с указанным ID не найдена" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "Указан недействительный формат ID" @@ -4530,7 +4579,7 @@ msgstr "Количество копий для печати каждой эти msgid "Connected" msgstr "Подключен" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Неизвестно" @@ -4658,105 +4707,117 @@ msgstr "Максимальный прогресс" msgid "Maximum value for progress type, required if type=progress" msgstr "Максимальное значение для типа прогресса, требуется, если тип=progress" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Ссылка на заказ" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "Невыполненный" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "Есть код проекта" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Создал" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "Создано до" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Создано после" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "Есть дата начала" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "Дата начала до" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "Дата начала после" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "Есть целевая дата" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "Целевая дата до" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "Целевая дата после" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Имеет цену" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "Завершено до" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "Завершено после" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "Сторонний заказ на сборку" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Заказ" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "Заказ выполнен" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Внутренняя деталь" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Заказ в ожидании" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Завершённые" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "Есть отгрузка" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Заказ на закупку" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Заказ на закупку" msgid "Sales Order" msgstr "Заказ на продажу" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Общая стоимость" msgid "Total price for this order" msgstr "Общая стоимость этого заказа" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Валюта заказа" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Валюта заказа (оставьте пустым для использования валюты по умолчанию для компании)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "Этот заказ заблокирован и не может быть изменён" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Контакт не соответствует выбранной компании" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "Дата начала должна быть до целевой даты" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "Адрес не соответствует выбранной компании" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Описание заказа (дополнительно)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Выберите код проекта для этого заказа" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Ссылка на внешнюю страницу" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "Начальная дата" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "Запланированная начальная дата этого заказа" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Целевая дата" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Ожидаемая дата доставки заказа. После этой даты заказ будет считаться просроченным." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Дата создания" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Дата выдачи заказа" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Пользователь или группа, ответственная за этот заказ" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Контактное лицо по данному заказу" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Адрес компании по этому заказу" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Ссылка на заказ" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Статус" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Статус заказа на закупку" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Компания, в которой детали заказываются" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Номер у поставщика" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Номер заказа у поставщика" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "получил" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Дата завершения заказа" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Место хранения" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "Место хранения для полученных позиций" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Поставщик детали должен совпадать с поставщиком заказа на закупку" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Позиция не соответствует заказу на закупку" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "В позиции отсутствует связанная деталь" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Количество должно быть положительным числом" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Покупатель" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Компания, которой детали продаются" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "Статус заказа на продажу" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Ссылка клиента" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Код ссылки на заказ клиента" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Дата отгрузки" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "Отправлено" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "Заказ уже выполнен" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "Заказ уже отменен" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Только открытый заказ может быть отмечен как завершённый" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Заказ не может быть завершён, так как есть незавершённые отгрузки" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Заказ не может быть завершён, так как есть незавершённые распределения" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "Заказ не может быть завершён, так как есть незавершённые позиции" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "Заказ заблокирован и не может быть изменён" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Количество" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Номер позиции" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Записи о позиции" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Целевая дата этой позиции (оставьте пустой, чтобы использовать целевую дату заказа)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Описание позиции (необязательно)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Дополнительный контекст для этой строки" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Цена за единицу" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "Позиция заказа на закупку" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "Поставляемая деталь должна соответствовать поставщику" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "Заказ на сборку должен быть отмечен как внешний" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "Заказы на сборку могут быть связаны только со сборочными деталями" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "Деталь заказа на сборку должна соответствовать детали позиции" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Деталь поставщика" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Получено" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Количество полученных предметов" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Закупочная цена" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Закупочная цена" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "Внешний заказ на сборку, который будет выполнен этой позицией" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "Дополнительная позиция заказа на закупку" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "Позиция заказа на продажу" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "Только продаваемые детали могут быть назначены заказу на продажу" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Цена продажи" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Цена последней продажи" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Доставлен" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Отгруженное кол-во" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "Отгрузка заказа на продажу" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "Адрес отгрузки должен соответствовать клиенту" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "Адрес доставки для этой отгрузки" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Дата отправления" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Дата доставки" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Дата доставки отгрузки" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Проверн" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Пользователь, проверивший эту отгрузку" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Отправление" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Номер отправления" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Номер отслеживания" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Информация об отслеживании доставки" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Номер счета" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Номер ссылки на связанную накладную" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "Отгрузка уже отправлена" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "Отправка не имеет зарезервированных складских позиций" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "Отгрузка должна быть проверена, прежде чем её можно завершить" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "Дополнительная позиция заказа на продажу" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "Распределение заказа на продажу" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "Складская позиция не была назначена" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "Невозможно зарезервировать складскую позицию в позицию другой детали" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "Невозможно распределить запас к позиции без детали" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Количество распределения не может превышать количество на складе" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Резервируемое количество должно быть больше нуля" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "Количество должно быть 1 для сериализированных складских позиций" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "Заказ на продажу не соответствует отгрузке" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Отгрузка не соответствует заказу на продажу" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Строка" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Ссылка на отгрузку заказа на продажу" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Элемент" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Выберите складскую позицию для резервирования" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Укажите резервируемое количество" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Ссылка на заказ на возврат" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Компания, из которой возвращаются товары" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Статус заказа на возврат" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "Позиция заказа на возврат" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "Необходимо указать складской элемент" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "Количество возврата превышает количество на складе" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "Количество возврата должно быть больше нуля" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "Недопустимое количество для серийного складского элемента" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Выберите позицию, возвращаемую от клиента" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Дата получения" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "Дата получения этого возвращаемого предмета" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "Дата возврата" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Результат" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Результат для этой позиции" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Стоимость, связанная с возвратом или ремонтом этой позиции" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "Дополнительная позиция заказа на возврат" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID заказа" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID заказа для дублирования" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Копировать позиции" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Копировать позиции из исходного заказа" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Копировать дополнительные позиции" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Копировать дополнительные позиции из исходного заказа" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Скопировать параметры" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Позиции" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Завершённые позиции" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Дублировать заказ" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Указать параметры для дублирования этого заказа" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Недействительный ID заказа" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Имя поставщика" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "Заказ не может быть отменён" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Разрешить закрывать заказ с незавершёнными позициями" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "В заказе есть незавершённые позиции" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "Заказ не открыт" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "Автоматическая цена" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Автоматически рассчитывать закупочную цену на основе данных детали поставщика" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Валюта заказа на закупку" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Объединять элементы" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Объединять в одну позицию элементы, у которых одинаковая деталь, место хранения и целевая дата" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "Артикул" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Внутренний артикул детали" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "Внутреннее название детали" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "Необходимо указать поставляемую деталь" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "Необходимо указать заказ на закупку" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "Поставщик должен соответствовать заказу на закупку" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "Заказ на закупку должен соответствовать поставщику" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Позиция" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Выберите место назначения для полученных элементов" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Введите код партии для поступающих складских позиций" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Истекает" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "Введите дату истечения срока годности для поступающих складских единиц" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Введите серийные номера для входящих складских позиций" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "Переопределить информацию об упаковке для поступающих складских единиц" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "Дополнительная заметка для поступающих складских единиц" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Штрих-код" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Сканированный штрих-код" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Штрихкод уже используется" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Необходимо предоставить позиции" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "Необходимо указать место назначения" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Предоставленные значения штрихкодов должны быть уникальными" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "Отгрузки" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Выполненные отгрузки" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "Зарезервированные позиции" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Валюта цены продажи" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "Выделенные элементы" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Информация об отгрузке не предоставлена" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "Позиция не связана с этим заказом" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "Количество должно быть положительным" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Введите серийные номера для резервирования" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "Отгрузка уже отправлена" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "Отгрузка не связана с этим заказом" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "Совпадений для следующих серийных номеров не найдено" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "Следующие серийные номера недоступны" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Позиция заказа на возврат" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "Позиция не соответствует заказу на возврат" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "Позиция уже получена" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "Предметы могут быть получены только по заказам, которые находятся в процессе выполнения" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "Количество для возврата" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Валюта цены позиции" @@ -5532,1174 +5613,1226 @@ msgstr "Возврат" msgid "Reject" msgstr "Отклонён" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Просроченные заказы на закупку" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Заказ на закупку {po} просрочен" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Просроченные заказы на продажу" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Заказ на продажу {so} просрочен" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "Просроченный заказ на возврат" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "Заказ на возврат {ro} просрочен" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Помечено звёздочкой" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Фильтровать по отмеченным категориям" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Глубина" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Фильтровать по глубине категории" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Верхний уровень" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Фильтровать по категориям верхнего уровня" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Каскад" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Включать подкатегории в отфильтрованные результаты" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Родитель" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Фильтровать по родительской категории" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Исключить подкатегории указанной категории" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Есть результаты" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Является вариантом" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Является ревизией" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Есть ревизии" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "Спецификация валидна" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "Каскадные категории" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "Если включено, включать элементы в дочерних категориях указанной категории" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Фильтровать по числовому идентификатору категории или литералу 'null'" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "Сборочная деталь активна" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "Отслеживаемая сборочная деталь" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Сборная деталь тестируется" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "Деталь компонента активна" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "Отслеживаемая деталь компонента" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "Компонент тестируется" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "Сборочная деталь компонента" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "Виртуальная деталь компонента" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "На складе" + +#: part/api.py:1370 msgid "Uses" msgstr "Использования" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Категория детали" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Категория детали" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Место хранения по умолчанию" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Место хранения по умолчанию для деталей этой категории" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Структура" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Детали не могут быть непосредственно отнесены к структурной категории, но могут быть отнесены к дочерним категориям." -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Ключевые слова по умолчанию" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Ключевые слова по умолчанию для деталей этой категории" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Значок" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Значок (необязательно)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "Вы не можете сделать эту категорию деталей структурной, потому что некоторые детали уже назначены ей!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "Шаблон параметров категории деталей" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Значение по умолчанию" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Значение параметра по умолчанию" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Детали" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" -msgstr "" +msgstr "Нельзя удалить параметры заблокированной детали" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" -msgstr "" +msgstr "Нельзя изменить параметры заблокированной детали" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "Нельзя удалить эту деталь, так как она заблокирована" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "Нельзя удалить эту деталь, так как она ещё активна" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "Нельзя удалить эту деталь, так как она используется в сборке" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Деталь '{self}' не может быть использована в спецификации для '{parent}' (рекурсивно)" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Деталь '{parent}' используется в спецификации для '{self}' (рекурсивно)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN должен соответствовать регулярному выражению {pattern}" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "Деталь не может быть ревизией самой себя" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "Нельзя создать ревизию детали, которая уже является ревизией" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "Необходимо указать код ревизии" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "Ревизии разрешены только для сборочных деталей" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "Нельзя сделать ревизию шаблонной детали" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "Родительская деталь должна указывать на тот же шаблон" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Складская позиция с этим серийным номером уже существует" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Дублирующий IPN не разрешён в настройках детали" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Дублирующая ревизия детали уже существует." -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Деталь с таким именем, внутренним артикулом и ревизией уже существует." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Детали не могут быть назначены структурным категориям!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Наименование детали" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Шаблон" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Эта деталь является шаблоном?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Эта деталь является разновидностью другой детали?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Разновидность" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Описание детали (необязательно)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Ключевые слова" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Ключевые слова для улучшения видимости в результатах поиска" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Категория" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Внутренний артикул" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Ревизия или серийный номер детали" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Ревизия" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Является ли эта деталь ревизией другой детали?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "Ревизия от" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Где обычно хранится эта деталь?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Поставщик по умолчанию" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Поставляемая деталь по умолчанию" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Срок действия по умолчанию" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Срок годности (в днях) для складских позиций этой детали" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Минимальный запас" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Минимально допустимый складской запас" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Единицы измерения этой детали" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Может ли эта деталь быть создана из других деталей?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "Может ли эта деталь использоваться для создания других деталей?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "Является ли каждый экземпляр этой детали уникальным, обладающим серийным номером?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "Можно ли в этой детали записывать результаты тестов?" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "Может ли эта деталь быть закуплена у внешних поставщиков?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "Может ли эта деталь быть продана покупателям?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Эта деталь активна?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "Заблокированные детали нельзя редактировать" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "Эта деталь виртуальная, как программный продукт или лицензия?" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "Спецификация подтверждена" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "Валидна ли спецификация для этой детали?" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Контрольная сумма BOM" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Сохранённая контрольная сумма спецификации" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "BOM проверил" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "Дата проверки BOM" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Создатель" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Ответственный владелец этой детали" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Продать несколько" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Валюта, используемая для кэширования расчётов цен" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Минимальная Стоимость BOM" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Минимальная стоимость компонентных деталей" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Максимальная Стоимость BOM" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Максимальная стоимость компонентных деталей" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Минимальная стоимость закупки" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Минимальная историческая стоимость закупки" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Максимальная стоимость закупки" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Максимальная историческая стоимость закупки" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Минимальная внутренняя цена" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Минимальная стоимость на основе внутренних ценовых уровней" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Максимальная внутренняя цена" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Максимальная стоимость на основе внутренних ценовых уровней" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Минимальная цена поставщика" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Минимальная цена детали от внешних поставщиков" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Максимальная цена поставщика" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Максимальная цена детали от внешних поставщиков" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Минимальная стоимость варианта" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Расчётная минимальная стоимость вариантов деталей" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Максимальная стоимость варианта" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Расчётная максимальная стоимость вариантов деталей" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Минимальная Стоимость" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Переопределить минимальную стоимость" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Максимальная Стоимость" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Переопределить максимальную стоимость" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Расчётная общая минимальная стоимость" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Расчётная общая максимальная стоимость" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Минимальная цена продажи" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Минимальная цена продажи на основе ценовых уровней" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Максимальная цена продажи" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Максимальная цена продажи на основе ценовых уровней" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Минимальная стоимость продажи" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Минимальная историческая цена продажи" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Максимальная стоимость продажи" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Максимальная историческая цена продажи" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Деталь для инвентаризации" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Количество элементов" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "Количество отдельных складских позиций на момент инвентаризации" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "Общий доступный запас на момент инвентаризации" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Дата" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Дата проведения инвентаризации" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Минимальная стоимость запасов" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Оценочная минимальная стоимость имеющихся запасов" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Максимальная стоимость запасов" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "Оценочная максимальная стоимость имеющихся запасов" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "Цена продажи детали по порогу" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "Шаблон теста детали" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Недопустимое имя шаблона — должно содержать хотя бы один буквенно-цифровой символ" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Шаблоны тестов можно создавать только для тестируемых деталей" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "Шаблон теста с тем же ключом уже существует для детали" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Название теста" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Введите имя для теста" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "Ключ теста" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "Упрощённый ключ для теста" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Описание теста" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Введите описание для этого теста" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "Активен ли данный тест?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Необходим" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Необходимо ли пройти этот тест?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Требуется значение" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "Требуется ли значение для этого теста при добавлении результата?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Требуются вложения" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "Требуется ли прикреплять вложение в виде файла при добавлении результатов теста?" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "Допустимые варианты данного теста(через запятую)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "Пункт спецификации нельзя изменить — сборка заблокирована" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Пункт спецификации нельзя изменить — вариант сборки заблокирован" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Выберите родительскую деталь" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Суб-деталь" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Выбрать деталь для использования в BOM" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "Количество элементов в спецификации" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Эта позиция спецификации необязательна" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Эта позиция - расходник (она не отслеживается в заказах на производство)" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "Количество для подготовки" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Дополнительное требуемое количество для сборки, учитывающее потери при подготовке" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "Потери" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Оценочные потери для сборки, выраженные в процентах (0–100)" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "Округление до кратности" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Округлять требуемое производственное количество до ближайшего кратного этого значения" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Ссылка на позицию спецификации" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Заметка о позиции в спецификации" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Контрольная сумма" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "Контрольная сумма строки спецификации" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Проверен" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Этот пункт спецификации подтверждён" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Наследуется" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Позиция спецификации наследуется разновидностями детали" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Эту позицию можно заменять деталями, которые находятся на складе" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Для отслеживаемых деталей количество должно быть целым числом" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Необходимо указать поддеталь" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "Замена пункта спецификации" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "Деталь для замены не может быть такой же, как основная деталь" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Позиция BOM-родителя" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Замена детали" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Деталь 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Деталь 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Выберите связанную деталь" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "Заметка для данной связи" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "Нельзя создать отношение детали с самой собой" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "Дублирующее отношение уже существует" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Родительская категория" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Родительская категория деталей" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Подкатегории" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "Результаты" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Количество результатов, зарегистрированных по этому шаблону" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Валюта закупки складской позиции" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "Файл не является изображением" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Оригинальная деталь" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Выберите исходную деталь для копирования" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Копировать Изображение" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Копировать изображение из исходной детали" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Скопировать BOM" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Копировать спецификацию из исходной детали" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Скопировать параметры" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Копировать данные параметров из исходной детали" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Копировать Записи" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Скопировать записи из оригинальной детали" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Копировать тесты" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "Копировать шаблоны тестов из исходной детали" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Начальное количество на складе" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Задайте начальное количество этой детали на складе. Если количество равно 0, складская позиция не будет добавлена." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Начальное местоположение запаса" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Укажите начальное местоположение запаса для этой детали" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Артикул производителя" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Выбранная компания не является допустимым поставщиком" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Выбранная компания не является допустимым производителем" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Деталь производителя с данным артикулом уже существует" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Деталь поставщика с данным артикулом уже существует" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Название категории" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Производится" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "Количество этой детали, находящееся в производстве" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Оставшееся количество этой детали, запланированное к сборке" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Складские позиции" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "Ревизии" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Поставщики" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Общий запас" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Нераспределённый запас" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Запас вариантов" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Дублировать деталь" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Копировать начальные данные из другой детали" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Начальный запас" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Создавать деталь с начальным количеством на складе" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Информация о поставщике" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Добавить начальную информацию о поставщике для этой детали" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Копировать параметры категории" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Копировать шаблоны параметров из выбранной категории деталей" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Существующее изображение" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Имя файла существующего изображения детали" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Файл изображения не существует" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Проверить всю спецификацию" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Можно произвести" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "Требуется для заказов на сборку" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "Выделено для заказов на сборку" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "Требуется для заказов на продажу" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "Выделено для заказов на продажу" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "Внутренний артикул детали" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "Описание детали" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "Выберите деталь (и любые её варианты) для которой сгенерировать информацию об инвентаризации" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "Выберите категорию (и любые её подкатегории) для которой сгенерировать информацию об инвентаризации" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "Выберите склад, чтобы включить все детали в наличии в указанном складе (включая подразделы)" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "Создать записи инвентаризации" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "Сохранить записи инвентаризации для выбранных деталей" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "Создать отчет" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "Создать отчёт инвентаризации для выбранных деталей" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Минимальная цена" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Переопределить рассчитанное значение минимальной цены" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Валюта минимальной цены" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Максимальная цена" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Переопределить рассчитанное значение максимальной цены" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Валюта максимальной цены" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Обновить" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Обновить цены для этой детали" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Не удалось конвертировать из предоставленных валют в {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Минимальная цена не должна превышать максимальную цену" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Максимальная цена не должна быть меньше минимальной" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Выберите родительскую сборку" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Выберите деталь, которая является компонентом" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Выберите деталь, из которой копировать спецификацию" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Удалить существующие данные" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Удалить существующие пункты спецификации перед копированием" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Включая наследуемые" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Включать пункты спецификации, унаследованные от шаблонных деталей" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Пропустить некорректные строки" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Включите эту опцию, чтобы пропускать недопустимые строки" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Копировать детали-заменители" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Копировать детали-заменители при дублировании пунктов спецификации" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Уведомление о низком уровне запаса" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Доступный запас для {part.name} упал ниже настроенного минимального уровня" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "Уведомление о просроченном запасе" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "У вас 1 складская единица приближается к дате истечения срока годности" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "У вас {item_count} складских единиц приближаются к дате истечения срока годности" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "Нет даты истечения" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "Истёк {abs(days_diff)} дней назад" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "Истекает сегодня" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry} дней" @@ -6732,108 +6865,108 @@ msgstr "Действие не указано" msgid "No matching action found" msgstr "Соответствующее действие не найдено" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Не найдено совпадений для данных штрих-кода" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Найдено совпадение по штрих-коду" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "Модель не поддерживается" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "Экземпляр модели не найден" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Штрихкод соответствует существующему элементу" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "Не найдено соответствующих данных детали" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "Не найдено соответствующих поставляемых деталей" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "Найдено несколько соответствующих поставляемых деталей" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "Плагин, соответствующий данным штрихкода, не найден" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Соответствующая поставляемая деталь" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "Предмет уже был получен" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "Нет совпадения плагина для штрихкода поставщика" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "Найдено несколько соответствующих позиций" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "Не найдено соответствующей позиции" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "Заказ на продажу не указан" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "Штрих-код не соответствует существующим складским позициям" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "Складская позиция не соответствует позиции" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Недостаточно запаса" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "Складская позиция зарезервирована заказом на продажу" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Недостаточно информации" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "Найден соответствующий элемент" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "Поставляемая деталь не соответствует позиции" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "Позиция уже завершена" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "Для получения позиции требуется дополнительная информация" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Полученная позиция заказа на закупку" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "Не удалось получить позицию" @@ -6972,7 +7105,7 @@ msgstr "Предоставляет встроенную поддержку шт #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "Выпускать задатированные заказы" msgid "Automatically issue orders that are backdated" msgstr "Автоматически выпускать заказы с прошедшей датой" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "Уровни" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "Количество уровней для экспорта — установите ноль, чтобы экспортировать все уровни спецификации" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "Общее количество" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "Включать общее количество каждой детали в спецификацию" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "Данные о запасах" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "Включать данные о запасах детали" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "Данные о ценах" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "Включать данные о цене детали" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "Данные о поставщиках" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "Включать данные о поставщиках" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "Данные о производителях" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "Включать данные о производителях" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "Данные о заменителях" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "Включать данные о детях-заменителях" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "Данные о параметрах" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "Включать данные о параметрах детали" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "Экспорт многоуровневой спецификации" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "Предоставляет поддержку экспорта многоуровневых спецификаций" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "Уровень спецификации" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "Замена {n}" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "Поставщик {n}" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "Артикул поставщика {n}" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "Поставщик {n} MPN" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "Производитель {n}" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "Производитель {n} MPN" @@ -7189,19 +7322,19 @@ msgstr "Предоставляет поддержку экспорта данн #: plugin/builtin/exporter/parameter_exporter.py:16 msgid "Exclude Inactive" -msgstr "" +msgstr "Исключить неактивные" #: plugin/builtin/exporter/parameter_exporter.py:17 msgid "Exclude parameters which are inactive" -msgstr "" +msgstr "Исключить параметры, которые неактивны" #: plugin/builtin/exporter/parameter_exporter.py:29 msgid "Parameter Exporter" -msgstr "" +msgstr "Экспортёр параметров" #: plugin/builtin/exporter/parameter_exporter.py:30 msgid "Exporter for model parameter data" -msgstr "" +msgstr "Экспортёр данных параметров модели" #: plugin/builtin/exporter/stocktake_exporter.py:25 msgid "Include External Stock" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "Интегрированные методы уведомлений Slack" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "URL входящего webhook для Slack" +msgid "Slack incoming webhook URL" +msgstr "Ссылка \"Slack incoming webhook\"" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "Печать этикеток на машине InvenTree" msgid "Provides support for printing using a machine" msgstr "Предоставляет поддержку печати с использованием машины" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "последнее использование" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "Параметры" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "Ключ плагина" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "Имя плагина" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "Пакетный плагин" msgid "Plugin" msgstr "Плагин" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Автор не найден" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Плагин '{p}' несовместим с текущей версией InvenTree {v}" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Плагин требует как минимум версию {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Плагин требует не более версии {v}" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "Установка не подтверждена" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "Необходимо указать название пакета или URL" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "Всего" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Серийный номер" @@ -8097,7 +8230,7 @@ msgstr "Отчет тестирования складской позиции" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Установленные элементы" @@ -8130,495 +8263,519 @@ msgstr "Нет результата (обязательно)" msgid "No result" msgstr "Нет результата" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Файл ресурса не существует" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "Файл изображения не найден" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "Тег part_image требует экземпляр детали" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "Тег company_image требует экземпляр компании" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Фильтровать по глубине местоположения" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Фильтровать по местоположениям верхнего уровня" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Включать подместоположения в отфильтрованные результаты" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "Основной склад" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Фильтровать по родительскому местоположению" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Название детали (без учёта регистра)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Название детали содержит (без учёта регистра)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Название детали (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "IPN детали (без учёта регистра)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "IPN детали содержит (без учёта регистра)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "IPN детали (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Минимальный запас" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Максимальный запас" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Код статуса" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Внешнее местоположение" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Израсходовано для заказов на сборку" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Установлено в другом складе" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Древо Деталей" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Обновлено до" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Обновлено после" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Инвентаризация до" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Инвентаризация после" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Дата истечения до" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Дата истечения после" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Залежалый" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "Укажите первичный ключ складского элемента, чтобы исключить этот элемент и всех его потомков" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "Каскад местоположений" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "Если включено, включать элементы в дочерних местоположениях данного местоположения" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "Фильтровать по числовому идентификатору местоположения или литералу 'null'" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Необходимо указать количество" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Необходимо предоставить действительную деталь" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Указанная поставляемая деталь не существует" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "У поставляемой детали определён размер упаковки, но флаг use_pack_size не установлен" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Не нужно указывать серийные номера для неотслеживаемых деталей" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "Включать установленные" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "Если включено, включать результаты тестов для предметов, установленных под данным складским элементом" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "Фильтровать по числовому идентификатору складского элемента" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "Складской элемент с ID {id} не существует" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "Включая варианты деталей" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "После" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "До" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "Тип местоположения склада" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "Типы местоположения склада" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "Значок по умолчанию для мест хранения с невыбранным значком (необязательно)" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Место хранения" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Места хранения" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Владелец" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Выберите владельца" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Складские позиции не могут находиться в структурных местах хранения, но могут находиться в дочерних местах хранения." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Внешний" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Это сторонний склад" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Тип места хранения" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "Тип места хранения данного склада" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Вы не можете сделать это место хранение структурным, потому, что некоторые складские позиции уже находятся в нем!" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "{field} не существует" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Необходимо указать деталь" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Складские позиции не могут находиться в структурных местах хранения!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "Складская позиция не может быть создана для виртуальных деталей" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Тип детали ('{self.supplier_part.part}') должен быть {self.part}" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Количество должно быть 1 для элемента с серийным номером" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Серийный номер нельзя задать, если количество больше 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Элемент не может принадлежать сам себе" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Элемент должен иметь ссылку на производство, если is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Ссылка на производство не указывает на тот же элемент" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Складская позиция" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Базовая деталь" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Выберите соответствующего поставщика детали для этой складской позиции" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Где находится эта складская позиция?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "Упаковка этой складской позиции хранится в" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Установлено в" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Установлен ли этот элемент в другой элемент?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Серийный номер для этого элемента" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Код партии для этой складской позиции" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Количество на складе" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Исходное производство" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Производства для этой складской позиции" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Поглощен" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Заказ на производство, который поглотил эту складскую позицию" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Исходный заказ на закупку" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Заказ на закупку для этой складской позиции" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Целевой заказ на продажу" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Дата истечения срока годности для складской позиции. Остатки будут считаться просроченными после этой даты" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Удалить при обнулении" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Удалить эту складскую позицию при обнулении складского запаса" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Цена за единицу на момент покупки" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Преобразовано в деталь" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "Количество превышает доступный запас" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Деталь не является отслеживаемой" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Количество должно быть целым числом" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Количество не должно превышать доступный запас ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Серийные номера должны быть предоставлены в виде списка" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Количество не соответствует серийным номерам" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "Нельзя назначить запас в структурное местоположение" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Шаблон теста не существует" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Складская позиция была назначена заказу на продажу" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Складская позиция установлена в другую деталь" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Складская позиция содержит другие детали" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Складская позиция была назначена покупателю" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Складская позиция в производстве" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Серийные запасы нельзя объединить" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Дублирующие складские элементы" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь поставщика" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Коды статуса запаса должны совпадать" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Складской элемент нельзя переместить, так как он отсутствует на складе" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Отслеживание складского элемента" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Заметки к записи" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Результат теста складского элемента" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Для этого теста должно быть указано значение" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Для этого теста требуется загрузить вложения" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Недопустимое значение для этого теста" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Результат тестирования" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Результат выполнения теста" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Вложение с результатом теста" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Заметки о тестировании" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "Испытательное оборудование" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "Идентификатор испытательного оборудования, на котором выполнялось тестирование" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "Запущен" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Время начала тестирования" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "Завершён" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Время окончания тестирования" @@ -8662,246 +8819,246 @@ msgstr "Выберите деталь для генерации серийног msgid "Quantity of serial numbers to generate" msgstr "Количество серийных номеров для генерации" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "Шаблон теста для этого результата" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "Для этой детали не найдено подходящего теста" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "Необходимо указать ID шаблона или имя теста" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "Время завершения теста не может быть раньше времени начала" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Родительский элемент" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "Родительский складской элемент" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Использовать размер упаковки при добавлении: заданное количество — это количество упаковок" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "Использовать размер упаковки" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Введите серийные номера для новых элементов" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Номер детали поставщика" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Просрочен" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Дочерние элементы" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "Отслеживание элементов" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "Закупочная цена для этой складской позиции, за единицу или за упаковку" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Введите количество складских позиций для сериализации" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "Складской элемент не предоставлен" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Количество не должно превышать доступный запас ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Целевое место хранения" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "Серийные номера не могут присваиваться данной детали" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Серийные номера уже существуют" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Выберите складскую позицию для установки" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "Количество для установки" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "Введите количество элементов для установки" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Добавить запись к транзакции (необязательно)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "Количество для установки должно быть не менее 1" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "Складская позиция недоступна" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "Выбранная деталь отсутствует в спецификации" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "Количество для установки не должно превышать доступное количество" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Место назначения для демонтированного элемента" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "Выберите деталь в которую будет преобразована складская позиция" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "Выбранная деталь не является допустимым вариантом для преобразования" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Невозможно преобразовать складскую позицию с назначенной деталью поставщика" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "Статус складской позиции" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "Выберите складские позиции для изменения статуса" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "Не выбрано ни одной складской позиции" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Места хранения" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "Родительское местоположение запаса" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "Деталь должна быть продаваемой" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "Элемент распределён в заказ на продажу" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "Элемент зарезервирован для заказа на производство" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Покупатель для назначения складских позиций" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "Выбранная компания не является покупателем" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Записи о назначенных запасах" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "Необходимо предоставить список складских позиций" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Заметки об объединении складских позиций" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Разрешить несоответствие поставщиков" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "Разрешить объединение складских позиций с различными поставщиками" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Разрешить несоответствие статусов" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "Разрешить объединение складских позиций с различными статусами" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Необходимо предоставить как минимум 2 складские позиции" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Нет изменений" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Первичный ключ складского элемента" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "Складской элемент отсутствует на складе" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "Складской элемент уже на складе" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "Количество не должно быть отрицательным" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Заметки об изменении склада" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "Объединить с существующим запасом" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "Объединять возвращённые элементы с существующими складскими элементами, если возможно" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "Следующий серийный номер" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "Предыдущий серийный номер" @@ -9383,83 +9540,83 @@ msgstr "Заказы на продажу" msgid "Return Orders" msgstr "Заказы на возврат" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Логин" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Имя" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Имя пользователя" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Фамилия" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Фамилия пользователя" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Адрес электронной почты пользователя" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Персонал" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Имеет ли этот пользователь права персонала" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Суперпользователь" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Это пользователь является суперпользователем" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Активна эта учетная запись" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "Только суперпользователь может изменить это поле" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "Пароль" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "Пароль пользователя" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "Игнорировать предупреждение" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "Игнорировать предупреждение о правилах пароля" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "У вас нет разрешения на создание пользователей" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Ваша учётная запись была успешно создана." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Пожалуйста, используйте функцию сброса пароля для входа" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Добро пожаловать в InvenTree" diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po index 5743f98b50..ab6477c792 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "" -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "" @@ -112,13 +104,13 @@ msgstr "" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "" @@ -131,75 +123,75 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +199,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po index 81ae4cc9d9..a2dccbf7be 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API vmesnik ni najden" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Uporabnik nima dovoljenja pogleda tega modela" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Ponovnite e-pošto" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Potrdite e-pošto" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "E-pošti se morata ujemati" -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Podana epošta ni veljavna." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Domena epošte ni podprta." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Ni mogoče pretvoriti {original} v {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Podana napačna količina" @@ -112,13 +104,13 @@ msgstr "Vnesi datum" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Zapiski" @@ -131,75 +123,75 @@ msgstr "Vrednost '{name}' ni v predpisanem formatu" msgid "Provided value does not match required pattern: " msgstr "Podana vrednost se ujema s predpisanim vzorcem: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Prazno polje serijske številke" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Dvojna serijska številka" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, 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:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Serijske številke niso najdene" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Odstranite oznako HTML iz te vrednosti" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Napaka povezave" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Odziv serverja: napravilni status kode" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Pojavila se je izjema" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Odziv serverja: napačna dolžina vrednosti" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Prevelika velikost slike" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Prenos slike presegel največjo velikost" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Oddaljeni server vrnil prazen odziv" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Podani URL ni veljavna slikovna datoteka" @@ -207,11 +199,11 @@ msgstr "Podani URL ni veljavna slikovna datoteka" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-pošta" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "Referenca se mora ujemati s vzorcem" msgid "Reference number is too large" msgstr "Referenčna številka prevelika" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Nedovoljena izbira" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Opis (opcijsko)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Pot" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Podvojena imena ne morejo obstajati pod istim nadrejenim elementom" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Markdown opombe (neobvezno)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Podatki čtrne kode" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Podatki črtne kode tretje osebe" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Oznaka črtne kode" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Enolična oznaka podatkov črtne kode" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Črtna koda že obstaja" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Napaka strežnika" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Zaznana napaka na strežniku." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Mora biti veljavna številka" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Izberite valuto med razpoložljivimi možnostmi" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Neveljavna vrednost" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Oddaljena slika" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "Povezava do oddaljene slike" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Prenos slik iz oddaljene povezave ni omogočen" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Kitajščina (poenostavljena)" msgid "Chinese (Traditional)" msgstr "Kitajščina (tradicionalno)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "Neveljavna fizična enota" msgid "Not a valid currency code" msgstr "Neveljavna oznaka valute" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Nadrejena izgradnja" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Dodeljeno meni" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Dodeljeno" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Neobvezno" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Montaža" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Sledi" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Testno" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Dodeljeno" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Na voljo" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Nalog izgradnje" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Nalogi izgradnje" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Sestava BOM ni bila potrjena" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Naveden mora biti odgovorni uporabnik ali skupina" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Referenca naloga izgradnje" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Referenca naloga izgradnje" msgid "Reference" msgstr "Referenca" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Nalog izgradnje na katerega se ta izgradnaj nanaša" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Izberite del za izgradnjo" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referenca dobavnica" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Dobavnica na katero se navezuje ta izgradnja" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Lokacija vira" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Izberite lokacijo dela za to izgradnjo (v primeru da ni pomembno pusti prazno)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Ciljna lokacija" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Izberite lokacijo, kjer bodo končne postavke shranjene" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Količina izgradenj" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Število postavk za izgradnjo" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Končane postavke" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Število postavk zaloge, ki so bile končane" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Status izgradnje" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Koda statusa izgradnje" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Številka serije" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Številka serije za to izgradnjo" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Datum ustvarjenja" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Rok dokončanja" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Rok končanja izdelave. Izdelava po tem datumu bo v zamudi po tem datumu." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Datom končanja" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "dokončal" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Izdal" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Uporabnik, ki je izdal nalog za izgradnjo" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odgovoren" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Odgovorni uporabnik ali skupina za to naročilo" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Zunanja povezava" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Zunanja povezava" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Nalog izgradnje {build} je dokončan" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Nalog izgradnej dokončan" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Ni določena izgradnja" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Igradnja je že dokončana" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Izgradnja se ne ujema s nalogom izdelave" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Količina" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Izdelana postavka mora imeti izgradnjo, če je glavni del označen kot sledljiv" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Količina za zalogo s serijsko številko mora biti 1" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Prestavljena zaloga ({q}) ne sme presegati zaloge ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Preveč zaloge je prestavljene" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Prestavljena količina mora biti večja od 0" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Količina za zalogo s serijsko številko mora biti 1" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Postavka zaloge" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Izvorna postavka zaloge" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Količina zaloge za prestavljanje za izgradnjo" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Inštaliraj v" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Destinacija postavke zaloge" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Izgradnja" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Izgradnja se ne ujema z nadrejeno izgradnjo" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Izhodni del se ne ujema s naročilom sestava" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Ta sestava je že zaključena" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "Preklicano" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Končano" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Uporabnik" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktivno" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Povezava" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Priloga" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Manjka datoteka" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Manjka zunanja povezava" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Izberite prilogo" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Komentar" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Ime datoteke" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "Postavljeno" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Podatki datoteke" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Poslano" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Prestavljena količina mora biti večja od 0" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Uporabniško ime" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Ime" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Ime uporabnika" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Priimek" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Priimek uporabnika" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Email uporabnika" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Osebje" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Ali ima ta uporabnik pravice osebja" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Superuporabnik" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Ali je ta uporabnik superuporabnik" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Ali je ta račun aktiven" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Vaš račun je bil ustvarjen." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Za prijavo uporabite funkcijo ponastavitve gesla" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Dobrodošli v InvenTree" diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po index 146d188d87..4da7fdf3fa 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API krajnja tačka nije pronađena" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Lista nevalidiranih stavki" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Dati su neispravni filteri" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Korisnik nema dozvolu za pregled ovog modela" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "E-pošta (ponovo)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Potvrda adrese e-pošte" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Svaki put morate upisati istu e-poštu." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Navedena primarna adresa e-pošte nije važeća." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Navedeni domen adrese e-pošte nije prihvaćen." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Nije moguće konvertovati {original} u {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Isporučena nevažeća količina" @@ -112,13 +104,13 @@ msgstr "Unesite datum" msgid "Invalid decimal value" msgstr "Neispravna decimalna vrednost" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Napomene" @@ -131,75 +123,75 @@ msgstr "Vrednost '{name}' se ne pojavljuje u formatu obrasca" msgid "Provided value does not match required pattern: " msgstr "Navedena vrednost ne odgovara traženom obrascu: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Nije moguće dati više od 1000 serijskih brojeva stavkama odjednom" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Serijski broj nije popunjen" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Dupliciraj serijski broj" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Nevažeća grupa: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, 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:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Nisu pronađeni serijski brojevi" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Uklonite HTML oznake iz ove vrednosti" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Podatak sadrži zabranjen jezički sadržaj" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Greška u povezivanju" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Server je odgovorio nevažećim statusnim kodom" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Došlo je do izuzetka" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 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:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Veličina slike je prevelika" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Preuzimanje slike premašilo je maksimalnu veličinu" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Udaljeni server vratio je prazan odgovor" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Navedeni URL nije važeća slikovna datoteka" @@ -207,11 +199,11 @@ msgstr "Navedeni URL nije važeća slikovna datoteka" msgid "Log in to the app" msgstr "Prijavljivanje na aplikaciju" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-Pošta" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "Referenca mora odgovarati traženom obrascu" msgid "Reference number is too large" msgstr "Broj reference je predugačak" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Nevažeći izvor" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Opis (Opciono)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Putanja" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Dvostruka imena ne mogu postojati pod istom nadredjenom grupom" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Zabeleške (Opciono)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Podaci sa barkoda" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Podaci sa barkoda trećih lica" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Heš barkoda" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Jedinstveni hash barkoda" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Postojeći barkod pronađen" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Neuspešan zadatak" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Pozadinski proces '{f}' neuspešan posle {n} pokušaja" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Greška servera" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Server je zabležio grešku." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Slika" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Mora biti važeći broj" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Odaberite valutu među dostupnim opcijama" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Nevažeća vrednost" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Udaljena slika" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL udaljene slike" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Preuzimanje slika s udaljenog URL-a nije omogućeno" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "Neuspešno preuzimanje slike sa udaljene URL" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Kineski (Uprošćeni)" msgid "Chinese (Traditional)" msgstr "Kineski (Tradicionalni)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "Nevažeća jedinica mere" msgid "Not a valid currency code" msgstr "Nevažeći kod valute" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Status naloga" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Roditeljski proizvod" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Uključi varijante" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Uključi varijante" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Uključi varijante" msgid "Part" msgstr "Deo" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategorija" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Proizvod predaka" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Dodeljeno meni" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Dodeljeno" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Kreirano pre" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Kreirano nakon" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Ciljni datum pre" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Ciljni datum nakon" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Završeno pre" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Završeno nakon" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Ne uključuj stablo" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Proizvod mora biti poništen pre nego što se izbriše" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Potrošni materijal" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Opciono" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Sklapanje" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Praćeno" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Proverljivo" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "Neizmirena narudžbina" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Alocirano" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Dostupno" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Po narudžbini" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Nalog za izradu" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Lokacija" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Nalozi za izradu" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "BOM za sastavljanje nije potvrđeno" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Nalog za izradu se ne može kreirati za neaktivan deo" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Nalog za izradu se ne može kreirati za zaključan deo" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Odgovorni korisnik ili grupa mora biti određena" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Deo u nalogu za izradu ne može se izmeniti" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Reference naloga za pravljenje" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Reference naloga za pravljenje" msgid "Reference" msgstr "Referenca" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Kratak opis izrade (nije obavezno)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Nalog za izradu za koju je ova izrada alocirana" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Izaberi deo za izgradnju" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Referenca naloga za prodaju" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Nalog za prodaju za koju je ova izrada alocirana" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Lokacija izvora" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Izaberi lokaciju zaliha za ovu izgradnju (ostaviti prazno ako hoćete bilo koju lokaciju zaliha" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Lokacija odredišta" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Izaberi lokaciju gde će se završene stavke skladištiti" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Količina izgradnje" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Broj stavki za izgradnju" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Kompletirane stavke" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Broj stavki u zalihama koje su kompletirane" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Status izgradnje" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Kod statusa izgradnje" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Kod serije" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Kod izgradnje za ovaj izlaz" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "datum kreiranja" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Datum ciljanog završetka" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ciljani datum za završetak izgradnje. Izgradnja će biti u prekoračenju nakon ovog datuma" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Datum završetka" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "kompletirano od " -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "izdato od" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Korisnik koji je izdao nalog za izgradnju" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odgovoran" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Korisnik ili grupa koja je odgovorna za ovaj nalog za izgradnju" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Spoljašnja konekcija" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Link za eksterni URL" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Prioritet izgradnje" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Prioritet ovog naloga za izgradnju" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Kod projekta" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Kod projekta za ovaj nalog za izgradnju" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Nije uspelo preuzimanje zadataka da bi se dovršila alokacija izgradnje" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Nalog za izgradnju {build} je kompletiran" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Nalog za izgradnju je kompletiran" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Za delove koji mogu da se prate moraju se dostaviri serijski brojevi" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Nije određen izlaz izgradnje" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Izlaz izgradnje je već kompletiran" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Izlaz izgradnje se ne slaže sa Nalogom za izgradnju" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Količina mora biti veća od nule" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Količina ne sme da bude veća od izlazne količine" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Izlaz izgradnje {serial} nije zadovoljio zahtevane testove" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Stavka porudžbine naloga za izgradnju" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Objekat izgradnje" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Objekat izgradnje" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Količina" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Potrebna količina za nalog za izgradnju" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Stavka izgradnje mora imati izlaz izgradnje, jer je nadređeni deo markiran da može da se prati" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "Izabrana stavka zaliha se ne slaže sa porudžbinom sa spiska materijala" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Količina mora da bude 1 za zalihe koje su serijalizovane" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Alocirana količina ({q}) ne sme da bude veća od količine dostupnih zaliha ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Stavka zaliha je prealocirana" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Količina alokacije mora da bude veća od nule" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Količina mora da bude 1 za zalihe koje su serijalizovane" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "Izabrana stavka zaliha se ne slaže sa porudžbinom sa spiska materijala" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Stavka zaliha" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Izvor stavke zaliha" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Količina zaliha za alociranje za izgradnju" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Ugradi u" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Stavka zaliha odredišta" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Nivo izgradnje" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Ime dela" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Naziv koda projekta" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Izlaz izgradnje" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Izlaz izgradnje se ne slaže sa nadređenom izgradnjom" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Izlazni deo se ne slaže sa delom Naloga za Izgradnju" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Ovaj izlaz izgradnje je već kompletiran" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Ovaj izlaz izgradnje nije u potpunosti alociran" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Unesi količinu za izlaz izgradnje" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Brojčana količina potrebna za delove koji mogu da se prate" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Potrebna je brojčana količina, jer opis materijala sadrži delove koji se mogu pratiti" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Serijski brojevi" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Unesi serijske brojeve za izlaz izgradnje" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Lokacija zaliha za izlaz izgradnje" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Automatski alociraj serijske brojeve" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatski alociraj tražene stavke sa odgovarajućim serijskim brojevima" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Sledeći serijski brojevi već postoje ili su neispravni" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Lista izlaza izgradnje se mora obezbediti" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Lokacija zaliha za otpisane izlaze" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Odbaci alokacije" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Odbaci bilo kojiu alokaciju zaliha za otpisane izlaze" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Razlog za otpisane izlaz(e) izgradnje" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Lokacija za završene izlaze izgradnje" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Prihvati nekompletirane Alokacije" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "kompletiraj izlaze ako zalihe nisu u potpunosti alocirane" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Troši alocirane zalihe" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Troši bilo koje zalihe koje su već alocirane za ovu izgradnju" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Ukloni nekompletirane izlaze" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Izbriši svei izlaze izgradnje koji nisu kompletirani" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Nije dozvoljeno" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Prihvati kao potrošeno od strane ovog naloga za izgradnju" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Izmesti bre završetka ovog naloga za izgradnju" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Sveukupne izdvojene zalihe" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Šta želite da radite sa viškom stavki u zalihama koje su dodeljene nalogu za izgradnju?" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Neke stavke zaliha su prealocirane" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Prihvati nealocirano" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Prihvati da stavke zaliha nisu u potpunosti alocirane za ovaj nalog za izgradnju" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Tražene zalihe nisu u potpunosti alocirane" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Prihvati nekompletirano" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Prihvati da je traženi broj izlaza izgradnje nekompletan" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Traženi broj izgradnji nije kompletan" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Nalog za izgradnju ima otvoren potčinjene naloge za izgradnju" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Nalog za izgradnju mora biti u stanju produkcije" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Nalog za izgradnju ima nekompletne izlaze" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Porudžbina izgradnje" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Izlaz izgradnje" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Izlaz izgradnje mora da referencira istu izgradnju" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Stavka porudžbine za izradu" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part mora da se referencira istom delu kao u nalogu za izgradnju" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "Stavka mora da bude u zalihama" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupna količina ({q}) premašena" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Izlaz izgradnje mora da određen za alokaciju praćenih delova" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Izlaz izgradnje ne može biti određen za alokaciju nepraćenih delova" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Stavke alociranja se moraju odrediti" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Lokacija zaliha koje će da budu izvor delova (ostavi prazno ukoliko uzimate sa bilo koje lokacije)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Isključi lokaciju" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Isključi stavke zaliha za ovu selektovanu lokaciju" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Zamenljive zalihe" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Stavke zaliha koje su na različitim lokacijama se mogu međusobno menjati" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Zamenske zalihe" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Dozvoli alociranje delova koji su zamenski" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Opcionalne stavke" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Alociraj opcione BOM stavke na nalog za izgradnju" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Greška prilikom startovanja auto alociranja" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "Referenca BOM" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "BOM ID dela" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "BOM ime dela" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Deo dobavljača" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Alocirana količina" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Referenca izgradnje" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Ime kategorije dela" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Može da se prati" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Nasleđen" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Dozvoli varijante" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "BOM stavka" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "U proizvodnji" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Spoljašnje zalihe" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Dostupne zalihe" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Dostupne zamenske zalihe" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Dostupne varijante zaliha" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "Na čekanju" msgid "Cancelled" msgstr "Otkazano" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Gotovo" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Potrebne su zalihe za nalog izgranje" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Prekoračeni nalog za izgradnju" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Nalog za izgradnju {bo} je sada prekoračen" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "je link" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "je datoteka" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Korisnik nema potrebne dozvole da bi izbrisao ove atačmente" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Korisnik nema dozvolu da izbriše ovaj atačment" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Neispravan kod valute" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Napravi duplikat koda valute" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Nisu obezbeđeni ispravni kodovi valuta" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Nema dodataka" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Naziv koda projekta" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Ažurirano" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Vreme poslednjeg ažuriranja" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Jedinstveni kod projekta" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Opis projekta" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Korisnik ili grupa odgovorni za ovaj projkat" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Ključ za podešavanje" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Vrednost podešavanja" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Izabrana vrednost nije ispravna opcija" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Vrednost mora da bude boolean tipa" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Vrednost mora da bude integer tipa" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "Vrednost mora biti broj" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "Vrednost ne prolazi test ispravnosti" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Tekstualni ključ mora da bude jedinstven" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Korisnik" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Prelomna količina cene" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Cena" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Cena jedinice za određenu količinu" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Krajnja tačka" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Krajnja tačka na kojoj je primljen zahtev za izmenu web stranice" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Ime ovog zahteva za izmenu stranice" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktivan" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Da li je ovaj zahtev za izmenu aktivan?" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Token za pristup" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Tajna" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Deljena tajna za HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "ID poruke" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Jedinstveni identifikator za ovu poruku" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Računar" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Računar koji je primio ovu poruku" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Zaglavlje" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Zaglavlje ove poruke" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Telo" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Telo ove poruke" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Krajnja tačka na kojoj je ova poruka primljena" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Radilo se na " -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Da li je rad sa ovom porukom završen?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "Id" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Naslov" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Objavljeno" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Autor" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Rezime" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Čitaj" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Da li je ova stavka vesti pročitana" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Datoteka slike" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "Ciljni tip modela za ovu sliku" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "Ciljni ID modela za ovu sliku" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Posebna jedinica" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "Simbol jedinice mora biti jedinstven" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Ime jedinice mora da bude ispravan identifikator" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Ime jedinice" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Simbol" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Opcioni simbol jedinice" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definicija" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Definicija jedinice" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Prilog" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Nedostaje datoteka" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Nedostaje eksterni link" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Izaberite datoteku za prilog" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Komentar" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Komentar priloga" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Datum učitavanja" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Datum kada je datoteka učitana" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Veličina datoteke" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Veličina datoteke u bajtovima" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Određen je neispravan tip modela za prilog" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "Posebno stanje" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "Posebna stanja" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "Referentni status podešen" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "Status je podešen i produžen je sa ovim posebnim stanjem" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logički ključ" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "Stanje logičkog ključa je jednako posebnom ključu u poslovnoj logici" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Vrednost" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "Numerička vrednost koja će biti sačuvana u bazi podataka modela" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Ime stanja" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Etiketa" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Etiketa koja će biti prikazana na korisničkoj strani" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Boja" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Boja koja će biti prikazana na korisničkoj strani" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Model" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "Model ovog stanja je povezan sa " -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "Model mora biti izabran" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "Ključ mora biti izabran" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "Logički ključ mora biti izabran" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "Ključ mora da se razlikuje od logičkog ključa" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "Validna referenca statusa klase mora biti dostavljena" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "Ključ mora biti različit od logičkog ključa referentnog statusa" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "Logički ključ mora biti među logičkim ključevima referentnog statusa" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "Naziv mora biti različit od naziva u statusu reference" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Lista odabira" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Liste odabira" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Ime liste odabira" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Opis liste odabira" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Zaključano" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "Da li je ova lista odabira zaključana?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "Da li se ova lista odabira može koristiti?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Ekstenzija/dodatak za izvor" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Ekstenzija koja pruža listu odabira" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "String izvora" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Opcioni string koji identifikuje izvor koji se koristi za ovu listu" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Podrazumevani unos" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Podrazumevani unos za ovu listu odabira" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Kreirano" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Datum i vreme kada je ova lista odabira kreirana" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Poslednje ažuriranje" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "Datum i vreme kada je ova lista odabira ažurirana" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Unos liste odabira" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Unosi liste odabira" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Lista odabira kojoj ovaj unos pripada" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Vrednost ovog unosa liste odabira" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Naziv ovog unosa liste odabira" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Opis ovog unosa liste odabira" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "Da li je unos ove liste odabira aktivan?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Šablon parametra" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "Checkbox parametri ne mogu imati jedinice" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parametri ne mogu imati izbore" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "Izbori moraju biti jedinstveni" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "Ime šablona parametra mora biti jedinstveno" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Naziv parametra" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Jedinice" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Fizičke jedinice za ovaj parametar" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Opis parametra" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Polje za potvrdu" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Da li je ovaj parametar checkbox?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Izbori" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Validni izbori za ovaj parametar (razdvojeni zapetom)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "Lista izbora za ovaj parametar" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Omogućen" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Nije validan izbor za vrednost parametra" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Šablon" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Podaci" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Vrednost parametra" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Beleška" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Opciona beleška" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Skeniranje bar koda" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Podaci bar koda" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Korisnik koji je skenirao bar kod" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Vremenski trag" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Datum i vreme skeniranja bar koda" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "URL krajnja tačka kojaj je obradila bar kod" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Kontekst podataka za skeniranje bar koda" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Odgovor" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Podaci odgovora za skeniranje bar koda" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Rezultat" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "Da li je skeniranje bar koda bilo uspešno?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Ključ" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} poništeno" msgid "A order that is assigned to you was canceled" msgstr "Narudžbina koja je bila dodeljena vama je otkazana" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Stavke primljene" @@ -2351,93 +2359,101 @@ msgstr "Stavke su primljene uprkos nalogu za kupovinu" msgid "Items have been received against a return order" msgstr "Stavke su primljene uprkos nalogu za povrat" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Pokrenuto je" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Čekaju se zadaci" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Planirani zadaci" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Propali zadaci" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID zadatka" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Jedinstveni ID zadatka" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Zaključaj" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Vreme zaključavanja" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Naziv zadatka" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Funkcija" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Ime funkcije" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argumenti" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Argumenti zadatka" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Ključne reči argumenata" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Ključne reči argumenata zadatka" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Ime datoteke" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Tip modela" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Korisnik nema dozvolu da napravi ili izmeni priloge za ovaj model" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Lista odabira je zaključana" @@ -2445,1128 +2461,1157 @@ msgstr "Lista odabira je zaključana" msgid "No group" msgstr "Nema grupe" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "URL sajta je zaključan od strane konfiguracije" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Ponovno pokretanje potrebno" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Podešavanje je izmenjeno i zahteva ponovno pokretanje servera" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Migracije na čekanju" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Broj migracija baze podataka koje su na čekanju" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Ime instance servera" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Stringovni opis instance servera" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Ime instance korisnika" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Koristi ime instance u naslovnoj liniji" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Zabrani prikazivanje `O nama`" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Prikaži `O nama` samo superkorisnicima" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Ime kompanije" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Interno ime kompanije" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "Osnovni URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "Osnovni URL za instancu servera" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Podrazumevana valuta" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Izaberi osnovnu valutu za određivanje cena" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Podržane valute" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Lista kodova podržanih valuta" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Interval ažuriranja valuta" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Koliko često ažurirati devizne kurseve (podesi na nulu za onemogućti)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "dani" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Dodatak za ažuriranje valute" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Dodatak za ažuriranje valute koji će se koristiti" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Skini sa URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Dozvoli skidanje sa udaljenih lokacija slika i datoteka" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Ograničenje veličine skidanja" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Maksimalna dozvoljena veličina slike koja se skida" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "Korisnik-agent koji se koristi za skidanje sa URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Dozvoli premošćavanje koji će se korisnik-agent koristiti za skidanje slika i datoteka sa spoljašnjeg URL (ostavi prazno da se podesi kao podrazumevano)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Stroga validacija URL" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "Traži specifikaciju za validaciju URL-ova" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Ažuriraj interval provere" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Koliko često da proveravam za nova ažuriranja? (podesi na nulu da bi isključio)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Automatsko pravljenje rezervne kopije" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Omogući automatsko pravljenje rezervne kopije baze podataka i medijskih datoteka" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Automatski interval pravljenja rezervnih kopija" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Odredi broj dana između automatskih pravljenja rezervnih kopija" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Interval brisanja zadataka" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Rezultati pozadinskih zadataka biće izbrisani nakon određenog broja dana " -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Interval brisanja evidencije grešaka" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Evidencija grešaka biće izbrisana nakon određenog broja dana" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Interval brisanja obaveštenja" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Korisnička obaveštenja biće izbrisana nakon određenog broja dana" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Podrška za bar kod" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Omogući podršku za bar kod skener preko interfejsa stranice" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "Uskladišti rezultate bar koda" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "Uskladišti rezultate bar koda u bazu podataka" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "Maksimalan broj skeniranja bar koda" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "Maksimalan broj rezultata skeniranja bar koda koji treba da se skladišti" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Kašnjenje unosa bar koda" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Vreme kašnjena obrađivanja ulaza bar koda" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Podrška za bar kod veb kameru" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Omogući skeniranje bar koda pomoću veb kamere u pretraživaču" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "Prikaži podatke bar koda" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Prikaži podatke bar koda u pretraživaču kao tekst" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Dodatak za generisanje bar koda" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Dodatak koji će se koristiti kao interni generator podataka bar koda" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Revizije dela" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Omogući polje za reviziju dela" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "Jedino revizija sastavljanja " -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "Dozvoli jedino revizije za sastavne delove" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Dozvoli brisanje iz sastavljanja" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Dozvoli brisanje delova koji su korišćeni u sastavljanju" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "Interni broj dela regex" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Regularni obrazac izraza za podudaranje IPN dela" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Dozvoli duple IPN" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Dozvoli da više delova dele isti IPN" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Dozvoli izmenu IPN" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Dozvoli izmenu IPN vrednosti u toku izmene dela" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Kopiraj BOM podatke dela" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Podrazumevaj kopiranje BOM podataka prilikom pravljenja duplikata dela " -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Kopiraj podatke parametara dela" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Podrazumevaj kopiranje podataka parametara dela prilikom pravljenja duplikata dela" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Kopiraj podatke testiranja dela" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Podrazumevaj kopiranje podataka testiranja dela prilikom pravljenja duplikata dela" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Kopiraj šablone parametara kategorije" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Kopiraj šablone parametara kategorije prilikom pravljenja dela" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Podrazumevano je da su delovi šabloni" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Podrazumevano je da se delovi mogu sastavljati od drugih komponenti" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponenta" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Podrazumevano je da se delovi mogu koristi kao pod-komponente" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Može da se kupi" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Podrazumevano je da se delovi mogu kupiti" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Može da se proda" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "podrazumevano je da delovi mogu da se prodaju" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Podrazumevano je da delovi mogu da se prate" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtuelni" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Podrazumevano je da su delovi virtuelni" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Prikaži povezane delove" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Prikaži povezane delove za deo" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Inicijalni podaci zaliha" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Dozvoli kreiranje inicijalne alihe prilikom dodavanja novog dela" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Podaci inicijalnog dobavljača" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Dozvoli kreiranje inicijalnog dobavljača prilikom dodavanja novog dela" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Format prikazivanja imena dela" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Format u kome će se prikazivati ime dela" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Podrazumevana ikona za kategoriju dela" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Podrazumevana ikona za kategoriju dela (prazno znači bez ikone)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Minimalan broj decimalnih mesta za cene" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Minimalan broj decimalnih mesta prilikom generisanja cenovnih podataka" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Maksimalan broj decimalnih mesta za cene" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Maksimalan broj decimalnih mesta prilikom generisanja cenovnih podataka" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Koristi cene dobavljača" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Uključi pauziranje cene dobavljača u sveukupnom računanju cene" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Premosti istorijat kupovina" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Prethodne cene narudžbenice zamenjuje pauze cena dobavljača" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Koristi cene stavki u zalihama" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Koristi cene koje su ručno unete u podatke zaliha" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Godina cena stavki u zalihama" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Odstrani stavke zaliha iz kalkulacija cena, koje su starije od ovog broja dana" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Koristi drugačije cene" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Uključi drugačije cene u sveukupnim kalkulacijama cene" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Samo aktivne varijante" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Koristi samo aktivne varijante za određivanje varijante cene" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Vremenski period za ponovno određivanje cena" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Broj dana koji treba da prođe da bi se cene delova automatski ažurirale" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Interne cene" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Omogući interne cene za delove" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Premošćavanje internih cena" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Ako su dostupne, interne cene premošćuju kalkulacije opsega cena" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Omogući štampanje etiketa" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Omogući štampanje etiketa preko web interfejsa" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "DPI slike etikete" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "DPI rezolucija prilikom generisanja slikovne datoteke za dodatak koji štampa etikete" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Omogući izveštaje" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Omogući generisanje izveštaja" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Mod otklanjanja grešaka" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Generiši izveštaje u modu za otklanjanje grešaka (izlaz je u HTML)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Greške evidencije izveštaja" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Greške evidentiranja koje se dese prilikom generisanja izveštaja" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Veličina stranice" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Podrazumevana veličina strane za izveštaje u PDF formatu" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Zahtevaj jedinice parametara" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Ako su jedinice date, vrednosti parametara moraju odgovarati datim jedinicama" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Globalno jedinstveni serijski brojevi" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Serijski brojevi za stavke zaliha moraju da budu globalno jedinstveni" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Obriši ispražnjene zalihe" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "Ovo određuje podrazumevano ponašanje kada je stavka zaliha istrošena" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Šablon koda serije" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Šablon za generisanje podrazumevanih kodova serije stavki u zalihama" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Datum isteka zaliha" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Omogući funkcionalnost isteka zaliha" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Prodaja isteklih zaliha" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Dozvoli prodaju isteklih zaliha" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Vreme zastarevanja zaliha" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Broj dana tokom kojih će se stavke zaliha smatrati zastarelim pre isteka" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Izrada sa isteklim zalihama" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Dozvoli izradu sa isteklim zalihama" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Vlasnička kontrola zaliha" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Omogući vlasničku kontrolu nad lokacijama zaliha i stavkama" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Podrazumevana ikonica lokacije zaliha" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Podrazumevana ikonica lokacije zaliha (prazno znači da nema ikonice)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Prikaži instalirane stavke sa zaliha" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Prikaži instalirane stavke sa zaliha u stok tabelama" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "Proveri spisak materijala pri instalaciji stavki" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Instalirane stavke sa zaliha moraju postojati u spisku materijala nadređenog dela" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Dozvoli transfer van zaliha" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Dozvoli da stavke sa zaliha koje nisu na zalihama budu premeštane između lokacija zaliha" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Referentni šablon naloga za izradu" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Potreban šablon za generisanje referentnog polja naloga za izradu" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Potreban odgovoran vlasnik" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Odgovoran vlasnik mora biti dodeljen svakom nalogu" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "Potreban aktivan deo" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "Spreči kreiranje naloga za izradu za neaktivne delove" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Potreban zaključan deo" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "Spreči kreiranje nalogaza izradu za otključane delove" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "Potreban validan spisak materijala" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "Spreči kreiranje naloga za izradu pre validacije spiska materijala" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "Potrebno završavanje podređenih naloga" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "Spreči završavanje naloga za izradu pre završavanja svih podređenih naloga" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Blokiraj dok ne prođe test" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Spreči završavanje naloga za izradu pre uspešnog završetka svih testova" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Omogući naloge za vraćanje" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Omogući funkcionalnost vraćana u korisničkom interfejsu" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Referentni šablon naloga za vraćanje" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "Potreban šablon pri generisanju referentnog polja naloga za vraćanje" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Izmeni završene naloge za vraćanje" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Dozvoli izmenu naloga za vraćanje nakon što su završeni" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Referentni šablon naloga za prodaju" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Potreban šablon pri generisanju referentnog polja naloga za prodaju" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Podrazumevana isporuka naloga za prodaju" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Omogućava kreiranje podrazumevane isporuke sa nalozima za prodaju" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Izmeni završene naloge za prodaju" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Dozvoli izmenu naloga za prodaju nakon što su isporučeni ili završeni" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Označi isporučene naloge kao završene" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "Nalozi za prodaju označeni kao isporučeni će automatski biti završeni, zaobilazeći status isporučen" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Referentni šablon naloga za kupovinu" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Potreban šablon pri generisanju referentnog polja naloga za kupovinu" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Izmeni završene naloge za kupovinu" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Dozvoli izmenu naloga za kupovinu nakon što su isporučeni ili završeni" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Automatski završi naloge za kupovinu" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Automatski označi naloge za kupovinu kao završene kada su primljene sve stavke porudžbine" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Omogući zaboravljenu lozinku" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Omogući funkcionalnost zaboravljene lozinke na stranicama za prijavljivanje" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Omogući registraciju" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Omogući registraciju korisnicima na stranicama za prijavljivanje" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Omogući SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Omogući SSO na stranicama za prijavljivanje" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Omogući SSO registraciju" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Omogući registraciju preko SSO za korisnike na stranicaa za prijavljivanje" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "Omogući SSO sinhronizaciju grupa" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Omogući sinhronizaciju grupa aplikacije sa grupama IdP-a" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "SSO ključ grupe" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Nazivi grupa dobijaju atribute od IdP-a" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "Mapiranje SSO grupa" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "Mapiranje SSO grupa u lokalne grupe aplikacije. Ukoliko lokalna grupa ne postoji, biće kreirana." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "Ukloni grupe van SSO" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Da li će grupe dodeljene korisnicima biti uklonjene ukoliko nisu podržane IdP-om. Onemogućavanje ovoga može dovesti do problema." -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Email neophodan" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Zahtevaj od korisnika da dostavi mejl prilikom registracije" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Automatski popuni SSO korisnike" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatski popuni korisnikove podatke iz SSO naloga" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Email dva puta" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Pitaj korisnika dva puta za email prilikom registracije" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Lozinka dva puta" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Pitaj korisnika dva puta za lozinku prilikom registracije" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Dozvoljeni domeni" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Ograniči registraciju na određene domene (razdvojeni zapetom, počinju sa @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Grupa pri registrovanju" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Grupa kojoj se novi korisnici dodeljuju pri registraciji. Ukoliko je SSO group sync omogućen, ova grupa će se dodavati ukoliko korisnik ne može da dobije grupu iz IdP-a." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Nametni MFA" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Korisnici moraju koristiti multifaktorsku bezbednost" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Proveri plugine pri pokretanju" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Proveri da li su svi pluginovi instalirani pri pokretanju - omogućeni u kontejnerskim okruženjima" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Proveri ažuriranja pluginova" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "Omogući periodično proveranje pluginova" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Omogući URL integraciju" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Omogući da pluginovi dodaju URL rute" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Omogući integraciju u navigaciju" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Omogući integraciju pluginova u navigaciju" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Omogući integraciju aplikacija" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Omogući pluginovima da dodaju aplikacije" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Omogući integraciju planiranja" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Omogući da plugini izvršavaju planirane zadatke" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Omogući integraciju događaja" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Omogući da plugini odgovaraju na unutrašnje događaje" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "Omogući integraciju interfejsa" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "Omogući integraciju pluginova u korisnički interfejs" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Ne uključuj eksterne lokacije" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Period automatskog popisa" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "Prikaži puna imena korisnika" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "Prikaži puna imena korisnika umesto korisničkih imena" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "Omogući podatke test stanica" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" -msgstr "Omogući prikupljanje podataka sa test stanica radi rezultata testova" +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "Prikaži puna imena korisnika" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Prikaži puna imena korisnika umesto korisničkih imena" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "Omogući podatke test stanica" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "Omogući prikupljanje podataka sa test stanica radi rezultata testova" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "Deo je aktivan" msgid "Manufacturer is Active" msgstr "Proizvođač je aktivan" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "Deo dobavljača je aktivan" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "Interni deo je aktivan" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "Dobavljač je aktivan" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Proizvođač" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Kompanija" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "Ima zalihe" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Kompanije" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Opis kompanije" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Opis kompanije" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Vebsajt" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "Vebsajt kompanije" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Broj telefona" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Broj telefona kontakta" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Email adresa kontakta" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakt" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Osoba za kontakt" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Link ka eksternim informacijama o kompaniji" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "Da li je ova kompanija aktivna?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "Je mušterija" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Da li prodajete stavke ovoj kompaniji?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "Je dobavljač" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Da li kupujete stavke od ove kompanije?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Je proizvođač" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Da li ova kompanija proizvodi delove?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Podrazumevana valuta za ovu kompaniju" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Adrese" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Adrese" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Izaberi kompaniju" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Naslov adrese" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Naslov koji opisuje adresu" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Primarna adresa" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Postavi kao primarnu adresu" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Telefon 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Adresa 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Telefon 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Adresa 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Poštanski broj" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Grad/region" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Poštanski broj" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Država/provincija" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Država ili provincija" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Zemlja" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Adresa zemlje" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Beleške za kurira" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Beleške za kurira" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Interne beleške o isporuci" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Beleške o isporuci za internu upotrebu" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Link za adresne informacije (eksterni)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Deo proizvođača" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Osnovni deo" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Izaberi deo" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Izaberi proizvođača" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "Broj dela proizvođača" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Broj dela proizvođača" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL za link eksternog dela proizvođača" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Opis dela proizvođača" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Jedinice pakovanja moraju biti kompatibilne sa osnovnim jedinicama dela" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Jedinice pakovanja moraju biti veće od nule" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Povezani delovi dobavljača moraju referencirati isti osnovni deo" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Dobavljač" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Izaberi dobavljača" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Jedinica za držanje dobavljačevih zaliha" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "Da li je ovaj deo dobavljača aktivan?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Izaberi deo proizvođača" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL za link dela eksternog dobavljača" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Opis dela dobavljača" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "osnovni trošak" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalna naplata (npr. taksa za slaganje)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Pakovanje" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Pakovanje delova" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Količina pakovanja" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Ukupna količina dostavljena u jednom pakovanju. Ostaviti prazno za pojedinačne stavke." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "više" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Naruči više" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Količine dostupne od dobavljača" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Dostupnost ažurirana" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Datum poslednjeg ažuriranja podataka o dostupnosti" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "Smanjenje cene dobavljača" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "Podrazumevana valuta koja se koristi za ovog dobavljača" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Naziv kompanije" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "Na zalihama" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "Postavljen" msgid "Invalid status code" msgstr "Nevažeći statusni kod" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Datoteka" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "Fajl sa podacima za uvoz" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Kolone" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "Status uvoza" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "Podrazumevane vrednosti polja" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "Promene polja" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Filteri polja" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "Neka neophodna polja nisu mapirana" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "Kolona je već mapirana u polje u bazi podataka" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "Polje je već mapirano u kolonu sa podacima" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "Mapiranje kolona mora biti linkovano da bi se uvezla važeća sesija" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "Kolona ne postoji u fajlu sa podacima" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "Polje ne postoji u ciljnom modelu" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "Izabrano polje je samo za čitanje" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "Uvezi sesiju" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Polje" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Kolona" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Indeks vrsta" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "Originalni podaci vrste" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Greške" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Važeće" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "Broj kopija za štampanje od svakog natpisa" msgid "Connected" msgstr "Konektovano" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Nepoznato" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Referenca naloga" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "Izvanredno" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "Ima šifru projekta" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Kreirano do strane" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "Kreirano pre" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Kreirano nakon" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "Krajnji datum pre" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "Krajnji datum nakon" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "Ima cenu" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "Završen pre" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "Završen nakon" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Nalog" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "Nalog završen" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Interni deo" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "Nalog na čekanju" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Završeno" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "Ima isporuku" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Nalog za kupovinu" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Nalog za kupovinu" msgid "Sales Order" msgstr "Nalog za prodaju" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Ukupna cena" msgid "Total price for this order" msgstr "Totalna cena ovog naloga" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Valuta naloga" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta za ovaj nalog (ostaviti prazno za podrazumevanu valutu kompanije)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Kontakt se ne poklapa sa izabranom kompanijom" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Opis naloga (opciono)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Izaberi šifru projekta za ovaj nalog" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Link ka eksternoj stranici" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Ciljani datum" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Očekivani datum za isporuku. Nalog će biti zastareo nakon ovog datuma." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Datum izdavanja" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Datum kada je nalog izdat" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Korisnik ili grupa odgovorni za ovaj nalog" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Lice za kontakt za ovaj nalog" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Adresa kompanije za ovaj nalog" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Referenca naloga" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Status naloga za kupovinu" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Kompanija od koje su stavke naručene" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Referenca dobavljača" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Referentni kod dobavljača naloga" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "primljeno od strane" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Datum kada je nalog završen" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Odredište" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "Odredište za primljene stavke" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Dobavljač dela se mora poklapati sa dobavljačem naloga za kupovinu" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Stavka porudžbine se ne poklapa sa nalogom za kupovinu" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Količina mora biti pozitivan broj" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Mušterija" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "Kompanija kojoj se prodaju stavke" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "Status naloga za prodaju" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Referenca mušterije" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Referentni kod mušterijinog naloga" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Datum isporuke" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "isporučeno od strane" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "Nalog je već završen" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "Nalog je već otkazan" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "Samo otvoren nalog može biti označen kao završen" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Nalog ne može biti završen jer ima nepotpunih isporuka" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Nalog ne može biti završen jer ima nepotpunih alokacija" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "Nalog ne može biti završen jer ima nezavršenih stavki porudbžine" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Količina stavki" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Referenca stavke porudbžine" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Beleške stavke porudbžine" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Krajnji datum za ovu stavku porudbćine (ostaviti prazno za krajnji datum sa naloga)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Opis stavke porudžbine (opciono)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Dodatni kontekst za ovu porudžbinu" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Cena jedinice" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "Stavka porudžbine naloga za kupovinu" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "Deo dobavljača se mora poklapati sa dobavljačem" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Deo dobavljača" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Primljeno" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Broj primljenih stavki" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Kupovna cena" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Kupovna cena jedinice" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "Dodatna porudbžina naloga za kupovinu" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "Stavka porudžbine naloga za prodaju" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "Samo delovi koji se mogu prodati mogu biti dodeljeni nalogu za prodaju" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Prodajna cena" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Prodajna cena jedinice" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Poslato" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Isporučena količina" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "Isporuka naloga za prodaju" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Datum isporuke" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Datum dostavljanja" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Datum dostavljanja isporuke" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Provereno od strane" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Korisnik koji je proverio ovu isporuku" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Isporuka" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Broj isporuke" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Broj praćenja" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Informacije o praćenju isporuke" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Broj računa" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Referentni broj za dodeljeni račun" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "Isporuka je već poslata" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "Isporuka nema alocirane stavke sa zaliha" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "Dodatne porudbžine naloga za prodaju" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "Alokacije naloga za prodaju" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "Stavka sa zaliha nije dodeljena" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "Ne mogu se alocirati stavke sa zaliha porudbžini sa drugačijim delom" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "Ne mogu se alocirati zalihe porudbžini bez dela" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Alocirana količina ne sme da pređe količinu zaliha" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Količina alokacije mora da bude veća od nule" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "Količina mora biti 1 za serijalizovane stavke sa zaliha" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "Nalog za prodaju se ne poklapa sa isporukom" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Isporuka se ne poklapa sa nalogom za prodaju" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Porudbžina" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Referenca isporuke naloga za prodaju" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Stavka" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Izaberi stavku sa zaliha za alokaciju" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Unesi količinu za alokaciju zaliha" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Referenca naloga za vraćanje" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "Kompanija čije stavke su vraćene" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Status naloga za vraćanje" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "Vrati stavku porudbžine" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "Stavka sa zaliha mora biti određena" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "Količina vraćanja je premašila količinu zaliha" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "Količina vraćanja mora biti veća od nule" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "Nevažeća količina za serijalizovane stavke sa zaliha" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "Izaberi stavku za vraćanje od mušterije" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Primljeno datuma" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "Datum kada je ova vraćena stavka primljena" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Ishod" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Ishod za ovu stavku porudžbine" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Trošak asociran sa popravkom ili vraćanjem ove stavke porudžbine" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "Doda" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "ID naloga" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "ID naloga koji će se duplirati" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "Kopiraj porudžbine" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "Kopiraj stavke porudžbine sa originalnog naloga" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "Kopiraj dodatne porudžbine" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "Kopiraj dodatne stavke porudžbine sa originalnog naloga" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopiraj parametre" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Stavke porudbžine" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "Završene porudbžine" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "Dupliraj nalog" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "Odredi opcije za dupliranje ovog naloga" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "Nevažeći ID naloga" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Naziv dobavljača" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "Nalog ne može biti otkazan" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "Dozvoli da nalog bude zatvoren sa nepotpunim porudžbinama" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "Nalog ima nepotpune stavke porudžbine" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "Nalog nije otvoren" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "Automatske cene" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Automatski izračunaj kupovnu cenu na osnovu podataka o delovima dobavljača" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Valuta kupovne cene" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "Spoj stavke" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Spoj stavke sa istim delom, odredištem i ciljanim datumom u jednu stavku porudžbine" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "Jedinica za praćenje zaliha" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Interni broj dela" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "Interni naziv dela" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "Deo dobavljača mora biti određen" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "Nalog za kupovinu mora biti određen" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "Dobavljač mora da se poklapa sa nalogom za kupovinu" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "Nalog za kupovinu mora da se poklapa sa dobavljačem" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Stavka porudbžine" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Izaberi odredišnu lokaciju za primljene stavke" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Unesi šifru ture za nadolazeće stavke sa zaliha" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Datum isteka" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Unesi serijske brojeve za nadolazeće stavke sa zaliha" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "Promeni informacije o pakovanju za nadolazeće stavke sa zaliha" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "Dodatne beleške za nadolazeće stavke sa zaliha" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Bar kod" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Skeniran bar kod" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Bar kod je već u upotrebi" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Stavke porudžbine moraju biti dostavljene" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "Odredišna lokacija mora biti određena" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Pružene vrednosti bar kodova moraju biti jedinstvene" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "Isporuke" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Završene isporuke" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Valuta prodajne cene" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "Alocirane stavke" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Nisu dostavljeni detalji isporuke" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "Stavka porudžbine nije asocirana sa ovim nalogom" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "Količina mora biti pozitivna" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Unesi serijske brojeve za alokaciju" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "Isporuka je već isporučena" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "Isporuka nije povezana sa ovim nalogom" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "Nema pronađenih poklapanja za sledeće serijske brojeve" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "Sledeći serijski brojevi su nedostupni" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Stavka porudžbine naloga za vraćanje" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "Stavka porudžbine se ne poklapa sa nalogom za vraćanje" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "Stavka porudžbine je već primljena" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "Stavke se mogu primiti samo na osnovu naloga koji su u toku" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "Količina za vraćanje" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Valuta cene porudžbine" @@ -5532,1174 +5613,1226 @@ msgstr "Refundiraj" msgid "Reject" msgstr "Odbij" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Istekli nalozi za kupovinu" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Nalog za kupovinu {po} je sada istekao" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Istekli nalozi za prodaju" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Nalog za prodaju {so} je sada istekao" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "Označeno zvezdicom" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "Filtiraj po kategorijama označenim zvezdicom" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Dubina" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "Filtriraj po dubini kategorije" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "Vrhovni" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "Filtriraj po vrhovnim kategorijama" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "Kaskadno" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "Uključi pod-kategorije u filtriranim rezultatima" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Nadređen" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Filtriraj po nadređenoj kategoriji" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "Ne uključuj pod-kategorije pod specifičnom kategorijom" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Ima rezultate" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "Je revizija" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "Ima revizije" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "Spisak materijala validan" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "Deo sklopa se može testirati" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "Deo komponente se može testirati" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "Koristi" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Kategorija dela" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Kategorije delova" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Podrazumevana lokacija" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Podrazumevana lokacija za delove ove kategorije" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Strukturno" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "Delovi ne mogu biti direktno dodeljene strukturnoj kategoriji, ali mogu biti dodeljeni podređenim kategorijama." -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Podrazumevane ključne reči" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "Podrazumevane ključne reči za delove ove kategorije" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Ikonica" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikonica (opciono)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "Ova kategorija dela se ne može podesiti kao strukturna jer već ima dodeljene neke delove!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "Šablon parametara kategorije dela" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Podrazumevana vrednost" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Podrazumevana vrednost parametra" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Delovi" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "Ovaj deo se ne može izbrisati jer je zaključan" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "Ovaj deo se ne može izbrisati jer je i dalje aktivan" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "Ovaj deo se ne može obrisati jer se koristi u sklopu" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Deo '{self}' ne može biti korišćen u spisku materijala za '{parent}' (recursive)" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Deo '{parent}' se koristi u spisku materijala za '{self}' (recursive)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "Interni broj dela se mora slagati sa regex šablonom {pattern}" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "Deo ne može biti revizija samog sebe" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "Ne može se kreirati revizija dela koji je već revizija" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "Šifra revizije mora biti dostavljena" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "Revizije su dozvoljene samo za delove sklopove" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "Ne može se izvršiti revizija šablonskog dela" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "Nadređeni deo mora biti vezan sa istim šablonom" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "Stavka sa ovim serijskim brojem već postoji" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplirani interni brojevi dela nisu dozvoljeni u podešavanjima dela" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "Identična revizija dela već postoji" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "Deo sa ovim nazivom, internim brojem dela i revizijom već postoji" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "Delovi ne mogu biti dodeljeni strukturnim kategorijama delova!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Naziv dela" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Jeste šablon" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Da li je ovaj deo šablonski deo?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "Da li je ovaj deo varijanta drugog dela?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Varijanta od" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Opis dela (opciono)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Ključne reči" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "Ključne reči dela da bi se poboljšala vidljivost u rezultatima pretrage" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Kategorija dela" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interni broj dela" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Revizija dela ili broj verzije" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Revizija" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "Da li je ovaj deo revizija drugog dela?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "Revizija od" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Gde je ova stavka inače skladištena?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Podrazumevani dobavljač" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Podrazumevani deo dobavljača" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Podrazumevani istek" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "Vreme isteka (u danima) za stavke sa zaliha ovog dela" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimalne zalihe" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Minimalni dozvoljen nivo zaliha" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Jedinice mere za ovaj deo" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Da li ovaj deo može biti izgrađen od drugih delova?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "Da li ovaj deo može biti korišćen za izradu drugih delova?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "Da li ovaj deo ima praćenje za više stavki?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "Da li ovaj deo može imati svoje rezultate testa?" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "Da li ovaj deo može biti kupljen od eksternih dobavljača?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "Da li ovaj deo može biti prodat mušterijama?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Da li je ovaj deo aktivan?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "Zaključani delovi se ne mogu menjati" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "Da li je ovo virtuelni deo, kao na primer softver ili licenca?" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Suma spiska materijala" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Uskladištena suma spiska materijala" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "Spisak materijala proveren od strane" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "Spisak materijala proveren datuma" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Korisnik koji je kreirao" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "Vlasnik odgovoran za ovaj deo" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Prodaj više" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "Valuta korišćena za vršenje proračuna o cenama" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Minimalna vrednost spiska materijala" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Minimalna vrednost komponenti delova" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Maksimalna vrednost spiska materijala" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Maksimalna vrednost komponenti delova" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Minimalna kupovna vrednost" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Minimalna istorijska kupovna vrednost" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Maksimalna kupovna vrednost" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "Maksimalna istorijska kupovna vrednost" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Minimalna interna cena" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "Minimalna cena bazirana na internim sniženjima cena" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Maksimalna interna cena" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "Maksimalna vrednost bazirana na internim sniženjima cena" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Minimalna cena dobavljača" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "Minimalna cena dela od eksternih dobavljača" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Maksimalna cena dobavljača" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "Maksimalna cena dela od eksternih dobavljača" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Minimalna vrednost varijanti" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "Izračunata minimalna vrednost varijanti delova" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Maksimalna vrednost varijanti" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "Izračunata maksimalna vrednost varijanti delova" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Minimalna vrednost" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Promeni minimalnu vrednost" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Maksimalna vrednost" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Promeni maksimalnu vrednost" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Ukupna izračunata minimalna vrednost" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Ukupna izračunata maksimalna vrednost" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Minimalna prodajna cena" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "Minimalna prodajna cena bazirana na osnovu sniženja cena" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Maksimalna prodajna cena" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Maksimalna prodajna cena bazirana na osnovu sniženja cena" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Minimalna prodajna vrednost" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Minimalna istorijska prodajna cena" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Maksimalna prodajna vrednost" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Maksimalna istorijska prodajna cena" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Deo za popis" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Broj stavki" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "Broj individualnih unosa zaliha u vreme popisa" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "Ukupne dostupne zalihe za vreme popisa" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Datum" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Datum kada je izvršen popis" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Minimalna vrednost zaliha" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "Procenjena minimalna vrednost trenutnih zaliha" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Maksimalna vrednost zaliha" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "Procenjena maksimalna vrednost trenutnih zaliha" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "Smanjenje prodajne cene dela" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "Šablon testa dela" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Nevažeći naziv šablona - mora da uključuje bar jedan alfanumerički karakter" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "Test šabloni mogu biti kreirani samo za delove koje je moguće testirati" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "Test šablon sa istim ključem već postoji za ovaj deo" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Naziv testa" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Unesi naziv za ovaj test" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "Test ključ" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "Pojednostavljen ključ za test" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Opis testa" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Unesi opis za ovaj test" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "Da li je ovaj test omogućen?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Neophodno" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Da li je neophodno da ovaj test prođe?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Zahteva vrednost" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "Da li ovaj test zahteva vrednost prilikom dodavanja rezultata testa?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Zahteva prilog" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "Da li ovaj test zahteva fajl kao prilog prilikom dodavanja rezultata testa?" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "Validni izbori za ovaj test (razdvojeni zapetom)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "Stavke sa spiska materijala se ne mogu modifikovati - sklapanje je zaključano" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Stavke sa spiska materijala se ne mogu modifikovati - sklapanje varijanti je zaključano" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Izaberi nadređeni deo" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Pod-deo" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Izaberi deo koji će biti korišćen u spisku materijala" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "Količina spiskova materijala za ovu stavku sa spiska materijala" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Ova stavka sa spiska materijala je opciona" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Ova stavka sa spiska materijala se može potrošiti (nije praćena u nalozima za izradu)" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Referenca stavke sa spiska materijala" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Beleške stavki sa spiska materijala" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Suma" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "Suma spiska materijala" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Validirano" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Ova stavka sa spiska materijala je validirana" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Biva nasleđeno" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Ova stavka sa spiska materijala je nasleđivana od spiska materijala za varijante delova" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Stavke sa zaliha za varijante delova se mogu koristiti za ovu stavku sa spiska materijala" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Količina mora biti ceo broj za delove koji se mogu pratiti" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Zamenski deo mora biti određen" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "Zamenska stavka sa spiska materijala" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "Zamenski deo ne može biti isti kao glavni deo" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Nadređena stavka sa spiska materijala" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Zamenski deo" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Deo 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Deo 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Izaberi povezan deo" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "Beleška za ovu relaciju" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "Relacija između delova ne može biti kreirana između jednog istog dela" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "Identična veza već postoji" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "Nadređena kategorija" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "Nadređena kategorija dela" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Podkategorije" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "Rezultati" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "Broj rezultata napravljenih na osnovu ovog šablona" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "Valuta kupovine za ovu stavku sa zaliha" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Originalni deo" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Izaberi originalni deo za duplikaciju" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopiraj sliku" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Kopiraj sliku sa originalnog dela" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Kopiraj spisak materijala" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Kopiraj spisak materijala sa originalnog dela" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Kopiraj parametre" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Kopiraj parametarske podatke sa originalnog dela" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Kopiraj beleške" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Kopiraj beleške sa originalnog dela" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Inicijalna količina zaliha" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Odredi inicijalnu količinu zaliha za ovaj deo. Ukoliko je količina nula, neće biti dodate zalihe." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Inicijalna lokacija zaliha" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Odredi inicijalnu lokaciju zaliha za ovaj deo" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Izaberi dobavljača (ostavi prazno za preskakanje)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Izaberi proizvođača (ostavi prazno za preskakanje)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Broj dela proizvođača" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Izabrana kompanija nije validan dobavljač" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Izabrana kompanija nije validan proizvođač" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Deo proizvođača koji se poklapa sa ovim brojem dela proizvođača već postoji" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Deo dobavljača koji se opklapa sa ovim brojem dela dobavljača već postoji" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Naziv kategorije" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Izrađivanje" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Stavke sa zaliha" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "Revizije" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Dobavljači" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Ukupne zalihe" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "Nealocirane zalihe" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "Varijante zaliha" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Dupliraj deo" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Kopiraj inicijalne podatke od drugog dela" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Početne zalihe" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Kreiraj deo sa početnom količinom zaliha" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Informacije o dobavljaču" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Dodaj inicijalne informacije o dobavljaču za ovaj deo" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Kopiraj parametre kategorije" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Kopiraj parametarske šablone sa izabrane kategorije dela" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Postojeća slika" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Ime fajla postojeće slike dela" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Fajl sa slikom ne postoji" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Validiraj ceo spisak materijala" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Može se izgraditi" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Minimalna cena" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Izmeni izračunatu vrednost za minimalnu cenu" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Minimalna valuta cene" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Maksimalna cena" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Izmeni izračunatu vrednost maksimalne cene" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Maksimalna valuta cene" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Ažuriraj" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Ažuriraj cene za ovaj deo" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nija moguća konverzija iz dostavljen valute u {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Minimalna cena ne sme biti veća od maksimalne cene" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Maksimalna cena ne sme biti manja od minimalne cene" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "Izaberi nadređeni sklop" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "Izaberi komponentu dela" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Izaberi deo sa kog će se kopirati spisak materijala" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Ukloni postojeće podatke" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Ukloni postojeće stavke sa spiska materijala pre kopiranja" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Uključi nasleđeno" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Uključi stavke sa spiska materijala koje su nasleđene od šablonskih delova" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Preskoči nevažeće vrste" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Omogući ovu opciju za preskakanje nevažećih vrsta" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Kopiraj zamenske delove" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopiraj zamenske delove prilikom duplikacije stavki sa spiska materijala" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Notifikacija o niskim zalihama" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Dostupne zalihe za {part.name} su pale ispod konfigurisanog minimalnog nivoa" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "Nema određene akcije" msgid "No matching action found" msgstr "Nema poklapajuće akcije" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Nema poklapanja za podatke sa bar koda" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Pronađeno poklapanje za podatke sa bar koda" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "Model nije podržan" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "Instanca modela nije pronađena" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "Bar kod se poklapa sa postojećom stavkom" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "Nema podudarajućih podataka o delovima" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "Nema pronađenih podudarajućih delova dobavljača" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "Više podudarajućih delova dobavljača pronađeno" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "Nema podudarajućeg plugina za podatke sa bar koda" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Podudarajući deo dobavljača" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "Stavka je već primljena" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "Nijedan plugin se ne poklapa sa dobavljačevim bar kodom" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "Više pronađenih poklapajućih stavki porudžbine" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "Nema podudarajućih stavki porudbžine pronađenih" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "Nema dostavljenih naloga za prodaju" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "Bar kod se ne poklapa sa postojećom stavkom sa zaliha" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "Stavka sa zaliha se ne podudara sa stavkom porudbžine" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Nedovoljno dostupnih stavki" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "Stavka alocirana nalogu za prodaju" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Nema dovoljno informacija" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "Pronađena stavka" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "Deo dobavljača se ne poklapa sa stavkom porudžbine" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "Stavka porudžbine je već završena" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "Dalje informacije neophodne za primanje ove stavke" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Primljene stavke sa naloga za kupovinu" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "Greška pri prijemu stavke porudžbine" @@ -6972,7 +7105,7 @@ msgstr "Pruža ugrađenu podršku za bar kodove" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "Slack dolazeći webhook url" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "Mašinsko štampanje natpisa" msgid "Provides support for printing using a machine" msgstr "Pruža podršku za štampanje pomoću mašine" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "poslednji put korišćeno" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "Opcije" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Ključ plugina" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "Ime plugina" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "Paket plugin" msgid "Plugin" msgstr "Plugin" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Nije pronađen autor" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "Plugin '{p}' nije kompatibilan sa trenutnom verzijom aplikacije {v}" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "Plugin zahteva najmanje verziju {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "Plugin zahteva najviše verziju {v}" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "Instalacija nije potvrđena" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "Ili ime paketa ili URL moraju biti dostavljeni" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8072,7 +8205,7 @@ msgstr "Ukupno" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serijski broj" @@ -8097,7 +8230,7 @@ msgstr "Izveštaj sa testa za stavku sa zaliha" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Instalirane stavke" @@ -8130,495 +8263,519 @@ msgstr "Nema rezultata (neophodno)" msgid "No result" msgstr "Nema rezultata" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Fajl ne postoji" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "Slika nije pronađena" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "part_image tag zahteva instancu dela" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "company_image tag zahteva instancu kompanije" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "Filtriraj po dubini lokacije" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "Filtriraj po nadređenim lokacijama" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "Uključi podlokacije u filtriranim rezultatima" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "Nadređena lokacija" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "Filtriraj po nadređenoj lokaciji" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "Ime dela" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "Ime dela sadrži" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "Ime dela (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "Interni deo broja" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "Interni deo broja sadrži (osetljivo na velika i mala slova)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "Interni broj dela (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "Minimalne zalihe" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "Maksimalne zalihe" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Statusni kod" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Eksterna lokacija" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "Potrošeno od strane naloga za izradu" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "Instalirano u drugu stavku sa zaliha" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Stablo dela" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "Ažurirano pre" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Ažurirano nakon" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "Popis pre" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "Popis nakon" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Datum isteka pre" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Datum isteka nakon" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Zastarelo" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Količina je neophodna" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Validan deo mora biti dosavljen" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Dati dobavljač ne postoji" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Deo dobavljača ima definisanu veličinu pakovanja, ali fleg use_pack_size nije postavljen" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Serijski brojevi ne mogu biti dostavljeni za deo koji nije moguće pratiti" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "Tip lokacije zaliha" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "Tipovi lokacija zaliha" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "Podrazumevana ikonica za sve lokacije koje nemaju podešenu ikonicu (opciono)" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Lokacija zaliha" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Lokacija zaliha" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Vlasnik" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Izaberi vlasnika" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Stavke sa zaliha ne mogu biti direktno locirane u strukturnim lokacijama zaliha, ali mogu biti locirane u podređenim lokacijama." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Eksterna" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Ovo je eksterna lokacija zaliha" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Tip lokacije" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "Tip lokacija zaliha za ovu lokaciju" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Ne možete postaviti ovu lokaciju zaliha kao strukturnu jer su već neke stavke locirane na njoj!" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "Deo mora biti određen" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Stavka sa zaliha ne može biti locirana u strukturnim lokacijama zaliha!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "Stavka sa zaliha ne može biti kreirana za virtuelne delove" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Deo tipa ('{self.supplier_part.part}') mora biti {self.part}" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Količina mora biti 1 za stavku sa serijskim brojem" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Serijski broj ne može biti postavljen ukoliko je količina veća od 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Stavka ne može da pripada samoj sebi" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Stavka mora da ima referencu izgradnje ukoliko is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Referenca izgradnje ne ukazuje na isti objekat dela" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Nadređena stavka sa zaliha" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Osnovni deo" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Izaberi odgovarajući deo dobavljača za ovu stavku sa zaliha" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Gde je locirana ova stavka sa zaliha?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "Pakovanje u kom je ova stavka sa zaliha" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Instalirano u" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Da li je ova stavka instalirana u drugu stavku?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Serijski broj za ovu stavku" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Šifra ture za ovu stavku sa zaliha" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Količina zaliha" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Izvorna gradnja" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Nalog za ovu stavku sa zaliha" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Potrošeno od strane" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Nalog za izradu koji je potrošio ovu stavku sa zaliha" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Izvorni nalog za kupovinu" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Nalog za kupovinu za ovu stavku sa zaliha" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Odredište naloga za prodaju" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Datum isteka za stavku sa zaliha. Zalihe će se smatrati isteklim nakon ovog datuma" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Obriši kad je potrošeno" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Obriši ovu stavku sa zaliha kada su zalihe potrošene" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Cena kupovine jedne jedinice u vreme kupovine" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Konvertovano u deo" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Deo nije postavljen kao deo koji je moguće pratiti" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Količina mora biti ceo broj" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Količina ne sme da pređe dostupnu količinu zaliha ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "Serijski brojevi moraju biti dostavljeni kao lista" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Količine se ne poklapaju sa serijskim brojevima" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "Test šablon ne postoji" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Stavka sa zaliha je dodeljena nalogu za prodaju" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Stavka sa zaliha je instalirana u drugu stavku" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Stavka sa zaliha sadrži druge stavke" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Stavka sa zaliha je dodeljena mušteriji" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Stavka sa zaliha je trenutno u produkciji" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Serijalizovane zalihe se ne mogu spojiti" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Dupliraj stavke sa zaliha" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Stavke sa zaliha se moraju odnositi na isti deo" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Stavke sa zaliha se moraju odnositi na isti deo dobavljača" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Statusne šifre zaliha moraju da se poklapaju" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stavka se ne može pomeriti jer nije na zalihama" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "Praćenje stavke sa zaliha" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Ulazne beleške" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "Rezultat testa stavke sa zaliha" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Vrednost mora biti dostavljena za ovaj test" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Prilog mora biti dostavljen za ovaj test" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "Nevažeća vrednost za ovaj test" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Rezultat testa" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Vrednost završetka testa" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Prilog uz test rezultat" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Beleške sa testa" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "Stanica za testiranje" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "Identifikator stanice za testiranje gde je test izvršen" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "Započeto" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "Vreme početka testa" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "Završeno" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "Vreme završetka testa" @@ -8662,246 +8819,246 @@ msgstr "Izaberi deo za koji će se generisati serijski broj" msgid "Quantity of serial numbers to generate" msgstr "Količina serijskih brojeva koji će se generisati" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "Test šablon za ovaj rezultat" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "ID šablona ili ime testa mora biti dostavljeno" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "Vreme završetka testa ne može biti pre vremena početka testa" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Nadređena stavka" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "Nadređena stavka sa zaliha" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "Koristi pakovanja prilikom dodavanja: količina je definisana brojem pakovanja" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Unesi serijske brojeve za nove stavke" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Dobavljački broj dela" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Isteklo" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Podređene stavke" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "Stavke za praćenje" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "Nabavna cena ove stavke, po jedinici ili pakovanju" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "Unesi broj stavka sa zaliha za serijalizaciju" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "Količina ne sme da pređe dostupnu količinu zaliha ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Odredišna lokacija zaliha" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "Serijski brojevi ne mogu biti dodeljeni ovom delu" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Serijski broj već postoji" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Izaberi stavku za instaliranje" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "Količina za instaliranje" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "Izaberi količinu stavki za instaliranje" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Dodaj beleške transakcija (opciono)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "Količina za instaliranje mora biti najmanje 1" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "Stavka je nedostupna" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "Izabrani deo nije na spisku materijala" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "Količina za instaliranje ne sme preći dostupnu količinu" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Odredišna lokacija za deinstalirane stavke" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "Izaberi deo u koji će se konvertovati stavka" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "Izabrani deo nije validna opcija za konverziju" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "Ne može se konvertovati stavka sa dodeljenim delom dobavljača" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "Statusni kod stavke sa zaliha" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "Izaberi stavke kojoj će se promeniti status" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "Nije izabrana stavka" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Podlokacije" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "Lokacija nadređenih zaliha" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "Deo mora biti za prodaju" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "Stavka je alocirana nalogu za prodaju" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "Stavka je alocirana nalogu za izradu" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "Mušterija kojoj će se dodeliti stavke sa zaliha" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "Izabrana kompanija nije mušterija" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Beleške dodeljivanja zaliha" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "Lista stavki mora biti dostavljena" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Beleške spajanja zaliha" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Dozvoli neslagajuće dobavljače" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "Dozvoli spajanje stavki sa različitim delovima dobavljača" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Dozvoli neslagajući status" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "Dozvoli spajanje stavki sa različitim statusnim kodovima" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "Bar dve stavke moraju biti dostavljene" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Nema promena" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Vrednost primarnog ključa stavke" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "Stavka nije na zalihama" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Beleške transakcija zaliha" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "Nalozi za prodaju" msgid "Return Orders" msgstr "Nalozi za vraćanje" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Korisničko ime" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Ime" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Ime korisnika" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Prezime" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Prezime korisnika" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Adresa E-pošte korisnika" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Osoblje" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Da li ovaj korisnik ima dozvole koje ima osoblje?" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Super korisnik" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Da li je ovaj korisnik Super korisnik?" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Da li je nalog ovog korisnika aktivan?" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Vaš nalog je kreiran" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Molimo vas koristite opciju resetovanja lozinke da biste se prijavili" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Dobrodošli u InvenTree" diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po index e57736a24b..d7fd0ba098 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API-slutpunkt hittades inte" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Användaren har inte behörighet att se denna modell" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "E-post (igen)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Bekräfta e-postadress" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Du måste ange samma e-post varje gång." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Den angivna primära e-postadressen är inte giltig." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Den angivna e-postdomänen är inte godkänd." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Kunde inte konvertera {original} till {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Ogiltigt antal angivet" @@ -112,13 +104,13 @@ msgstr "Ange datum" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Anteckningar" @@ -131,75 +123,75 @@ msgstr "Värdet '{name}' visas inte i mönsterformat" msgid "Provided value does not match required pattern: " msgstr "Det angivna värdet matchar inte det obligatoriska mönstret: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Tom serienummersträng" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Serienummret finns redan" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Ogiltig grupp: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "Gruppintervall {group} överstiger tillåtet antal ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Inga serienummer hittades" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Ta bort HTML-taggar från detta värde" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Anslutningsfel" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Servern svarade med ogiltig statuskod" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Undantag inträffade" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Servern svarade med ogiltigt innehållslängdsvärde" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Bilden är för stor" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Nedladdning av bilder överskred maximal storlek" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Fjärrservern returnerade tomt svar" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "Angiven URL är inte en giltig bildfil" @@ -207,11 +199,11 @@ msgstr "Angiven URL är inte en giltig bildfil" msgid "Log in to the app" msgstr "Logga in på appen" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-postadress" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Du måste aktivera tvåfaktorsautentisering innan du kan göra något annat." @@ -255,133 +247,124 @@ msgstr "Referensen måste matcha obligatoriskt mönster" msgid "Reference number is too large" msgstr "Referensnumret är för stort" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Ogiltigt val" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Namn" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Beskrivning" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Beskrivning (valfritt)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Sökväg" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Markdown anteckningar (valfritt)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Streckkodsdata" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Tredje parts streckkodsdata" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Streckkodsdata" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Unik hash med streckkodsdata" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Befintlig streckkod hittades" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Serverfel" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Ett fel har loggats av servern." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Bild" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Välj valuta från tillgängliga alternativ" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Ogiltigt värde" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Fjärransluten bild" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL för fjärrbildsfil" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Nedladdning av bilder från fjärr-URL är inte aktiverad" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Kinesiska (Förenklad)" msgid "Chinese (Traditional)" msgstr "Kinesiska (Traditionell)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "Ogiltig fysisk enhet" msgid "Not a valid currency code" msgstr "Inte en giltig valutakod" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Orderstatus" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Föregående tillverkning" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Inkludera varianter" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Inkludera varianter" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Inkludera varianter" msgid "Part" msgstr "Del" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategori" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Tilldelad till" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Skapad före" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Skapad efter" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Har startdatum" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Tillverkningen måste avbrytas innan den kan tas bort" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Valfri" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Spårad" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Testbar" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Allokerad" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Konsumerad" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Tillgänglig" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Byggorder" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Plats" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Byggordrar" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Tillverknings order referens" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Tillverknings order referens" msgid "Reference" msgstr "Referens" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "Tillverknings order till vilken detta produkt är tilldelad" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Välj del att tillverka" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Försäljningsorderreferens" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Försäljningsorder till vilken detta bygge allokeras" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Källa Plats" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Välj plats att ta lager från för detta bygge (lämna tomt för att ta från någon lagerplats)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Destinationsplats" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Välj plats där de färdiga objekten kommer att lagras" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Tillverkat antal" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Antal lagerobjekt att bygga" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Slutförda objekt" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Antal lagerposter som har slutförts" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Tillverknings status" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Tillverkning statuskod" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Batchkod" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Batch-kod för denna byggutdata" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Skapad" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Datum för slutförande" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Måldatum för färdigställande. Tillverkningen kommer att förfallas efter detta datum." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Slutförandedatum" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "slutfört av" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Utfärdad av" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Användare som utfärdade denna tillverknings order" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ansvarig" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Extern länk" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Länk till extern URL" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Projektkod" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Tillverknings order {build} har slutförts" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "En tillverknings order har slutförts" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Ingen byggutgång angiven" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Byggutgång är redan slutförd" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Byggutgång matchar inte bygg order" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Bygg objekt" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Bygg objekt" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Antal" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Byggobjekt måste ange en byggutgång, eftersom huvuddelen är markerad som spårbar" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Antal måste vara 1 för serialiserat lager" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Tilldelad kvantitet ({q}) får inte överstiga tillgängligt lagersaldo ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Lagerposten är överallokerad" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "Allokeringsmängden måste vara större än noll" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Antal måste vara 1 för serialiserat lager" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Artikel i lager" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Källa lagervara" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Lagersaldo att allokera för att bygga" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Installera till" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Destination lagervara" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Delnamn" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Bygg utdata" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Byggutdata matchar inte överordnad version" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Serienummer" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Ange serienummer för att tillverkade produkter" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "En lista över tillverkade produkter måste anges" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Lagerplats för skrotade produkter" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Ignorera alla lagerallokeringar för skrotade produkter" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Plats för färdiga produkter" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Slutför utfall om lager inte har tilldelats fullt ut" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Ta bort ofullständiga produkter" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Ta bort eventuella produkter som inte har slutförts" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Acceptera ofullständig" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Acceptera att det önskade antalet produkter som inte har slutförts" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Tillverknings ordern är ofullständig" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Spårbar" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Ärvd" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Tillåt varianter" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "Avbruten" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Slutför" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "Är länk" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "Är fil" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Ogiltig valutakod" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Uppdaterad" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "Uppdaterad av" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Unik projektkod" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Projektbeskrivning" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Användare" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Pris" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktiv" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Hemlig" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "Meddelande-ID" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Värd" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "Id" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Titel" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Länk" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Sammanfattning" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Läs" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Bildfil" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Definition" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Bilaga" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Saknad fil" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Extern länk saknas" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Modelltyp" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Välj fil att bifoga" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Kommentar" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Uppladdningsdatum" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Filstorlek" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logisk nyckel" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Värde" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Etikett" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Färg" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Modell" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Låst" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Källsträng" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Skapad" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Senast uppdaterad" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Parametermall" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Kryssruta" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Val" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Aktiverad" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Mall" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Data" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Streckkodsdata" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Tidsstämpel" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Sammanhang" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Svar" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Resultat" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "Ett fel inträffade" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "E-postmeddelande" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "Bekräftad" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "Inget svar" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "Tråd-ID" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "Tråd" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "E-posttrådar" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Nyckel" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Väntande uppgifter" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Schemalagda uppgifter" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Misslyckade uppgifter" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "Uppgifts-ID" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Lås" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Uppgiftsnamn" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Funktion" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Funktionsnamn" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argument" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Filnamn" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Modelltyp" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "Ingen grupp" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Omstart krävs" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Serverinstans (Namn)" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Företagsnamn" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Internt företagsnamn" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "Bas-URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "Bas-URL för serverinstans" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Standardvaluta" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "dagar" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Ladda ner från URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Tillåt nedladdning av bilder och filer från extern URL" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Stöd för streckkoder" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Virtuell" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Delar är virtuella som standard" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Visa relaterade delar" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Visa relaterade delar för en del" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Visningsformat för delnamn" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Formatera för att visa artikelnamnet" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Interna priser" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Aktivera etikettutskrift" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Aktivera etikettutskrift från webbgränssnittet" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "Etikettbild DPI" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Aktivera rapporter" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Aktivera generering av rapporter" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Debugläge" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Sidstorlek" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Standard sidstorlek för PDF-rapporter" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "Förhindra produktion från att slutföras tills alla nödvändiga tester är klara" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Aktivera registrering" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Aktivera SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Tillåtna domäner" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Tillverkare" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Företag" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Företag" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Företagsbeskrivning" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Webbplats" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Telefonnummer" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Kontakt" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "Är kund" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "Är leverantör" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "Är tillverkare" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Adress" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Adresser" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Välj företag" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Primär adress" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Rad 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Adressrad 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Rad 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Adressrad 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Postnummer" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Land" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Basdel" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Välj del" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "MPN" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Leverantör" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Välj leverantör" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "Företagsnamn" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "I lager" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "Placerad" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Datafil" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "Kolumner" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "Fältfilter" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "ID" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "Fält" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "Kolumn" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "Radindex" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "Fel" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Giltig" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "Ansluten" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Okänd" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "Har projektkod" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Skapad av" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "Skapad efter" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Intern del" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Slutförd" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "Försäljningsorder" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "Startdatum" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Måldatum" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Status" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Mål" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Kund" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Skickad" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Leveransdatum" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Kontrollerad av" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Allokeringsmängden måste vara större än noll" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Rad" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Kopiera parametrar" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Leverantörsnamn" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "SKU" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Streckkod" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "Återbetala" msgid "Reject" msgstr "Avvisa" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Djup" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "Har resultat" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "Är variant" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "Använder" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Delkategori" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Ikon" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (valfritt)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Standardvärde" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Artiklar" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Delnamn" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Är mall" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Variant av" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Nyckelord" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Delkategori" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Revision" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Standardleverantör" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Datum" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Validerad" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "Resultat" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Originaldel" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Kopiera bild" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Kopiera parametrar" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "Kopiera test" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Kategorinamn" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "Revisioner" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Leverantörer" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Uppdatera" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Hoppa över ogiltiga rader" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "Ingen åtgärd specificerad" msgid "No matching action found" msgstr "Ingen matchande åtgärd hittades" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "Nivåer" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "senast använd" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "Alternativ" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serienummer" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "Inga resultat" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Statuskod" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Extern plats" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "Uppdaterad efter" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Ägare" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Välj ägare" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Platstyp" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Grunddel" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Konverterad till del" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Testresultat" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "Startad" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "Ingen förändring" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Användarnamn" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Förnamn" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Förnamn på användaren" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Efternamn" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Efternamn på användaren" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Avsändarens E-postadress" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Personal" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Har den här användaren behörighet för personal" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Superanvändare" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Är den här användaren en superanvändare" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Är detta användarkonto aktivt" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "Lösenord" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Ditt konto har skapats." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Använd funktionen för lösenordsåterställning för att logga in" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Välkommen till InvenTree" diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po index 048dbef3ec..f0aada323a 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "ไม่พบ API endpoint" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "อีเมล (อีกครั้ง)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "การยืนยันอีเมล" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "" -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "" -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "ปริมาณสินค้าไม่ถูกต้อง" @@ -112,13 +104,13 @@ msgstr "ป้อนวันที่" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "หมายเหตุ" @@ -131,75 +123,75 @@ msgstr "" msgid "Provided value does not match required pattern: " msgstr "" -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "หมายเลขซีเรียลซ้ำกัน" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "ไม่พบหมายเลขซีเรียล" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "การเชื่อมต่อขัดข้อง" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "ไฟล์รูปภาพมีขนาดใหญ่เกินไป" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +199,11 @@ msgstr "" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "อีเมล" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "ชื่อ" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "คำอธิบาย" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "ข้อมูลบาร์โค้ด" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "บาร์โค้ดนี้มีในระบบแล้ว" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "เกิดข้อผิดพลาดที่เซิร์ฟเวอร์" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "ต้องเป็นตัวเลข" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "สกุลเงิน" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "" msgid "Chinese (Traditional)" msgstr "" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "สถานที่" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "ออกโดย" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "จำนวนต้องมีค่ามากกว่า 0" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "ยกเลิกแล้ว" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "สำเร็จแล้ว" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "ผู้ใช้งาน" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "ลิงก์" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "ไฟล์แนบ" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "ไม่พบไฟล์" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "เลือกไฟล์ที่ต้องการแนบ" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "ความคิดเห็น" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "ชื่อไฟล์" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "ไฟล์ข้อมูล" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "สำเร็จแล้ว" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "สถานะ" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "จัดส่งแล้ว" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "ชิ้นส่วน" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 -msgid "Minimum Price" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" msgstr "" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "ยินดีต้อนรับเข้าสู่ Inventree" diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po index 83fdd0090f..888915286e 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API uç noktası bulunamadı" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Toplu işlem için öge veya filtre listesi sağlanmalıdır" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Ögeler bir liste olarak sağlanmalıdır" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Geçersiz ögeler listesi sağlandı" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Filtreler bir sözlük olarak sağlanmalıdır" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Geçersiz filtreler sağlandı" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "Tüm filtre yalnızca true ile kullanılmalıdır" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Sağlanan ölçüte uygun bir eşleşme yok" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Değer verilmemiş" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "Bu alan eşsiz olmalı." -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Kullanıcının bu modeli görüntüleme izni yok" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "E-posta (tekrar)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "E-posta adresi onayı" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Her seferind eaynı e-posta adresini yazmalısınız." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Sağlanan e-posta adresi geçerli değil." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Sağlanan e-posta alanı onaylanmadı." @@ -96,13 +88,13 @@ msgid "Could not convert {original} to {unit}" msgstr "{original} birimi {unit} birimine dönüştürülemedi" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Geçersiz veri sağlandı" #: InvenTree/exceptions.py:136 msgid "Error details can be found in the admin panel" -msgstr "Hata detaylarını admin panelinde bulabilirsiniz" +msgstr "Hata ayrıntıları yönetici panelinde bulunabilir" #: InvenTree/fields.py:146 msgid "Enter date" @@ -112,13 +104,13 @@ msgstr "Tarih giriniz" msgid "Invalid decimal value" msgstr "Geçersiz ondalık değer" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Notlar" @@ -131,87 +123,87 @@ msgstr "'{name}' değeri desen formatında yer almıyor" msgid "Provided value does not match required pattern: " msgstr "Sağlanan değer gerekli kalıpla eşleşmiyor: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Geçersiz grup: {grup}" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Boş seri numarası dizesi" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Yinelenen seri" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "Geçersiz grup: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, 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:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Seri numarası bulunamadı" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "Benzersiz seri numaralarının sayısı ({n}) miktarla eşleşmeli ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Bu değerden HTML etiketlerini kaldır" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Veriler yasaklanmış işaretleme içeriği içeriyor" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Bağlantı hatası" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Sunucu geçersiz durum kodu ile cevap verdi" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "İstisna oluştu" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Sunucu geçersiz Content-Length değeriyle yanıt verdi" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" -msgstr "Resim boyutu çok büyük" - -#: InvenTree/helpers_model.py:167 -msgid "Image download exceeded maximum size" -msgstr "Resim indirme boyutu izin verilenden büyük" +msgstr "Görsel boyutu çok büyük" #: InvenTree/helpers_model.py:172 +msgid "Image download exceeded maximum size" +msgstr "Görsel indirme maksimum boyutu aştı" + +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Uzak sunucu boş cevap döndü" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" -msgstr "Sağlanan URL geçerli bir resim dosyası değil" +msgstr "Sağlanan URL geçerli bir görsel dosyası değil" #: InvenTree/magic_login.py:31 msgid "Log in to the app" msgstr "Uygulamaya giriş yapın" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "E-posta" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Başka bir şey yapmadan önce iki faktörlü kimlik doğrulamayı etkinleştirme gerekir." @@ -255,135 +247,126 @@ msgstr "Referans {pattern} deseniyle mutlaka eşleşmeli" msgid "Reference number is too large" msgstr "Referans sayısı çok fazla" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Geçersiz seçim" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Adı" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Açıklama" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Yol" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "Aynı kaynak altında birden fazla aynı isim kullanılamaz" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Markdown notları (isteğe bağlı)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Barkod Verisi" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Üçüncü parti barkod verisi" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Barkod Hash" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "Barkod verisinin benzersiz hash'i" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Var olan barkod bulundu" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "Görev Başarısızlığı" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "Arka plan çalışan görevi '{f}' {n} denemeden sonra başarısız oldu" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Sunucu Hatası" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Bir hafta sunucu tarafından kayıt edildi." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" -msgstr "Resim" +msgstr "Görsel" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Para birimi" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" -msgstr "Var olan seçeneklerden bir döviz birimi seçin" +msgstr "Mevcut seçeneklerden para birimini seçin" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "Bu alan boş olamaz." -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Geçersiz değer" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" -msgstr "Uzaktan Görüntüler" +msgstr "Uzak Görsel" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" -msgstr "Uzaktan görüntü dosya URL'si" +msgstr "Uzak görselin dosya URL'si" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" -msgstr "Uzak URL'den resim indirmek etkinleştirilmedi" +msgstr "Uzak URL'den görsel indirme etkin değil" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" -msgstr "Uzak URL'den görüntü indirilemedi" +msgstr "Uzak URL'den görsel indirilemedi" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" -msgstr "" +msgstr "Geçersiz içerik türü biçimi" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" -msgstr "" +msgstr "İçerik türü bulunamadı" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "İçerik türü gerekli mixin sınıfı ile eşleşmemektedir" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -537,11 +520,11 @@ msgstr "Çince (Basitleştirilmiş)" msgid "Chinese (Traditional)" msgstr "Çince (Geleneksel)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "Güncelleme mevcut" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "InvenTree için güncelleme mevcut" @@ -553,30 +536,30 @@ msgstr "Geçersiz fiziksel birim" msgid "Not a valid currency code" msgstr "Geçerli bir para birimi kodu değil" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Sipariş Durumu" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Üst Yapım İşi" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "Varyantları Dahil Et" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "Varyantları Dahil Et" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "Varyantları Dahil Et" msgid "Part" msgstr "Parça" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Kategori" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" -msgstr "Ata Yapım" +msgstr "Kök Üretim" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Bana atandı" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Atanılan Kişi" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "Daha önce oluşturuldu" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "Sonra oluşturuldu" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "Başlangıç tarihi var" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "Başlangıç tarihi önce" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "Başlangıç tarihi sonra" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "Hedef tarihi var" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "Hedef tarihi önce" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "Hedef tarihi sonra" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "Daha önce tamamlandı" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "Sonra tamamlandı" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "En yakın tarih" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "Maksimum Tarih" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "Ağacı Hariç Tut" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" -msgstr "Yapımın silinebilmesi için önce iptal edilmesi gerekir" +msgstr "Üretim silinemeden önce iptal edilmelidir" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Sarf Malzemesi" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "İsteğe Bağlı" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Montaj" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "İzlenen" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Test Edilebilir" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" -msgstr "Ödenmemiş Sipariş" +msgstr "Sipariş Açık" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" -msgstr "Ayrıldı" +msgstr "Tahsis Edildi" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Tüketildi" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Mevcut" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Siparişte" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" -msgstr "Yapım İşi Emri" +msgstr "Üretim Emri" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Konum" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "Çıktı" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." -msgstr "Çıkış stok öğesi kimliğine göre filtrele. Kurulmamış üretim öğelerini bulmak için ‘null’ kullan." +msgstr "Çıktı stok kalemi ID'sine göre filtrele. Takılmamış üretim kalemlerini bulmak için ‘null’ kullan." -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" -msgstr "Yapım İşi Emirleri" +msgstr "Üretim Emirleri" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" -msgstr "Montaj malzeme listesi doğrulanmadı" +msgstr "Montaj BOM listesi henüz doğrulanmadı" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" -msgstr "İnaktif bir parça için yapım siparişi oluşturulamaz" +msgstr "Pasif bir parça için üretim emri oluşturulamaz" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" -msgstr "Kilidi açılmış bir parça için yapım siparişi oluşturulamaz" +msgstr "Kilidi açılmış bir parça için üretim emri oluşturulamaz" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" -msgstr "Satın alınabilir parçaların yapım emirleri yalnızca harici olarak yerine getirilebilir" +msgstr "Harici üretim emirleri yalnızca satın alınabilir parçalar için yerine getirilebilir" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Sorumlu kullanıcı veya grup belirtilmelidir" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" -msgstr "Yapım siparişi parçası değiştirilemez" +msgstr "Üretim emri parçası değiştirilemez" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "Hedef tarih başlangıç tarihinden sonra olmalıdır" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" -msgstr "Yapım İşi Emri Referansı" +msgstr "Üretim Emri Referansı" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Yapım İşi Emri Referansı" msgid "Reference" msgstr "Referans" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" -msgstr "Yapımın kısa açıklaması (isteğe bağlı)" +msgstr "Üretimin kısa açıklaması (isteğe bağlı)" -#: build/models.py:266 -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:278 +msgid "Build Order to which this build is allocated" +msgstr "Bu üretimin tahsis edildiği üretim emri" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" -msgstr "Yapım işi için parça seçin" +msgstr "Üretilecek parçayı seçin" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Satış Emri Referansı" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "Bu yapım işinin tahsis edildiği satış emri" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "Bu üretimin tahsis edildiği satış siparişi" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Kaynak Konum" -#: build/models.py:296 -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:302 -msgid "External Build" -msgstr "Harici Yapım" - -#: build/models.py:303 -msgid "This build order is fulfilled externally" -msgstr "Bu yapım emri harici olarak yerine getirilmiştir" - #: build/models.py:308 +msgid "Select location to take stock from for this build (leave blank to take from any stock location)" +msgstr "Bu üretim için stok alınacak konumu seçin (herhangi bir stok konumundan amak için boş bırakın)" + +#: build/models.py:314 +msgid "External Build" +msgstr "Harici Üretim" + +#: build/models.py:315 +msgid "This build order is fulfilled externally" +msgstr "Bu üretim emri harici olarak tamamlanmıştır" + +#: build/models.py:320 msgid "Destination Location" msgstr "Hedef Konum" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Tamamlanmış ögelerin saklanacağı konumu seçiniz" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" -msgstr "Yapım İşi Miktarı" +msgstr "Üretim Miktarı" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" -msgstr "Yapım işi stok kalemlerinin sayısı" +msgstr "Üretilecek stok kalemlerinin sayısı" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Tamamlanmış ögeler" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Tamamlanan stok kalemlerinin sayısı" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" -msgstr "Yapım İşi Durumu" +msgstr "Üretim Durumu" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" -msgstr "Yapım işi durum kodu" +msgstr "Üretim durum kodu" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Sıra numarası" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" -msgstr "Yapım işi çıktısı için sıra numarası" +msgstr "Bu üretim çıktısının parti kodu" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Oluşturulma tarihi" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" -msgstr "İhtiyaca bağlı sipariş başlangıç tarihi" +msgstr "Üretim başlangıç tarihi" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" -msgstr "Bu ihtiyaca bağlı siparişi için planlanan başlangıç tarihi" +msgstr "Bu üretim emri için planlanan başlangıç tarihi" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Hedef tamamlama tarihi" -#: build/models.py:367 +#: build/models.py:379 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." +msgstr "Üretimin tamamlanması için hedef tarih. Bu tarihten sonra üretim gecikmiş olacak." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Tamamlama tarihi" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "tamamlayan" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" -msgstr "Veren" +msgstr "Düzenleyen" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" -msgstr "Bu yapım işi emrini veren kullanıcı" +msgstr "Bu üretim emrini düzenleyen kullanıcı" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Sorumlu" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" -msgstr "Bu yapım siparişinden sorumlu kullanıcı veya grup" +msgstr "Bu üretim emrinden sorumlu kullanıcı veya grup" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Harici Bağlantı" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Harici URL'ye bağlantı" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" -msgstr "Yapım Önceliği" +msgstr "Üretim Önceliği" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" -msgstr "Bu yapım siparişinin önceliği" +msgstr "Bu üretim emrinin önceliği" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Proje Kodu" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" -msgstr "Bu yapım siparişi için proje kodu" +msgstr "Bu üretim emri için proje kodu" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "Açık alt üretim işlemleri varken üretim emri tamamlanamaz" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "Eksik çıktılar varken üretim emri tamamlanamaz" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" -msgstr "Yapıma ayrılanları tamamlamak için boşaltma görevi başarısız oldu" +msgstr "Üretim tahsisatını tamamlamak için boşaltma görevi başarısız oldu" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" -msgstr "{build} yapım siparişi tamamlandı" +msgstr "{build} üretim emri tamamlandı" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" -msgstr "Bir yapım siparişi tamamlandı" +msgstr "Bir üretim emri tamamlandı" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "İzlenebilir parçalar için seri numaraları sağlanmalıdır" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" -msgstr "Yapım işi çıktısı belirtilmedi" +msgstr "Hiçbir üretim çıktısı belirtilmedi" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" -msgstr "Yapım işi çıktısı zaten tamamlanmış" +msgstr "Üretim çıktısı zaten tamamlanmış" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" -msgstr "Yapım işi çıktısı, yapım işi emri ile eşleşmiyor" +msgstr "Üretim çıktısı, üretim emri ile eşleşmiyor" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Miktar sıfırdan büyük olmalıdır" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Miktar çıktı miktarından büyük olamaz" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" -msgstr "Stok kalemi tüm gerekli testleri geçmedi" +msgstr "Üretim çıktısı tüm gerekli testleri geçmedi" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" -msgstr "{serial} yapım çıktısı gerekli testleri geçemedi" +msgstr "{serial} üretim çıktısı gerekli testleri geçmedi" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "Tahsis edilen stok kalemleri hâlâ üretimde" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" -msgstr "Ayrılmış öğeler varken üretim çıktısı tamamlanamaz" +msgstr "Tahsisli kalemler içeren bir üretim çıktısı kısmi olarak tamamlanamaz" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" -msgstr "Yapım Siparişi Satır Ögesi" +msgstr "Üretim Emri Satırı" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" -msgstr "Nesne yap" +msgstr "Üretim nesnesi" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,435 +1016,447 @@ msgstr "Nesne yap" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Miktar" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" -msgstr "Yapım siparişi için gereken miktar" +msgstr "Üretim emri için gereken miktar" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "Tüketilen Stok Miktarı" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" -msgstr "Ana parça izlenebilir olarak işaretlendiğinden, yapım işi çıktısı için bir yapım işi ögesi belirtmelidir" +msgstr "Ana parça izlenebilir olarak işaretlendiğinden, üretim kalemi bir üretim çıktısı belirtmelidir" -#: build/models.py:1784 -#, python-brace-format -msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" -msgstr "Ayrılan miktar ({q}) mevcut stok miktarını ({a}) aşmamalı" +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "Seçilen stok kalemi BOM satırı ile eşleşmiyor" -#: build/models.py:1805 order/models.py:2547 -msgid "Stock item is over-allocated" -msgstr "Stok kalemi fazladan tahsis edilmiş" - -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: build/models.py:1816 +#: build/models.py:1976 msgid "Quantity must be 1 for serialized stock" msgstr "Seri numaralı stok için miktar bir olmalı" -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "Seçilen stok ögesi malzeme listesi satırıyla eşleşmiyor" +#: build/models.py:1986 +#, python-brace-format +msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" +msgstr "Tahsis edilen miktar ({q}) mevcut stok miktarını ({a}) aşmamalıdır" -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "Ayrılan miktar, mevcut stok miktarını aşıyor" +#: build/models.py:2003 order/models.py:2556 +msgid "Stock item is over-allocated" +msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Stok Kalemi" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Kaynak stok kalemi" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" -msgstr "Yapım işi için tahsis edilen stok miktarı" +msgstr "Üretime tahsis edilecek stok miktarı" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" -msgstr "Kurulduğu yer" +msgstr "Kur" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Hedef stok kalemi" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" -msgstr "Yapım Düzeyi" +msgstr "Üretim Seviyesi" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Parça Adı" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Proje Kodu Etiketi" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" -msgstr "Yapım Çıktısı" +msgstr "Üretim Çıktısı" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" -msgstr "Yapım çıktısı üst yapım ile eşleşmiyor" +msgstr "Üretim çıktısı üst üretim ile eşleşmiyor" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" -msgstr "Çıktı parçası Yapım Siparişi parçası ile eşleşmiyor" +msgstr "Çıktı parçası üretim emri parçası ile eşleşmiyor" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" -msgstr "Bu yapım çıktısı zaten tamamlandı" +msgstr "Bu üretim çıktısı zaten tamamlandı" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" -msgstr "Bu yapım çıktısı tam ayrılmadı" +msgstr "Bu üretim çıktısı tam tahsis edilmedi" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" -msgstr "Yapım işi çıktısı için miktarını girin" +msgstr "Üretim çıktısının miktarını girin" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "İzlenebilir parçalar için tamsayı miktar gerekir" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" -msgstr "Malzeme listesi izlenebilir parçalar içerdiğinden tamsayı miktar gereklidir" +msgstr "Ürün ağacı izlenebilir parçalar içerdiğinden tamsayı miktar gereklidir" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Seri Numaraları" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" -msgstr "Yapım işi çıktısı için seri numaraları girin" +msgstr "Üretim çıktıları için seri numaraları girin" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" -msgstr "Yapım çıktısı için stok konumu" +msgstr "Üretim çıktısı için stok konumu" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" -msgstr "Seri Numaralarını Otomatik Ayır" +msgstr "Seri Numaralarını Otomatik Tahsis Et" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" -msgstr "Gerekli ögeleri eşleşen seri numaralarıyla otomatik ayır" +msgstr "Eşleşen seri numaralı gerekli kalemleri otomatik tahsis et" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Şu seri numaraları zaten varlar veya geçersizler" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" -msgstr "Bir yapım çıktıları listesi sağlanmalıdır" +msgstr "Bir üretim çıktıları listesi sağlanmalıdır" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Hurdaya ayrılan çıktılar için stok konumu" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Ayırmaları İptal Et" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Hurdaya ayrılan çıktılar için yapılan tüm stok ayırmalarını iptal et" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" -msgstr "Yapım çıktı(larını) hurdaya ayırma nedeni" +msgstr "Üretim çıktı(larını) hurdaya ayırma nedeni" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" -msgstr "Tamamlanan yapım çıktıları içi konum" +msgstr "Tamamlanan üretim çıktıları içi konum" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Tamamlanmamış Ayırmayı Onayla" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" -msgstr "Stok tamamen ayrılmamışsa çıktıları tamamla" +msgstr "Stok henüz tamamen tahsis edilmemşse çıktıları tamamla" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" -msgstr "Ayrılan Stoku Tüket" +msgstr "Tahsis Edilen Stoku Tüket" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" -msgstr "Bu yapım için zaten ayrılmış olan tüm stokları tüket" +msgstr "Bu üretim için zaten tahsis edilmiş olan tüm stokları tüket" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Tamamlanmamış Çıktıları Kaldır" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" -msgstr "Tamamlanmamış tüm yapım çıktılarını sil" +msgstr "Henüz tamamlanmamış tüm üretim çıktılarını sil" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "İzin verilmedi" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" -msgstr "Bu yapım siparişi tarafından tüketildi olarak kabul et" +msgstr "Bu üretim emri tarafından tüketildi olarak kabul et" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" -msgstr "Bu yapım emrini tamamlamadan önce iade et" +msgstr "Bu üretim emrini tamamlamadan önce tahsisi kaldır" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" -msgstr "Fazla Ayrılmış Stok" +msgstr "Aşırı Tahsis Edilmiş Stok" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" -msgstr "Yapım siparişine atanan ekstra stok öğelerini nasıl ele almak istersiniz" +msgstr "Üretim emrine atanan ek stok kalemlerini nasıl işlemek istersiniz" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" -msgstr "Bazı stok ögeleri fazla ayrıldı" +msgstr "Bazı stok kalemleri aşırı tahsis edilmiştir" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" -msgstr "Ayrılmamışı Kabul Et" +msgstr "Tahsis Edilmeyeni Kabul Et" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" -msgstr "Stok öğelerinin bu yapım siparişine tam olarak ayrılmadığını kabul edin" +msgstr "Stok kalemlerinin bu üretim emrine tamamen tahsis edilmediğini kabul et" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Gerekli stok tamamen tahsis edilemedi" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Tamamlanmamış Kabul et" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" -msgstr "Gerekli sayıda derleme çıktısının tamamlanmadığını kabul edin" +msgstr "Gereken miktarda üretim çıktısının tamamlanmadığını kabul et" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" -msgstr "Gerekli yapım işi miktarı tamamlanmadı" +msgstr "Gereken üretim miktarı tamamlanmadı" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" -msgstr "Yapım siparişinin açık alt yapım emirleri var" +msgstr "Üretim emrinin açık alt üretim emirleri var" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" -msgstr "Yapım siparişi üretim durumunda olmalıdır" +msgstr "Üretim emri üretim durumunda olmalıdır" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" -msgstr "Yapım siparişinin tamamlanmamış çıktıları var" +msgstr "Üretim emrinde eksik çıktılar var" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" -msgstr "Yapım Satırı" +msgstr "Üretim Satırı" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" -msgstr "Yapım çıktısı" +msgstr "Üretim çıktısı" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" -msgstr "Yapım çıktısı aynı yapımı göstermelidir" +msgstr "Üretim çıktısı aynı üretimi göstermelidir" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" -msgstr "Yapım Satırı Ögesi" +msgstr "Üretim Satırı" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" -msgstr "bom_item.part yapım siparişi aynı olan parçayı göstermelidir" +msgstr "bom_item.part üretim emri ile aynı parçayı göstermelidir" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" -msgstr "Öge stokta olmalıdır" +msgstr "Kalem stokta olmalıdır" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Mevcut miktar ({q}) aşıldı" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" -msgstr "İzlenen parçaların ayrılması için yapım çıktısı belirtilmelidir" +msgstr "İzlenen parçaların tahsisi için üretim çıktısı belirtilmelidir" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" -msgstr "İzlenmeyen parçaların ayrılması için yapım çıktısı belirlenemez" +msgstr "İzlenmeyen parçaların tahsisi için üretim çıktısı belirtilemez" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Ayrılma ögeleri sağlanmalıdır" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Parçaların alınacağı stok konumu (herhangi bir konumdan almak için boş bırakın)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" -msgstr "Konum Çıkar" +msgstr "Konumu Hariç Tut" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" -msgstr "Bu seçilen konumdan stok ögelerini içerme" +msgstr "Bu seçilen konumdan stok kalemlerini hariç tut" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Birbirinin Yerine Kullanılabilir Stok" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" -msgstr "Birden çok konumdaki stok ögeleri birbirinin yerine kullanılabilir" +msgstr "Birden fazla konumdaki stok kalemleri birbirinin yerine kullanılabilir" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Yedek Stok" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Yedek parçaların ayrılmasına izin ver" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "İsteğe Bağlı Ögeler" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" -msgstr "Sipariş yapmak için isteğe bağlı ML ögelerini ayır" +msgstr "İsteğe bağlı BOM kalemlerini üretim emrine tahsis et" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Otomatik ayırma görevini başlatma başarısız oldu" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "Tüm Ögeler" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "Takip edilmeyen kalemler" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "Takipli Kalemler" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "Kalem Türü" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "Otomatik tahsis edilecek ürün tipini seçin" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "ML Referansı" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" -msgstr "ML Parça Kimliği" +msgstr "BOM Parça ID" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "ML Parça Adı" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "Kur" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "Yap" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Tedarikçi Parçası" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" -msgstr "Ayrılan Miktar" +msgstr "Tahsis Edilen Miktar" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" -msgstr "Yapım Referansı" +msgstr "Üretim Referansı" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" -msgstr "Parça Sınıfı Adı" +msgstr "Parça Kategorisi Adı" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Takip Edilebilir" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" -msgstr "Miras Alındı" +msgstr "Devralınmış" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" -msgstr "Çeşide İzin Ver" +msgstr "Varyantlara İzin Ver" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "ML Ögesi" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Üretimde" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" -msgstr "Üretim için planlandı" +msgstr "Üretim için Planlandı" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Harici Stok" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Mevcut Stok" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Mevcut Yedek Stok" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" -msgstr "Mevcut Turev Stoku" +msgstr "Mevcut Varyant Stok" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" -msgstr "Tüketilen miktar, ayrılan miktarı aşıyor" +msgstr "Tüketilen miktar tahsis edilen miktarı aşıyor" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "Stok tüketimi için isteğe bağlı notlar" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" -msgstr "Üretim öğesi doğru üretim emrine işaret etmelidir" +msgstr "Üretim kalemi doğru üretim emrini göstermelidir" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" -msgstr "Yinelenen üretim öğesi tahsisi" +msgstr "Üretim kalemi tahsisini yinele" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" -msgstr "Üretim satırı doğru üretim emrine işaret etmelidir" +msgstr "Üretim satırı doğru üretim emrini göstermelidir" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" -msgstr "Yinelenen üretim öğesi tahsisi" +msgstr "Üretim satırı tahsisini yinele" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" -msgstr "En az bir öğe veya satır sağlanmalıdır" +msgstr "En az bir kalem veya satır sağlanmalıdır" #: build/status_codes.py:11 generic/states/tests.py:21 #: generic/states/tests.py:131 order/status_codes.py:12 @@ -1474,67 +1478,71 @@ msgstr "Beklemede" msgid "Cancelled" msgstr "İptal edildi" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Tamamlandı" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" -msgstr "Yapım siparişi için gereken stok" +msgstr "Üretim emri için gereken stok" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "Üretim emri {build} ek stok gerektiriyor" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" -msgstr "Gecikmiş Yapım Siparişi" +msgstr "Geciken Üretim Emri" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" -msgstr "{bo} yapım siparişi şimdi gecikti" +msgstr "{bo} üretim emri şimdi gecikti" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "Link Olanlar" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "Dosya Olanlar" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Kullanıcının bu ekleri silmek için izni yok" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Kullanıcının bu eki silmek için izni yok" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Geçersiz para birimi kodu" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Para birimi kodunu çoğalt" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Geçerli bir para birimi kodu sağlanmamış" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Eklenti yok" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Proje Kodu Etiketi" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Güncellendi" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Son güncellemenin zaman damgası" @@ -1546,778 +1554,778 @@ msgstr "Güncelleyen" msgid "User who last updated this object" msgstr "Bu nesneyi en son güncelleyen kullanıcı" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Eşsiz proje kodu" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Proje açıklaması" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "Bu projeden sorumlu kullanıcı veya grup" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "Ayarlar anahtarı" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Ayarlar değeri" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Seçilen değer geçerli bir seçenek değil" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Değer bir boolean değer olmalıdır" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Değer bir integer değer olmalıdır" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "Değer geçerli bir sayı olmalıdır" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "Değer doğrulama kontrollerini geçemiyor" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Anahtar dizesi benzersiz olmalı" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Kullanıcı" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" -msgstr "Fiyat düşürme miktarı" +msgstr "Fiyat kademesi miktarı" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Fiyat" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Belirtilen miktardaki birim fiyat" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Bitiş Noktası" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Bu web kancasının alındığı uç nokta" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Bu web kancası için ad" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Aktif" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" -msgstr "Bu web kancası etkin mi" +msgstr "Bu web kancası aktif mi" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Erişim için belirteç" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Gizli" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "HMAC için paylaşılan gizli bilgi" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" -msgstr "Mesaj Kimliği" +msgstr "Mesaj ID" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Bu mesaj için benzersiz tanımlayıcı" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Sağlayıcı" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Bu mesajın alındığı ana bilgisayar" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Başlık" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Bu mesajın başlığı" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Gövde" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Bu mesajın gövdesi" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "Bu mesajın alındığı uç nokta" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Üzerinde çalışıldı" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "Bu mesajdaki iş bitirildi mi?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "Kimlik" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Başlık" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Bağlantı" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Yayınlandı" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Yazar" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Özet" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Oku" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Haberi okudunuz mu?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" -msgstr "Görsel yükleyin" +msgstr "Görsel dosyası" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" -msgstr "Bu resim için hedef model türü" +msgstr "Bu görsel için hedef model türü" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" -msgstr "Bu resim için hedef model ID" +msgstr "Bu görsel için hedef model ID" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "Özel Birim" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "Birim simgesi benzersiz olmalıdır" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "Birim adı geçerli bir tanımlayıcı olmalıdır" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Birim adı" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Sembol" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "İsteğe bağlı birim simgesi" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Tanımlama" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Birim tanımlaması" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Ek" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Eksik dosya" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Bozuk dış bağlantı" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "Model türü" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" -msgstr "Resim için hedef model türü" +msgstr "Görsel için hedef model türü" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Eklenecek dosyayı seç" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Yorum" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "Ek yorumu" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Yükleme tarihi" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Dosyanın yüklendiği tarih" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Dosya Boyutu" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Bayt cinsinden dosya boyutu" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "Ek için belirtilen model türü geçersiz" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "Özel Durum" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "Özel Durumlar" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "Referans Durum Seti" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "Bu özel durum ile genişletilen durum seti" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Mantıksal anahtar" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "İş mantığında bu özel duruma eşit olan durum mantıksal anahtarı" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Değer" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "Modeller veritabanına kaydedilecek sayısal değer" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "Durumun adı" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Etiket" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "Ön yüzde gösterilecek etiket" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Renk" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "Ön yüzde gösterilecek renk" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Model" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "Bu durumun ilişkilendirildiği model" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "Model seçilmelidir" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "Anahtar Seçilmelidir" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "Mantıksal anahtar seçilmelidir" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "Anahtar, mantık anahtarından farklı olmalıdır" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "Geçerli bir referans durum sınıfı sağlanmalıdır" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "Anahtar, referans durumunun mantık anahtarlarından farklı olmalıdır" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "Mantık anahtarı, referans durumunun mantık anahtarları içinde olmalıdır" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "İsim, referans durumunun isimlerinden farklı olmalıdır" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Seçim Listesi" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "Seçim Listeleri" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "Seçim listesinin adı" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "Seçim listesinin açıklaması" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Kilitli" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "Bu seçim listesi kilitli mi?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "Bu seçim listesi kullanılabilir mi?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "Kaynak Eklentisi" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "Seçim listesini sağlayan eklenti" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "Kaynak Dize" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "Bu liste için kullanılan kaynağı belirten isteğe bağlı dize" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "Varsayılan Girdi" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "Bu seçim listesi için varsayılan girdi" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Oluşturuldu" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "Seçim listesinin oluşturulduğu tarih ve saat" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Son Güncelleme" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "Seçim listesinin son güncellendiği tarih ve saat" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "Seçim Listesi Girdisi" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "Seçim Listesi Girişleri" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "Bu girdinin ait olduğu seçim listesi" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "Seçim listesi girdisinin değeri" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "Seçim listesi girdisi için etiket" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "Seçim listesi girdisinin açıklaması" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "Bu seçim listesi girdisi aktif mi?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Parametre Şablonu" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" -msgstr "" +msgstr "Parametre Şablonları" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" -msgstr "" +msgstr "Onay kutusu parametrelerinin birimleri olamaz" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" -msgstr "" +msgstr "Onay kutusu parametrelerinin seçenekleri olamaz" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" -msgstr "" +msgstr "Seçenekler eşsiz olmalıdır" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "Parametre şablon adı benzersiz olmalıdır" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" -msgstr "" +msgstr "Bu parametre şablonu için hedef modeli türü" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" -msgstr "" +msgstr "Parametre Adı" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Birim" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" -msgstr "" +msgstr "Bu parametre için fiziksel birimler" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" -msgstr "" +msgstr "Parametre açıklaması" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" -msgstr "" +msgstr "Onay kutusu" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" -msgstr "" +msgstr "Bu parametre bir onay kutusu mu?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" -msgstr "" +msgstr "Seçenekler" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" -msgstr "" +msgstr "Bu parametre için geçerli seçenekler (virgül ile ayrılmış)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" -msgstr "" +msgstr "Bu parametre için seçim listesi" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Etkin" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "Bu parametre şablonu etkin mi?" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" -msgstr "" +msgstr "Parametre" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" -msgstr "" +msgstr "Parametreler" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" -msgstr "" +msgstr "Parametre değeri için geçersiz seçim" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "Parametre için belirtilen model türü geçersiz" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" -msgstr "" +msgstr "Model ID" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "Bu parametre için hedef modelin ID'si" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Şablon" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" -msgstr "" +msgstr "Parametre şablonu" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Veri" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" -msgstr "" +msgstr "Parametre Değeri" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Not" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" -msgstr "" +msgstr "İsteğe bağlı not alanı" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "Barkod Taraması" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "Barkod verisi" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "Barkodu taratan kullanıcı" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "Zaman damgası" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "Barkod taramasının tarihi ve saati" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "Barkodu işleyen URL uç noktası" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Bağlam" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "Barkod taraması için bağlam verisi" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "Yanıt" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "Barkod taramasından gelen yanıt verisi" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Sonuç" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "Barkod taraması başarılı mıydı?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "Bir hata oluştu" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "NVE-ER: E-posta günlüğünün silinmesi korumalı. Silmeye izin vermek için INVENTREE_PROTECT_EMAIL_LOG ayarını False olarak ayarlayın." -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "E-posta İletisi" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "E-posta İletileri" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "Duyuruldu" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "Gönderildi" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "Başarısız" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "Teslim edildi" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "Onaylandı" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "Gelen" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "Giden" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "Yanıt Yok" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "Teslimat Takibi" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "Okumayı Takip Et" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "Tıklamayı Takip Et" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" -msgstr "Global Kimlik" +msgstr "Global ID" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "Bu ileti için tanımlayıcı (harici sistem tarafından sağlanabilir)" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "Konu Kimliği" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Bu ileti konusu için tanımlayıcı (harici sistem tarafından sağlanabilir)" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "Konu" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "Bu mesaja bağlı konu" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" -msgstr "" +msgstr "Öncelik" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "E-Posta Konusu" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "E-posta Konuları" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Anahtar" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "Bu konu için benzersiz anahtar (konuyu tanımlamak için kullanılır)" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "Bu konu için benzersiz tanımlayıcı" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "Dahili Olarak Başlatıldı" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "Bu konu dahili olarak mı başlatıldı?" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "Konunun oluşturulduğu tarih ve saat" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "Konunun son güncellendiği tarih ve saat" @@ -2339,105 +2347,113 @@ msgstr "{verbose_name} iptal edildi" msgid "A order that is assigned to you was canceled" msgstr "Size atanmış bir emir iptal edildi" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" -msgstr "Alınan Ürünler" +msgstr "Teslim Alınan Kalemler" #: common/notifications.py:75 msgid "Items have been received against a purchase order" -msgstr "Bir satın alma siparişine karşılık öğeler teslim alındı" +msgstr "Kalemler, bir satın alma siparişine istinaden teslim alındı" #: common/notifications.py:82 msgid "Items have been received against a return order" -msgstr "Bir iade siparişine karşılık öğeler teslim alındı" +msgstr "Kalemler, bir iade siparişine istinaden teslim alındı" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "Bu ayarın değiştirilmesi için onay gerekip gerekmediğini gösterir" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "Bu ayar değiştirilmeden önce onay gerektirir. Lütfen değişikliği onaylayın." + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "Ayarın bir ortam değişkeni tarafından üstüne yazılıp yazılmadığını belirtir" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "Üstüne Yaz" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Çalışıyor" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Bekleyen Görevler" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Planlanan Görevler" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Başarısız Görevler" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "Görev ID" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "Benzersiz Görev ID" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Kilit" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Kilit Zamanı" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Görev Adı" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Fonksiyon" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Fonksiyon Adı" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Argümanlar" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Görev Argümanları" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Anahtar Argümanlar" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Anahtar görev argümanları" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Dosya adı" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "Model Tipi" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "Kullanıcının bu model için ek oluşturma veya düzenleme izni yok" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" -msgstr "" +msgstr "Kullanıcı bu model için parametre oluşturma veya düzenleme iznine sahip değil" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "Seçim listesi kilitli" @@ -2445,1162 +2461,1191 @@ msgstr "Seçim listesi kilitli" msgid "No group" msgstr "Grup yok" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "Site URL'si yapılandırma tarafından kilitlendi" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Yeniden başlatma gerekli" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Sunucunun yeniden başlatılmasını gerektiren bir ayar değişti" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Bekleyen taşıma işlemleri" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Bekleyen veritabanı taşıma sayısı" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "Aktif uyarı kodları" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "Aktif uyarı kodlarının bir sözlüğü" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "Örnek ID" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "Bu InvenTree örneği için benzersiz tanımlayıcı" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" -msgstr "" +msgstr "Duyuru ID" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" -msgstr "" +msgstr "Sunucu durum bilgisinde sunucu ID'sini göster (oturum açılmadan)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Sunucu Örneği adı" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Sunucu örneği için sözce (string) açıklayıcı" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Örnek adını kullan" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Örnek adını başlık çubuğunda kullan" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "`Hakkında` gösterimini kısıtla" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "`Hakkında` kipini yalnızca süper kullanıcılara göster" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Şirket adı" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Dahili şirket adı" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "Ana URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "Sunucu örneğinn temel URL'i" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Varsayılan Para Birimi" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Fiyat hesaplamaları için temel para birimini seçin" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "Desteklenen Para Birimleri" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "Desteklenen para birimi kodlarının listesi" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" -msgstr "Döviz Güncelleme Aralığı" +msgstr "Para Birimi Güncelleme Aralığı" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Döviz kurlarını şu sıklıkla güncelle (etkisizleştirmek için sıfır yapın)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "günler" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" -msgstr "Döviz Güncelleme Eklentisi" +msgstr "Para Birimi Güncelleme Eklentisi" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" -msgstr "Kullanılacak döviz güncelleme eklentisi" +msgstr "Kullanılacak para birimi güncelleme eklentisi" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "URL'den indir" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" -msgstr "Harici URL'den resim ve dosyaların indirilmesine izin ver" +msgstr "Harici URL'den uzak görseller ve dosyalar indirmeye izin ver" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "İndirme Boyutu Sınırı" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" -msgstr "Uzak resimler için izin verilebilir maksimum indirme boyutu" +msgstr "Uzak görsel için izin verilebilir maksimum indirme boyutu" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "URL'den indirmek için kullanılan kullanıcı aracısı" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" -msgstr "Harici URL'den resim ve dosya indirmek için kullanılan kullanıcı aracısını geçersiz kılmaya izin ver (varsayılan için boş bırakın)" +msgstr "Harici URL'lerden görsel ve dosya indirirken kullanılan kullanıcı aracısının (user-agent) değiştirilmesine izin ver (varsayılan için boş bırakın)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "Sıkı URL Doğrulama" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "URL'leri doğrularken şema tanımlamasını gerekli kıl" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" -msgstr "Güncelleme Denetleme Aralığı" +msgstr "Güncelleme Kontrol Aralığı" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" -msgstr "Güncellemeleri şu sıklıkla denetle (etkisizleştirmek için sıfır yapın)" +msgstr "Güncellemeleri şu sıklıkla kontrol et (etkisizleştirmek için sıfır yapın)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Otomatik Yedekleme" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Veritabanı ve ortam dosyalarını otomatik yedeklemeyi etkinleştir" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Otomatik Yedekleme Aralığı" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Otomatik yedekleme olayları arasındaki gün sayısını belirtin" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Görev Silme Aralığı" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Arkaplan görev sonuçları belirtilen gün sayısı kadar sonra silinecektir" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Hata Günlüğü Silme Aralığı" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Hata günlükleri belirtilen gün sayısı kadar sonra silinecektir" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Bildirim Silme Aralığı" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Kullanıcı bildirimleri belirtilen gün sayısı kadar sonra silinecektir" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" -msgstr "" +msgstr "E-posta Silme Aralığı" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" -msgstr "" +msgstr "E-postalar belirtilen gün sayısı sonrasında silinecektir" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" -msgstr "" +msgstr "E-posta Kaydını Koru" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" -msgstr "" +msgstr "E-posta kayıt girdilerinin silinmesini engelle" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Barkod Desteği" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Web arayüzünde barkod tarayıcı desteğini etkinleştir" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" -msgstr "" +msgstr "Barkod Sonuçlarını Depola" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" -msgstr "" +msgstr "Barkod tarama sonuçlarını veritabanına depola" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" -msgstr "" +msgstr "Maksimum Barkod Tarama Sayısı" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" -msgstr "" +msgstr "Depolanacak maksimum barkod tarama sonuçları sayısı" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Barkod Girdi Gecikmesi" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Barkod girdi işleme gecikme süresi" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Barkod Web Kamerası Desteği" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Tarayıcıda web kamerası aracılığıyla barkod taramaya izin ver" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "Barkod Verisini Göster" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "Barkod verisini tarayıcıda metin olarak görüntüle" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "Barkod Üreteci Eklentisi" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "Dahili barkod üretimi için kullanılacak eklenti" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Parça Revizyonları" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Parça için revizyon alanını etkinleştir" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "Yalnızca Montaj Revizyonu" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "Yalnızca montaj parçaları için revizyona izin ver" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "Montajdan Silmeye İzin Ver" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "Bir montajda kullanılan parçaları silmeye izin ver" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "DPN Regex" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Parça DPN eşleştirmesi için Düzenli İfade Kalıbı (Regex)" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Yinelenen DPN'ye İzin Ver" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Birden çok parçanın aynı DPN'yi paylaşmasına izin ver" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "DPN Düzenlemeye İzin Ver" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Parçayı düzenlerken DPN değiştirmeye izin ver" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Parça ML Verisini Kopyala" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Bir parçayo çoğaltırken varsayılan olarak ML verisini kopyala" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Parça Parametre Verisini Kopyala" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Bir parçayı çoğaltırken varsayılan olarak parametre verisini kopyala" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Parça Test Verisini Kopyala" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Bir parçayı çoğaltırken varsayılan olarak test verisini kopyala" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Kategori Paremetre Sablonu Kopyala" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Parça oluştururken kategori parametre şablonlarını kopyala" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Parçaları varsayılan olan şablondur" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Parçalar varsayılan olarak başka bileşenlerden monte edilebilir" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Bileşen" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Parçalar varsayılan olarak alt bileşen olarak kullanılabilir" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Satın Alınabilir" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Parçalar varsayılan olarak satın alınabilir" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Satılabilir" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Parçalar varsayılan olarak satılabilir" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Parçalar varsayılan olarak takip edilebilir" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Sanal" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Parçalar varsayılan olarak sanaldır" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "İlgili parçaları göster" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" -msgstr "Bir parça için ilgili parçaları göster" +msgstr "Bir parça için ilgili parçaları görüntüle" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Başlangıç Stok Verisi" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Yeni bir parça eklerken başlangıç stoku oluşturmaya izin ver" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" -msgstr "Başlangıç Sağlayıcı Verisi" +msgstr "İlk Tedarikçi Bilgileri" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" -msgstr "Yeni bir parça oluştururken başlangıç sağlayıcı verisi oluşturmaya izin ver" +msgstr "Yeni bir parça eklerken ilk tedarikçi bilgilerinin oluşturulmasına izin ver" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Parça Adı Görüntüleme Biçimi" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Parça adını görüntüleme biçimi" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" -msgstr "Parça Sınıfının Varsayılan Simgesi" +msgstr "Parça Kategorisi Varsayılan Simgesi" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" -msgstr "Parça sınıfı için varsayılan simge (boş bırakılırsa simge kullanılmaz)" +msgstr "Parça kategorisi için varsayılan simge (boş bırakılırsa simge kullanılmaz)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Minimum Fiyatlandırma Ondalık Basamakları" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" -msgstr "Fiiyatlandırma verisini oluştururken gösterilecek ondalık basamakların minimum sayısı" +msgstr "Fiyat verilerinde görüntülenecek maksimum ondalık hane sayısı" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Maksimum Fiyatlandırma Ondalık Basamakları" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" -msgstr "Fiiyatlandırma verisini oluştururken gösterilecek ondalık basamakların maksimum sayısı" +msgstr "Fiyat verilerinde görüntülenecek maksimum ondalık hane sayısı" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" -msgstr "Sağlayıcı Fiyatlandırmasını Kullan" +msgstr "Tedarikçi Fiyatlandırmasını Kullan" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" -msgstr "Genel fiyatlandırma hesaplamalarına sağlayıcı fiyat aralıklarını ekle" +msgstr "Tedarikçi fiyat kademelerini genel fiyat hesaplamalarına dahil et" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Satın Alma Geçmişini Geçersiz Kılma" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" -msgstr "Geçmiş satınalma siparişi fiyatlandırması, sağlayıcı fiyat aralıklarını geçersiz kılar" +msgstr "Tarihsel satın alma siparişi fiyatlandırması, tedarikçi fiyat kademelerini geçersiz kılar" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" -msgstr "Stok Ögesi Fiyatlandırmasını Kullan" +msgstr "Stok Kalemi Fiyatlandırmasını Kullan" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Fiyatlandırma hesaplamaları için elle girilen stok verisinin fiyatlandırmasını kullan" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" -msgstr "Stok Ögesi Fiyatlandırma Yaşı" +msgstr "Stok Kalemi Fiyatlandırma Süresi" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Bu gün sayısından daha eski olan stok kalemlerini fiyatlandırma hesaplamalarından hariç tut" -#: common/setting/system.py:584 -msgid "Use Variant Pricing" -msgstr "Türev Fiyatlandırması Kullan" - -#: common/setting/system.py:585 -msgid "Include variant pricing in overall pricing calculations" -msgstr "Genel fiyat hesaplamalarına türev fiyatlarını da ekle" - -#: common/setting/system.py:590 -msgid "Active Variants Only" -msgstr "Yalnızca Etkin Türevler" - -#: common/setting/system.py:592 -msgid "Only use active variant parts for calculating variant pricing" -msgstr "Türev fiyatlandırması için yalnızca etkin türev parçaları kullan" - #: common/setting/system.py:598 -msgid "Auto Update Pricing" -msgstr "" +msgid "Use Variant Pricing" +msgstr "Varyant Fiyatlandırması Kullan" -#: common/setting/system.py:600 -msgid "Automatically update part pricing when internal data changes" -msgstr "" +#: common/setting/system.py:599 +msgid "Include variant pricing in overall pricing calculations" +msgstr "Genel fiyat hesaplamalarına varyant fiyatlarını dahil et" + +#: common/setting/system.py:604 +msgid "Active Variants Only" +msgstr "Yalnızca Aktif Varyantlar" #: common/setting/system.py:606 +msgid "Only use active variant parts for calculating variant pricing" +msgstr "Varyant fiyatlandırmasını hesaplamak için yalnızca aktif varyant parçaları kullan" + +#: common/setting/system.py:612 +msgid "Auto Update Pricing" +msgstr "Fiyatlandırmayı Otomatik Güncelle" + +#: common/setting/system.py:614 +msgid "Automatically update part pricing when internal data changes" +msgstr "Dahili veri değişince parça fiyatını otomatik güncelle" + +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Fiyatlandırmayı Yeniden Oluşturma Aralığı" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Parça fiyatlandrımasının otomatik güncellenmesinden önceki gün sayısı" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Dahili Fiyatlar" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Parçalar için dahili fiyatları etkinleştir" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Dahili Fiyat Geçersiz Kılma" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Varsa, dahili fiyatlar fiyat aralığı hesaplarını geçersiz kılar" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "Malzeme listesinde sıfır miktara izin ver" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "Malzeme listesinde bir ürün için sıfır miktarın kabul edilmesini sağlar. Böylece üretim miktarından bağımsız olarak, her üretim için gerekli miktarı belirlemek amacıyla kurulum miktarı kullanılabilir" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Etiket yazdırmayı etkinleştir" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Web arayüzünden etiket yazdırmayı etkinleştir" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" -msgstr "Etiket Resmi DPI Değeri" +msgstr "Etiket Görseli DPI Değeri" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" -msgstr "Resim dosyaları üretirken etiket yazdırma eklentilerine sağlanacak DPI çözünürlüğü" +msgstr "Görsel dosyaları üretirken etiket yazdırma eklentilerine sağlanacak DPI çözünürlüğü" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Raporları Etkinleştir" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Rapor üretimini etkinleştir" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Hata Ayıklama Modu" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" -msgstr "Raporları hata ayıklama modunda üret (HTML çıktısı)" +msgstr "Raporları hata ayıklama modunda oluştur (HTML çıktısı)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "Rapor Hatalarını Günlüğe Kaydet" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "Raporlar üretirken oluşan hataları günlüğe kaydet" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Sayfa Boyutu" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "PDF raporlar için varsayılan sayfa boyutu" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Parametre Birimlerini Zorunlu Kıl" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Birimler sağlanırsa, parametre değerleri belirtilen birimlere uymalıdır" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Küresel Çapta Benzersiz Seri Numaraları" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" -msgstr "Stok ögeleri için seri numaraları küresel çapta benzersiz olmalıdır" +msgstr "Stok kalemleri için seri numaraları küresel çapta benzersiz olmalıdır" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Tükenen Stoku Sil" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" -msgstr "Bir stok ögesi tükendiğinde varsayılan davranışı belirler" +msgstr "Bir stok kalemi tükendiğinde varsayılan davranışı belirler" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Parti Kodu Şablonu" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" -msgstr "Stok ögelerine varsayılan parti kodlarını üretmek için şablon" +msgstr "Stok kalemleri için varsayılan parti kodları oluşturma şablonu" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Stok Sona Erme Tarihi" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Stokun sona erme işlevselliğini etkinleştir" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Süresi Dolan Stoku Sat" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Süresi dolan stok satışına izin ver" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Stok Eskime Süresi" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" -msgstr "Stok öğelerinin son kullanma tarihi geçmeden eskimiş sayıldığı gün sayısı" +msgstr "Stok kalemlerinin son kullanma tarihinden önce eskimiş sayılacağı gün sayısı" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" -msgstr "Yapımın Süresi Geçmiş Stoku" +msgstr "Süresi Dolmuş Stoktan Üretim" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" -msgstr "Süresi geçmiş stok ile yapıma izin ver" +msgstr "Süresi dolmuş stok ile üretime izin ver" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Stok Sahipliği Kontrolü" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" -msgstr "Stok konumu ve ögeler üzerinde sahiplik kontrolünü etkinleştirin" +msgstr "Stok konumu ve kalemleri üzerinde sahiplik kontrolünü etkinleştir" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Varsayılan Stok Konumu Simgesi" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Stok konumu için varsayılan simge (boşsa simge yok demektir)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" -msgstr "Kurulu Stok Ögelerini Göster" +msgstr "Takılı Stok Kalemlerini Göster" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" -msgstr "Stok tablolarında kurulu stok ögelerini göster" +msgstr "Stok tablolarında takılı stok kalemlerini görüntüle" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" -msgstr "Ögelerin kurulumunu yaparken ML'i kontrol et" +msgstr "Kalemlerin kurulumunu yaparken BOM'u kontrol et" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" -msgstr "Kurulu stok ögeleri üst parçanın ML'nde mevcut olmalıdır" +msgstr "Takılı stok kalemleri üst parçanın BOM listesinde mevcut olmalıdır" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "Stok Dışı Aktarıma İzin Ver" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" -msgstr "Stokta olmayan ögelerin stok konumları arasında aktarılmasına izin ver" +msgstr "Stokta olmayan kalemlerin stok konumları arasında aktarılmasına izin ver" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" -msgstr "Yapım Siparişi Referans Kalıbı" +msgstr "Üretim Emri Referans Şablonu" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" -msgstr "Yapım Siparişi referans alanını üretmek için gerekli kalıp" +msgstr "Üretim emri referans alanını üretmek için gerekli şablon" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "Sorumlu Sahip Gerektir" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "Her siparişe sorumlu bir yetkili atanmalıdır." -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" -msgstr "Aktif Parça Gerekli" +msgstr "Aktif Parça Gerektirir" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" -msgstr "Etkin olmayan parçalar için yapı sırası oluşturulmasını önleyin." +msgstr "Pasif parçalarla üretim emri oluşturmayı engelle" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "Kilitli Parça Gerekli" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" -msgstr "Kilitlenmemiş parçalar için yapı sırası oluşturulmasını engelle." +msgstr "Kilidi açılmış parçalarla üretim emri oluşturmayı engelle" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "Geçerli BOM gereklidir." -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" -msgstr "BOM doğrulanmadan yapı sırası oluşturulmasını engelle." +msgstr "BOM henüz doğrulanmadan üretim emri oluşturmayı engelle" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "Kapalı Alt Siparişler Gerekli" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" -msgstr "Tüm alt siparişler kapatılana kadar yapı sırası tamamlanmasını engelle." +msgstr "Tüm alt emirler kapatılana kadar üretim emrini tamamlamayı engelle" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" -msgstr "" +msgstr "Harici Üretim Emirleri" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" -msgstr "" +msgstr "Harici üretim emri işlevselliğini etkinleştir" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "Testler Geçene Kadar Engelle" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" -msgstr "Tüm gerekli testler geçene kadar yapı çıktıları tamamlanmasını engelle" +msgstr "Tüm gerekli testler geçene kadar üretim çıktılarını tamamlamayı engelle" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "İade Siparişlerini Etkinleştir" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" -msgstr "Kullanıcı arayüzünde iade siparişi işlevselliğini etkinleştirin." +msgstr "Kullanıcı arayüzünde iade siparişi işlevselliğini etkinleştir" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Kullanıcı arayüzünde iade siparişi işlevselliğini etkinleştirin." -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "İade Sipariş referans alanı oluşturmak için gerekli desen" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Tamamlanan İade Siparişlerini Düzenle" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" -msgstr "Tamamlandıktan sonra iade emirlerini düzenlemeye izin ver" +msgstr "Tamamlandıktan sonra iade siparişlerini düzenlemeye izin ver" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Satış Siparişi Referans Şablonu" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Satış Siparişi referans alanını üretmek için gerekli şablon" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Satış Siparişi Varsayılan Gönderi" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Satış siparişleriyle varsayılan gönderi oluşturmayı etkinleştir" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" -msgstr "Tamamlanmış Satış Siparişini Düzenle" +msgstr "Tamamlanmış Satış Siparişlerini Düzenle" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Gönderilen veya tamamlanan satış siparişlerini düzenlemeye izin ver" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" -msgstr "" +msgstr "Kontrol Gerektiren Gönderi" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" -msgstr "" +msgstr "Kalemler kontrol edilene dek gönderilerin tamamlanmasını engelle" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "Gönderilen Siparişleri Tamamlandı Olarak İmle" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" -msgstr "Gönderildi olarak imlenen satış siparişleri \"gönderildi\" durumu atlanarak otomatik olarak tamamlanacaktır" +msgstr "Gönderildi olarak işaretli satış siparişleri \"gönderildi\" durumu atlanarak otomatik olarak tamamlanacaktır" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Satın Alma Siparişi Referans Şablonu" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Satın Alma Siparişi referans alanını üretmek için gerekli şablon" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Tamamlanan Satın Alma Siparişlerini Düzenle" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Gönderildikten veya tamamlandıktan sonra satın alma siparişlerini düzenlemeye izin ver" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" -msgstr "" +msgstr "Para Birimini Dönüştür" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" -msgstr "" +msgstr "Stok alınırken kalem değerini temel para birimine dönüştür" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Satın Alma Siparişlerini Otomatik Tamamla" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" -msgstr "Tüm satır ögeleri alındığında satın alma siparişini otomatikmen tamamlandı olarak imle" +msgstr "Tüm satırlar alındığında satın alma siparişini otomatikmen tamamlandı olarak işaretle" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" -msgstr "Şifreyi unuttumu etkinleştir" +msgstr "Şifremi unuttum seçeneğini etkinleştir" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Giriş yapma sayfasında şifremi unuttum işlevini etkinleştir" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Kayıt olmayı etkinleştir" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Giriş yapma sayfalarında kullanıcılar için kendini kaydetme işlevini etkinleştir" -#: common/setting/system.py:922 -msgid "Enable SSO" -msgstr "" - -#: common/setting/system.py:923 -msgid "Enable SSO on the login pages" -msgstr "" - -#: common/setting/system.py:928 -msgid "Enable SSO registration" -msgstr "" - -#: common/setting/system.py:930 -msgid "Enable self-registration via SSO for users on the login pages" -msgstr "" - -#: common/setting/system.py:936 -msgid "Enable SSO group sync" -msgstr "" - -#: common/setting/system.py:938 -msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" -msgstr "" - #: common/setting/system.py:944 -msgid "SSO group key" -msgstr "" +msgid "Enable SSO" +msgstr "SSO Etkinleştir" #: common/setting/system.py:945 -msgid "The name of the groups claim attribute provided by the IdP" -msgstr "" +msgid "Enable SSO on the login pages" +msgstr "Kullanıcı girişi sayfalarında SSO etkinleştir" #: common/setting/system.py:950 -msgid "SSO group map" -msgstr "" +msgid "Enable SSO registration" +msgstr "SSO ile kayıt olmayı etkinleştir" #: common/setting/system.py:952 +msgid "Enable self-registration via SSO for users on the login pages" +msgstr "Giriş yapma sayfalarında kullanıcılar için SSO ile kendini kaydetmeyi etkinleştir" + +#: common/setting/system.py:958 +msgid "Enable SSO group sync" +msgstr "SSO grup eşitlemeyi etkinleştir" + +#: common/setting/system.py:960 +msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" +msgstr "InvenTree gruplarını IdP tarafından sağlanan gruplar ile eşitlemeyi etkinleştir" + +#: common/setting/system.py:966 +msgid "SSO group key" +msgstr "SSO grup anahtarı" + +#: common/setting/system.py:967 +msgid "The name of the groups claim attribute provided by the IdP" +msgstr "IdP tarafından sağlanan talep özniteliğinin adı" + +#: common/setting/system.py:972 +msgid "SSO group map" +msgstr "SSO grup haritası" + +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "SSO gruplarından yerel InvenTree gruplarına bir eşleme. Yerel grup yoksa, oluşturulacaktır." -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" -msgstr "" +msgstr "SSO dışındaki grupları kaldır" -#: common/setting/system.py:960 +#: common/setting/system.py:982 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 "" +msgstr "IdP arka ucu tarafından olmayan, kullanıcıya atanmış grupların kaldırılıp kaldırılmayacağı. Bu ayarı etkisizleştirmek güvenlik sorunlarına neden olabilir" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "E-posta Gerekir" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" -msgstr "" +msgstr "Üyelik sırasında kullanıcının eposta sağlamasını gerektir" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" -msgstr "" +msgstr "SSO kullanıcıları otomatik doldur" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Kullanıcı ayrıntılarını TOA hesabı verisinden otomatik olarak doldur" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Postayı iki kez gir" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Hesap oluştururken kullanıcıların postalarını iki kez girmelerini iste" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Şifreyi iki kez gir" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Hesap oluştururken kullanıcıların şifrelerini iki kez girmesini iste" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Alanlara izin ver" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Belirli alanlara hesap açmayı kısıtla (virgülle ayrılmış, @ ile başlayan)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Hesap oluştururken grup" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "Yeni kullanıcıların kayıt sırasında atanacağı grup. Eğer TOA grup eşitlemesi etkinse, yalnızca ıdP'den hiçbir grup atanamazsa bu grup ayarlanır." -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "ÇFKD'yi Zorunlu Kıl" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Kullanıcıların çok faktörlü kimlik doğrulamasını kullanması gerekmektedir." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "Bu ayarı etkinleştirmek, tüm kullanıcıların çok faktörlü kimlik doğrulamayı ayarlamasını gerektirecektir. Tüm oturumlar hemen kapatılacaktır." + +#: common/setting/system.py:1039 msgid "Check plugins on startup" -msgstr "" +msgstr "Başlangıçta eklentileri kontrol et" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" -msgstr "" +msgstr "Başlangıçta tüm eklentilerin kurulmuş olduğunu kontrol et - konteyner ortamlarında etkinleştir" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" -msgstr "" - -#: common/setting/system.py:1022 -msgid "Enable periodic checks for updates to installed plugins" -msgstr "" - -#: common/setting/system.py:1028 -msgid "Enable URL integration" -msgstr "" - -#: common/setting/system.py:1029 -msgid "Enable plugins to add URL routes" -msgstr "URL yönlendirmesi eklemek için eklentileri etkinleştirin" - -#: common/setting/system.py:1035 -msgid "Enable navigation integration" -msgstr "" - -#: common/setting/system.py:1036 -msgid "Enable plugins to integrate into navigation" -msgstr "" - -#: common/setting/system.py:1042 -msgid "Enable app integration" -msgstr "" - -#: common/setting/system.py:1043 -msgid "Enable plugins to add apps" -msgstr "" +msgstr "Eklenti güncellemelerini kontrol et" #: common/setting/system.py:1049 -msgid "Enable schedule integration" -msgstr "" +msgid "Enable periodic checks for updates to installed plugins" +msgstr "Kurulu eklentiler için periyodik güncelleme kontrolünü etkinleştir" -#: common/setting/system.py:1050 -msgid "Enable plugins to run scheduled tasks" -msgstr "" +#: common/setting/system.py:1055 +msgid "Enable URL integration" +msgstr "URL entegrasyonunu etkinleştir" #: common/setting/system.py:1056 -msgid "Enable event integration" -msgstr "" +msgid "Enable plugins to add URL routes" +msgstr "URL yönlendirmesi eklemek için eklentileri etkinleştir" -#: common/setting/system.py:1057 +#: common/setting/system.py:1062 +msgid "Enable navigation integration" +msgstr "Gezinti entegrasyonunu etkinleştir" + +#: common/setting/system.py:1063 +msgid "Enable plugins to integrate into navigation" +msgstr "Eklentilerin gezintiye entegre edilmesini etkinleştir" + +#: common/setting/system.py:1069 +msgid "Enable app integration" +msgstr "Uygulama entegrasyonunu etkinleştir" + +#: common/setting/system.py:1070 +msgid "Enable plugins to add apps" +msgstr "Uygulamalar eklemek için eklentileri etkinleştir" + +#: common/setting/system.py:1076 +msgid "Enable schedule integration" +msgstr "Zamanlama entegrasyonunu etkinleştir" + +#: common/setting/system.py:1077 +msgid "Enable plugins to run scheduled tasks" +msgstr "Zamanlanmış görevleri çalıştırmak için eklentileri etkinleştir" + +#: common/setting/system.py:1083 +msgid "Enable event integration" +msgstr "Olay entegrasyonunu etkinleştir" + +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Eklentilerin olaylara yanıt verebilmesini etkinleştirin" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" -msgstr "" - -#: common/setting/system.py:1064 -msgid "Enable plugins to integrate into the user interface" -msgstr "" - -#: common/setting/system.py:1070 -msgid "Enable mail integration" -msgstr "" - -#: common/setting/system.py:1071 -msgid "Enable plugins to process outgoing/incoming mails" -msgstr "" - -#: common/setting/system.py:1077 -msgid "Enable project codes" -msgstr "" - -#: common/setting/system.py:1078 -msgid "Enable project codes for tracking projects" -msgstr "" - -#: common/setting/system.py:1083 -msgid "Enable Stock History" -msgstr "" - -#: common/setting/system.py:1085 -msgid "Enable functionality for recording historical stock levels and value" -msgstr "" +msgstr "Arayüz entegrasyonunu etkinleştir" #: common/setting/system.py:1091 +msgid "Enable plugins to integrate into the user interface" +msgstr "Eklentilerin kullanıcı arayüzüne entegre olmasını etkinleştir" + +#: common/setting/system.py:1097 +msgid "Enable mail integration" +msgstr "Posta entegrasyonunu etkinleştir" + +#: common/setting/system.py:1098 +msgid "Enable plugins to process outgoing/incoming mails" +msgstr "Eklentilerin giden/gelen postaları işlemesini etkinleştir" + +#: common/setting/system.py:1104 +msgid "Enable project codes" +msgstr "Proje kodlarını etkinleştir" + +#: common/setting/system.py:1105 +msgid "Enable project codes for tracking projects" +msgstr "Projeleri izlemek için proje kodlarını etkinleştir" + +#: common/setting/system.py:1110 +msgid "Enable Stocktake" +msgstr "Stok Sayımını Etkinleştir" + +#: common/setting/system.py:1112 +msgid "Enable functionality for recording historical stock levels and value" +msgstr "Geçmiş stok seviyelerini ve değerini kaydetme işlevini etkinleştir" + +#: common/setting/system.py:1118 msgid "Exclude External Locations" -msgstr "" +msgstr "Harici Konumları Hariç Tut" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" -msgstr "" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "Harici konumlardaki stok kalemlerini stok geçmişi hesaplamalarının dışında tut" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" -msgstr "" +msgstr "Otomatik Stok Sayımı Periyodu" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" -msgstr "" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" +msgstr "Otomatik stok geçmişi kaydı arasındaki gün sayısı" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "Kullancıların tam isimlerini göster" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" -msgstr "" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" +msgstr "Eski Stok Geçmişi Girdilerini Sil" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" -msgstr "" +msgid "Delete stocktake entries older than the specified number of days" +msgstr "Belirtilen gün sayısından daha eski stok geçmişi girdilerini sil" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" -msgstr "" +msgid "Stocktake Deletion Interval" +msgstr "Stok Geçmişi Silme Aralığı" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "Stok geçmişi girdileri belirtilen gün sayısı sonrasında silinecektir" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "Eski Stok Geçmişi Girdilerini Sil" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "Belirtilen gün sayısından daha eski stok geçmişi girdilerini sil" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "Stok Geçmişi Silme Aralığı" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "Stok geçmişi girdileri belirtilen gün sayısı sonrasında silinecektir" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "Kullancıların tam isimlerini görüntüle" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Kullanıcı adı yerine kullanıcıların tam adlarını görüntüle" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "Kullanıcı Profillerini Göster" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "Kullanıcıların Profillerini kendi profil sayfalarında göster" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "Test İstasyon Verisini Etkinleştir" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "Test sonuçları için test istasyonundan veri toplamayı etkinleştir" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "Makine Pingini Etkinleştir" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" -msgstr "" +msgstr "Durumlarını kontrol etmek için kayıtlı makinelerin periyodik ping görevini etkinleştir" #: common/setting/user.py:23 msgid "Inline label display" -msgstr "" +msgstr "Satır içi etiket görüntüleme" #: common/setting/user.py:25 msgid "Display PDF labels in the browser, instead of downloading as a file" -msgstr "" +msgstr "PDF etiketleri bir dosya olarak indirmek yerine tarayıcıda görüntüle" #: common/setting/user.py:31 msgid "Default label printer" -msgstr "" +msgstr "Varsayılan etiket yazıcı" #: common/setting/user.py:32 msgid "Configure which label printer should be selected by default" -msgstr "" +msgstr "Hangi etiket yazıcının varsayılan olarak seçilmesi gerektiğini yapılandır" #: common/setting/user.py:37 msgid "Inline report display" -msgstr "" +msgstr "Satır içi rapor görüntüleme" #: common/setting/user.py:39 msgid "Display PDF reports in the browser, instead of downloading as a file" -msgstr "" +msgstr "PDF raporları bir dosya olarak indirmek yerine tarayıcıda görüntüle" #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "Form Alanlarında Barkod Tarayıcı" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "Form alanlarında barkod tarayıcı girişine izin ver" #: common/setting/user.py:51 msgid "Search Parts" @@ -3608,7 +3653,7 @@ msgstr "Parça Ara" #: common/setting/user.py:52 msgid "Display parts in search preview window" -msgstr "Parçaları arama ön izleme penceresinde görüntüle" +msgstr "Parçaları arama önizleme penceresinde görüntüle" #: common/setting/user.py:57 msgid "Search Supplier Parts" @@ -3616,7 +3661,7 @@ msgstr "Parça Tedarikçilerini Ara" #: common/setting/user.py:58 msgid "Display supplier parts in search preview window" -msgstr "" +msgstr "Tedarikçi parçalarını arama önizleme penceresinde görüntüle" #: common/setting/user.py:63 msgid "Search Manufacturer Parts" @@ -3624,39 +3669,39 @@ msgstr "Parça Üreticilerini Ara" #: common/setting/user.py:64 msgid "Display manufacturer parts in search preview window" -msgstr "" +msgstr "Üretici parçalarını arama önizleme penceresinde görüntüle" #: common/setting/user.py:69 msgid "Hide Inactive Parts" -msgstr "Aktif olmayan parçaları gizle" +msgstr "Pasif Parçaları Gizle" #: common/setting/user.py:70 msgid "Excluded inactive parts from search preview window" -msgstr "" +msgstr "Arama önizleme penceresinden hariç tutulan pasif parçalar" #: common/setting/user.py:75 msgid "Search Categories" -msgstr "" +msgstr "Kategorileri Ara" #: common/setting/user.py:76 msgid "Display part categories in search preview window" -msgstr "" +msgstr "Parça kategorilerini arama önizleme penceresinde görüntüle" #: common/setting/user.py:81 msgid "Search Stock" -msgstr "" +msgstr "Stoku Ara" #: common/setting/user.py:82 msgid "Display stock items in search preview window" -msgstr "" +msgstr "Stok kalemlerini arama önizleme penceresinde görüntüle" #: common/setting/user.py:87 msgid "Hide Unavailable Stock Items" -msgstr "" +msgstr "Var Olmayan Stok Kalemlerini Gizle" #: common/setting/user.py:89 msgid "Exclude stock items which are not available from the search preview window" -msgstr "" +msgstr "Var olmayan stok kalemlerini arama önizleme penceresinden hariç tut" #: common/setting/user.py:95 msgid "Search Locations" @@ -3664,7 +3709,7 @@ msgstr "Konum Ara" #: common/setting/user.py:96 msgid "Display stock locations in search preview window" -msgstr "" +msgstr "Stok konumlarını arama önizleme penceresinde görüntüle" #: common/setting/user.py:101 msgid "Search Companies" @@ -3672,11 +3717,11 @@ msgstr "Şirketleri Ara" #: common/setting/user.py:102 msgid "Display companies in search preview window" -msgstr "" +msgstr "Şirketleri arama önizleme penceresinde görüntüle" #: common/setting/user.py:107 msgid "Search Build Orders" -msgstr "" +msgstr "Üretim Emirlerini Ara" #: common/setting/user.py:108 msgid "Display build orders in search preview window" @@ -3684,7 +3729,7 @@ msgstr "Üretim emirlerini arama önizleme penceresinde görüntüle" #: common/setting/user.py:113 msgid "Search Purchase Orders" -msgstr "Satınalma Emri Ara" +msgstr "Satın Alma Siparişlerini Ara" #: common/setting/user.py:114 msgid "Display purchase orders in search preview window" @@ -3692,79 +3737,79 @@ msgstr "Satın alma siparişlerini arama önizleme penceresinde görüntüle" #: common/setting/user.py:119 msgid "Exclude Inactive Purchase Orders" -msgstr "Etkin Olmayan Satın Alma Siparişlerini Hariç Tut" +msgstr "Pasif Satın Alma Siparişlerini Hariç Tut" #: common/setting/user.py:120 msgid "Exclude inactive purchase orders from search preview window" -msgstr "" +msgstr "Pasif satın alma siparişlerini arama önizleme penceresinden hariç tut" #: common/setting/user.py:125 msgid "Search Sales Orders" -msgstr "" +msgstr "Satış Siparişlerini Ara" #: common/setting/user.py:126 msgid "Display sales orders in search preview window" -msgstr "" +msgstr "Satış siparişlerini arama önizleme penceresinde görüntüle" #: common/setting/user.py:131 msgid "Exclude Inactive Sales Orders" -msgstr "" +msgstr "Pasif Satın Alma Siparişlerini Hariç Tut" #: common/setting/user.py:132 msgid "Exclude inactive sales orders from search preview window" -msgstr "" +msgstr "Pasif satın alma siparişlerini arama önizleme penceresinden hariç tut" #: common/setting/user.py:137 msgid "Search Sales Order Shipments" -msgstr "" +msgstr "Satış Siparişi Gönderilerini Ara" #: common/setting/user.py:138 msgid "Display sales order shipments in search preview window" -msgstr "" +msgstr "Satış siparişi gönderilerini arama önizleme penceresinde görüntüle" #: common/setting/user.py:143 msgid "Search Return Orders" -msgstr "" +msgstr "İade Siparişlerini Ara" #: common/setting/user.py:144 msgid "Display return orders in search preview window" -msgstr "" +msgstr "İade siparişlerini arama önizleme penceresinde görüntüle" #: common/setting/user.py:149 msgid "Exclude Inactive Return Orders" -msgstr "" +msgstr "Pasif İade Siparişlerini Hariç Tut" #: common/setting/user.py:150 msgid "Exclude inactive return orders from search preview window" -msgstr "" +msgstr "Pasif iade siparişlerini arama önizleme penceresinden hariç tut" #: common/setting/user.py:155 msgid "Search Preview Results" -msgstr "" +msgstr "Arama Önizleme Sonuçları" #: common/setting/user.py:157 msgid "Number of results to show in each section of the search preview window" -msgstr "" +msgstr "Arama önizleme penceresinin her bir bölümünde gösterilecek sonuç sayısı" #: common/setting/user.py:163 msgid "Regex Search" -msgstr "" +msgstr "Regex Arama" #: common/setting/user.py:164 msgid "Enable regular expressions in search queries" -msgstr "" +msgstr "Arama sorgularında düzenli ifadeleri etkinleştir" #: common/setting/user.py:169 msgid "Whole Word Search" -msgstr "" +msgstr "Tam Kelime Arama" #: common/setting/user.py:170 msgid "Search queries return results for whole word matches" -msgstr "" +msgstr "Arama sorguları, tam kelime eşleşmeleri için sonuçlar döndürür" #: common/setting/user.py:175 msgid "Search Notes" -msgstr "" +msgstr "Notları Ara" #: common/setting/user.py:177 msgid "Search queries return results for matches from the item's notes" @@ -3772,11 +3817,11 @@ msgstr "Arama sorguları, nesnenin notlarındaki eşleşmelere ilişkin sonuçla #: common/setting/user.py:183 msgid "Escape Key Closes Forms" -msgstr "" +msgstr "Esc Tuşu Formları Kapatır" #: common/setting/user.py:184 msgid "Use the escape key to close modal forms" -msgstr "" +msgstr "Açılır formları kapatmak için ESC tuşunu kullanın" #: common/setting/user.py:189 msgid "Fixed Navbar" @@ -3784,31 +3829,31 @@ msgstr "Navigasyon Çubuğunu Sabitle" #: common/setting/user.py:190 msgid "The navbar position is fixed to the top of the screen" -msgstr "" +msgstr "Gezinti çubuğu konumu ekranın üstüne sabitlenir" #: common/setting/user.py:195 msgid "Fixed Table Headers" -msgstr "" +msgstr "Sabit Tablo Başlıkları" #: common/setting/user.py:196 msgid "Table headers are fixed to the top of the table" -msgstr "" +msgstr "Tablo başlıkları tablonun üstüne sabitlenir" #: common/setting/user.py:201 msgid "Show Spotlight" -msgstr "" +msgstr "Hızlı Aramayı Göster" #: common/setting/user.py:202 msgid "Enable spotlight navigation functionality" -msgstr "" +msgstr "Hızlı arama gezinti işlevselliğini etkinleştir" #: common/setting/user.py:207 msgid "Navigation Icons" -msgstr "" +msgstr "Gezinti Simgeleri" #: common/setting/user.py:208 msgid "Display icons in the navigation bar" -msgstr "" +msgstr "Gezinti çubuğunda simgeleri göster" #: common/setting/user.py:213 msgid "Date Format" @@ -3816,499 +3861,503 @@ msgstr "Tarih Biçimi" #: common/setting/user.py:214 msgid "Preferred format for displaying dates" -msgstr "" +msgstr "Tarihleri görüntülemek için tercih edilen biçim" #: common/setting/user.py:227 msgid "Show Stock History" -msgstr "" +msgstr "Stok Geçmişini Göster" #: common/setting/user.py:228 msgid "Display stock history information in the part detail page" -msgstr "" +msgstr "Parça ayrıntısı sayfasında stok geçmişi bilgisini görüntüle" #: common/setting/user.py:233 msgid "Show Last Breadcrumb" -msgstr "" +msgstr "Son Gezinti Yolunu Göster" #: common/setting/user.py:234 msgid "Show the current page in breadcrumbs" -msgstr "" +msgstr "Şimdiki sayfayı gezinti yollarında göster" #: common/setting/user.py:239 msgid "Show full stock location in tables" -msgstr "" +msgstr "Tablolarda tam stok konumunu göster" #: common/setting/user.py:241 msgid "Disabled: The full location path is displayed as a hover tooltip. Enabled: The full location path is displayed as plain text." -msgstr "" +msgstr "Devre dışı: Tam konumun yolu fareyle üzerine gelindiğinde bir araç ipucu olarak görüntülenir. Etkin: Tam konumun yolu düz metin olarak görüntülenir." #: common/setting/user.py:247 msgid "Show full part categories in tables" -msgstr "" +msgstr "Tablolarda tam parça kategorilerini göster" #: common/setting/user.py:249 msgid "Disabled: The full category path is displayed as a hover tooltip. Enabled: The full category path is displayed as plain text." -msgstr "" +msgstr "Devre dışı: Tam kategori yolu fareyle üzerine gelindiğinde bir araç ipucu olarak görüntülenir. Etkin: Tam kategori yolu düz metin olarak görüntülenir." #: common/setting/user.py:255 msgid "Receive error reports" -msgstr "" +msgstr "Hata raporları alın" #: common/setting/user.py:256 msgid "Receive notifications for system errors" -msgstr "" +msgstr "Sistem hataları için bildirim alın" #: common/setting/user.py:261 msgid "Last used printing machines" -msgstr "" +msgstr "Son kullanılan yazdırma makineleri" #: common/setting/user.py:262 msgid "Save the last used printing machines for a user" -msgstr "" +msgstr "Son kullanılan yazdırma makinelerini bir kullanıcı için kaydet" #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "Tüm modeller" #: common/validators.py:63 msgid "No attachment model type provided" -msgstr "" +msgstr "Ekli model türü sağlanamadı" #: common/validators.py:69 msgid "Invalid attachment model type" -msgstr "" +msgstr "Geçersiz ek modeli türü" #: common/validators.py:110 msgid "Minimum places cannot be greater than maximum places" -msgstr "" +msgstr "Minimum yer sayısı maksimum yer sayısından fazla olamaz" #: common/validators.py:122 msgid "Maximum places cannot be less than minimum places" -msgstr "" +msgstr "Maksimum yer sayısı minimum yer sayısından az olamaz" #: common/validators.py:133 msgid "An empty domain is not allowed." -msgstr "" +msgstr "Boş bir alan adına izin verilmez." #: common/validators.py:135 #, python-brace-format msgid "Invalid domain name: {domain}" -msgstr "" +msgstr "Geçersiz alan adı: {domain}" #: common/validators.py:151 msgid "Value must be uppercase" -msgstr "" +msgstr "Değer büyük harf olmalıdır" #: common/validators.py:157 msgid "Value must be a valid variable identifier" -msgstr "" +msgstr "Değer geçerli bir değişken tanımlayıcısı olmalıdır" #: company/api.py:141 msgid "Part is Active" -msgstr "" +msgstr "Parça Aktif" #: company/api.py:145 msgid "Manufacturer is Active" -msgstr "" - -#: company/api.py:246 -msgid "Supplier Part is Active" -msgstr "" +msgstr "Üretici Aktif" #: company/api.py:250 +msgid "Supplier Part is Active" +msgstr "Tedarikçi Parçası Aktif" + +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "Ana Tedarikçi Parçası" + +#: company/api.py:256 msgid "Internal Part is Active" -msgstr "" +msgstr "Dahili Parça Aktif" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" -msgstr "" +msgstr "Tedarikçi Aktif" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Üretici" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Şirket" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" -msgstr "" +msgstr "Stoku Var" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Şirketler" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" -msgstr "" +msgstr "Şirket açıklaması" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" -msgstr "" +msgstr "Şirketin açıklaması" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "İnternet Sitesi" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" -msgstr "Şirket web sitesi" +msgstr "Şirketin web sitesi" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Telefon numarası" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "İletişim telefon numarası" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "İletişim e-posta adresi" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "İletişim" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" -msgstr "" +msgstr "İlgili kişi" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" -msgstr "" +msgstr "Harici şirket bilgisine bağlantı" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" -msgstr "" +msgstr "Bu şirket aktif mi?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "Müşteri sitesi" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Bu şirkete ürün satıyor musunuz?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" -msgstr "" +msgstr "Tedarikçi mi" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Bu şirketten ürün satın alıyor musunuz?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" -msgstr "" +msgstr "Üretici mi" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" -msgstr "Bu şirket üretim yapıyor mu?" +msgstr "Bu şirket parça üretiyor mu?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Bu şirket için varsayılan para birimi" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" -msgstr "" +msgstr "Vergi Numarası" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" -msgstr "" +msgstr "Şirket Vergi Numarası" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Adres" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Adres" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Şirket Seç" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Adres Adı" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" -msgstr "" +msgstr "Adres girdisini açıklayan başlık" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Birincil Adres" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Birincil adres olarak ayarla" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "1. Satır" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "1. Adres Satırı" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "2. Satır" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "2. Adres Satırı" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Posta Kodu" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Şehir/Bölge" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" -msgstr "" +msgstr "Posta kodu şehir/bölge" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" -msgstr "" +msgstr "Eyalet/İlçe" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" -msgstr "" +msgstr "Eyalet veya ilçe" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" -msgstr "" +msgstr "Ülke" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" -msgstr "" +msgstr "Adres ülkesi" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" -msgstr "" +msgstr "Sevkiyat taşıyıcısı için notlar" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" -msgstr "" +msgstr "Sevkiyat taşıyıcısı için notlar" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" -msgstr "" +msgstr "Dahili sevkiyet notları" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" -msgstr "" +msgstr "Dahili kullanım için sevkiyat notları" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" -msgstr "" +msgstr "Adres bilgisine bağlantı (harici)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" -msgstr "" +msgstr "Üretici Parçası" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Temel Parça" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Parça seçin" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Üretici seçin" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "ÜPN" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Üretici Parça Numarası" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" -msgstr "" +msgstr "Harici üretici bağlantısı için URL" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Parça üreticisi açıklaması" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" -msgstr "" +msgstr "Paket birimleri, temel parça birimleriyle uyumlu olmalıdır" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" -msgstr "" +msgstr "Paket birimleri sıfırdan büyük olmalıdır" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" -msgstr "" +msgstr "Bağlantılı üretici parçası aynı temel parçayı referans almalıdır" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Tedarikçi" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Tedarikçi seçin" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" -msgstr "" - -#: company/models.py:777 -msgid "Is this supplier part active?" -msgstr "Bu parça üreticisi aktif mi?" +msgstr "Tedarikçi stok kodu" #: company/models.py:787 +msgid "Is this supplier part active?" +msgstr "Bu tedarikçi parçası aktif mi?" + +#: company/models.py:792 +msgid "Primary" +msgstr "Ana" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "Bu, bağlı parça için birincil tedarikçi ürünü mü?" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Parça üreticisi seç" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" -msgstr "" +msgstr "Harici tedarikçi parçası bağlantısı için URL" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" -msgstr "" +msgstr "Tedarikçi parçası açıklaması" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "temel maliyet" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" -msgstr "" +msgstr "Minimum ücret (örneğin stoklama ücreti)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Paketleme" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" -msgstr "" +msgstr "Parça paketleme" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" -msgstr "" +msgstr "Paket Miktarı" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." -msgstr "" +msgstr "Tek bir pakette tedarik edilen toplam miktar. Tekli ürünler için boş bırakın." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "çoklu" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" -msgstr "" +msgstr "Birden fazla sipariş ver" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" -msgstr "" +msgstr "Tedarikçiden temin edilebilir miktar" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" -msgstr "" +msgstr "Temin Edilebilir Miktar Güncellendi" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" -msgstr "" +msgstr "Temin edilebilirlik verisinin güncellendiği son tarih" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" -msgstr "" +msgstr "Tedarikçi Fiyat Kademesi" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" -msgstr "" +msgstr "Bu tedarikçi için kullanılan varsayılan para birimi" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" -msgstr "" +msgstr "Şirket Adı" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" -msgstr "" +msgstr "Stokta" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" -msgstr "" +msgstr "Fiyat Kademeleri" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" -msgstr "" +msgstr "Veri dışa aktarma sırasında hata oluştu" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" -msgstr "" +msgstr "Veri dışa aktarma eklentisi yanlış veri biçimi döndürdü" #: data_exporter/serializers.py:73 msgid "Export Format" -msgstr "" +msgstr "Dışa Aktarma Biçimi" #: data_exporter/serializers.py:74 msgid "Select export file format" -msgstr "" +msgstr "Çıktı dosyası biçimi seçin" #: data_exporter/serializers.py:81 msgid "Export Plugin" -msgstr "" +msgstr "Dışa Aktarma Eklentisi" #: data_exporter/serializers.py:82 msgid "Select export plugin" -msgstr "" +msgstr "Dışa aktarma eklentisi seçin" #: generic/states/fields.py:146 msgid "Additional status information for this item" -msgstr "" +msgstr "Bu kalem için ek durum bilgisi" #: generic/states/fields.py:160 msgid "Custom status key" -msgstr "" +msgstr "Özel durum anahtarı" #: generic/states/serializers.py:26 msgid "Custom" -msgstr "" +msgstr "Özel" #: generic/states/serializers.py:37 msgid "Class" -msgstr "" +msgstr "Sınıf" #: generic/states/serializers.py:40 msgid "Values" -msgstr "" +msgstr "Değerler" #: generic/states/tests.py:22 order/status_codes.py:13 msgid "Placed" @@ -4316,247 +4365,247 @@ msgstr "Sipariş verildi" #: generic/states/validators.py:21 msgid "Invalid status code" -msgstr "" +msgstr "Geçersiz durum kodu" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Veri Dosyası" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" -msgstr "" +msgstr "İçe aktarılacak veri dosyası" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" -msgstr "" +msgstr "Sütunlar" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" -msgstr "" +msgstr "Bu içe aktarma oturumu için hedef model türü" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" -msgstr "" +msgstr "İçe aktarma durumu" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" -msgstr "" +msgstr "Alan Varsayılanları" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" -msgstr "" +msgstr "Alan Geçersiz Kılmaları" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" -msgstr "" - -#: importer/models.py:126 -msgid "Update Existing Records" -msgstr "" +msgstr "Alan Filtreleri" #: importer/models.py:127 +msgid "Update Existing Records" +msgstr "Mevcut Kayıtları Güncelle" + +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" -msgstr "" +msgstr "Etkinleştirilirse, mevcut kayıtlar yeni veri ile güncellenecektir" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" -msgstr "" +msgstr "Bazı zorunlu alanlar eşleştirilmemiştir" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" -msgstr "" +msgstr "ID" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" -msgstr "" +msgstr "Kayıt için mevcut veritabanı tanımlayıcısı" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" -msgstr "" +msgstr "Sütun zaten bir veritabanı alanına eşlenmiştir" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" -msgstr "" +msgstr "Alan zaten bir veri sütununa eşlenmiştir" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" -msgstr "" - -#: importer/models.py:449 -msgid "Column does not exist in the data file" -msgstr "" - -#: importer/models.py:456 -msgid "Field does not exist in the target model" -msgstr "" - -#: importer/models.py:460 -msgid "Selected field is read-only" -msgstr "" - -#: importer/models.py:465 importer/models.py:536 -msgid "Import Session" -msgstr "" - -#: importer/models.py:469 -msgid "Field" -msgstr "" +msgstr "Sütun eşlemesi geçerli bir içe aktarma oturumuna bağlanmalıdır" #: importer/models.py:471 +msgid "Column does not exist in the data file" +msgstr "Sütun veri dosyasında bulunmuyor" + +#: importer/models.py:478 +msgid "Field does not exist in the target model" +msgstr "Alan hedef modelde bulunmuyor" + +#: importer/models.py:482 +msgid "Selected field is read-only" +msgstr "Seçilen alan salt okunurdur" + +#: importer/models.py:487 importer/models.py:564 +msgid "Import Session" +msgstr "Oturumu İçe Aktar" + +#: importer/models.py:491 +msgid "Field" +msgstr "Alan" + +#: importer/models.py:493 msgid "Column" -msgstr "" +msgstr "Sütun" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" -msgstr "" +msgstr "Satır İndeksi" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" -msgstr "" +msgstr "Orijinal satır verisi" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" -msgstr "" +msgstr "Hatalar" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" -msgstr "" +msgstr "Geçerli" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." -msgstr "" +msgstr "Mevcut kayıtları güncellemek için ID gereklidir." -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" -msgstr "" +msgstr "Sağlanan ID ile kayıt bulunamadı" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" -msgstr "" +msgstr "Sağlanan ID biçimi geçersiz" #: importer/operations.py:31 importer/operations.py:52 msgid "Unsupported data file format" -msgstr "" +msgstr "Desteklenmeyen veri dosyası biçimi" #: importer/operations.py:43 msgid "Failed to open data file" -msgstr "" +msgstr "Veri dosyasını açılamadı" #: importer/operations.py:54 msgid "Invalid data file dimensions" -msgstr "" +msgstr "Geçersiz veri dosyası boyutları" #: importer/serializers.py:92 msgid "Invalid field defaults" -msgstr "" +msgstr "Geçersiz alan varsayılanları" #: importer/serializers.py:105 msgid "Invalid field overrides" -msgstr "" +msgstr "Geçersiz alan geçersiz kılmaları" #: importer/serializers.py:118 msgid "Invalid field filters" -msgstr "" +msgstr "Geçersiz alan filtreleri" #: importer/serializers.py:177 msgid "Rows" -msgstr "" +msgstr "Satırlar" #: importer/serializers.py:178 msgid "List of row IDs to accept" -msgstr "" +msgstr "Kabul edilecek satır ID'leri" #: importer/serializers.py:191 msgid "No rows provided" -msgstr "" +msgstr "Hiç satır sağlanmadı" #: importer/serializers.py:195 msgid "Row does not belong to this session" -msgstr "" +msgstr "Satır bu oturuma ait değil" #: importer/serializers.py:198 msgid "Row contains invalid data" -msgstr "" +msgstr "Satır geçersiz veri içeriyor" #: importer/serializers.py:201 msgid "Row has already been completed" -msgstr "" +msgstr "Satır zaten tamamlandı" #: importer/status_codes.py:13 msgid "Initializing" -msgstr "" +msgstr "Başlatılıyor" #: importer/status_codes.py:18 msgid "Mapping Columns" -msgstr "" +msgstr "Sütunları Eşleme" #: importer/status_codes.py:21 msgid "Importing Data" -msgstr "" +msgstr "Veri İçe Aktarılıyor" #: importer/status_codes.py:24 msgid "Processing Data" -msgstr "" +msgstr "Veri İşleniyor" #: importer/validators.py:21 msgid "Data file exceeds maximum size limit" -msgstr "" +msgstr "Veri dosyası maksimum boyut sınırını aşıyor" #: importer/validators.py:26 msgid "Data file contains no headers" -msgstr "" +msgstr "Veri dosyası başlık içermiyor" #: importer/validators.py:29 msgid "Data file contains too many columns" -msgstr "" +msgstr "Veri dosyası çok fazla sütun içeriyor" #: importer/validators.py:32 msgid "Data file contains too many rows" -msgstr "" +msgstr "Veri dosyası çok fazla satır içeriyor" #: importer/validators.py:53 msgid "Value must be a valid dictionary object" -msgstr "" +msgstr "Değer geçerli bir sözlük nesnesi olmalıdır" #: machine/machine_types/label_printer.py:212 msgid "Copies" -msgstr "" +msgstr "Kopyalar" #: machine/machine_types/label_printer.py:213 msgid "Number of copies to print for each label" -msgstr "" +msgstr "Her etiket için yazdırılacak kopya sayısı" #: machine/machine_types/label_printer.py:231 msgid "Connected" -msgstr "" +msgstr "Bağlı" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" -msgstr "" +msgstr "Bilinmeyen" #: machine/machine_types/label_printer.py:233 msgid "Printing" -msgstr "" +msgstr "Yazdırılıyor" #: machine/machine_types/label_printer.py:234 msgid "Warning" -msgstr "" +msgstr "Uyarı" #: machine/machine_types/label_printer.py:235 msgid "No media" -msgstr "" +msgstr "Ortam yok" #: machine/machine_types/label_printer.py:236 msgid "Paper jam" -msgstr "" +msgstr "Kağıt sıkışması" #: machine/machine_types/label_printer.py:237 msgid "Disconnected" -msgstr "" +msgstr "Bağlı değil" #: machine/machine_types/label_printer.py:238 msgid "Error" -msgstr "" +msgstr "Hata" #: machine/machine_types/label_printer.py:245 msgid "Label Printer" @@ -4564,75 +4613,75 @@ msgstr "Etiket Yazdırma" #: machine/machine_types/label_printer.py:246 msgid "Directly print labels for various items." -msgstr "" +msgstr "Çeşitli ürünler için etiketleri doğrudan yazdırın." #: machine/machine_types/label_printer.py:252 msgid "Printer Location" -msgstr "" +msgstr "Yazıcı Konumu" #: machine/machine_types/label_printer.py:253 msgid "Scope the printer to a specific location" -msgstr "" +msgstr "Yazıcıyı belirli bir konuma ayarlayın" #: machine/models.py:26 msgid "Name of machine" -msgstr "" +msgstr "Makinenin adı" #: machine/models.py:30 msgid "Machine Type" -msgstr "" +msgstr "Makine Türü" #: machine/models.py:30 msgid "Type of machine" -msgstr "" +msgstr "Makinenin türü" #: machine/models.py:35 machine/models.py:147 msgid "Driver" -msgstr "" +msgstr "Sürücü" #: machine/models.py:36 msgid "Driver used for the machine" -msgstr "" +msgstr "Makine için kullanılan sürücü" #: machine/models.py:40 msgid "Machines can be disabled" -msgstr "" +msgstr "Makineler devre dışı bırakılabilir" #: machine/models.py:96 msgid "Driver available" -msgstr "" +msgstr "Sürücü mevcut" #: machine/models.py:101 msgid "No errors" -msgstr "" +msgstr "Hata yok" #: machine/models.py:106 msgid "Initialized" -msgstr "" +msgstr "Başlatıldı" #: machine/models.py:118 msgid "Machine status" -msgstr "" +msgstr "Makine durumu" #: machine/models.py:146 msgid "Machine" -msgstr "" +msgstr "Makine" #: machine/models.py:158 msgid "Machine Config" -msgstr "" +msgstr "Makine Yapılandırması" #: machine/models.py:163 msgid "Config type" -msgstr "" +msgstr "Yapılandırma türü" #: machine/serializers.py:24 msgid "Key of the property" -msgstr "" +msgstr "Özelliğin anahtarı" #: machine/serializers.py:27 msgid "Value of the property" -msgstr "" +msgstr "Özelliğin değeri" #: machine/serializers.py:30 users/models.py:238 msgid "Group" @@ -4640,865 +4689,897 @@ msgstr "Grup" #: machine/serializers.py:30 msgid "Grouping of the property" -msgstr "" +msgstr "Özelliğin gruplandırması" #: machine/serializers.py:33 msgid "Type" -msgstr "" +msgstr "Tür" #: machine/serializers.py:35 msgid "Type of the property" -msgstr "" +msgstr "Özelliğin türü" #: machine/serializers.py:40 msgid "Max Progress" -msgstr "" +msgstr "Maksimum İlerleme" #: machine/serializers.py:41 msgid "Maximum value for progress type, required if type=progress" -msgstr "" +msgstr "İlerleme türünün maksimum değeri, tür=ilerleme ise gerekli" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" -msgstr "" +msgstr "Sipariş Referansı" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" -msgstr "" +msgstr "Açık" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" -msgstr "" +msgstr "Proje Kodu Var" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Oluşturan" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" -msgstr "" +msgstr "Öncesinde Oluşturuldu" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" -msgstr "" +msgstr "Sonrasında Oluşturuldu" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" -msgstr "" +msgstr "Başlangıç Tarihi Var" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" -msgstr "" +msgstr "Öncesi Başlangıç Tarihi" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" -msgstr "" +msgstr "Sonrası Başlangıç Tarihi" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" -msgstr "" +msgstr "Hedef Tarihi Var" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" -msgstr "" +msgstr "Öncesi Hedef Tarih" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" -msgstr "" +msgstr "Sonrası Hedef Tarih" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "Daha önce güncellendi" + +#: order/api.py:233 +msgid "Updated After" +msgstr "Güncellendi (den sonra)" + +#: order/api.py:284 msgid "Has Pricing" -msgstr "" +msgstr "Fiyatlandırılmış" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" -msgstr "" +msgstr "Öncesinde Tamamlandı" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" -msgstr "" +msgstr "Sonrasında Tamamlandı" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" -msgstr "" +msgstr "Harici Üretim Emri" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" -msgstr "" +msgstr "Sipariş" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" -msgstr "" +msgstr "Sipariş Tamamlandı" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" -msgstr "" +msgstr "Dahili Parça" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" -msgstr "" +msgstr "Sipariş Bekliyor" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Tamamlandı" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" +msgstr "Sevkiyatı Var" + +#: order/api.py:1437 +msgid "Shipment not found" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" -msgstr "" +msgstr "Satın Alma Siparişi" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 #: templates/email/overdue_sales_order.html:15 msgid "Sales Order" -msgstr "Sipariş Emri" +msgstr "Satış Siparişi" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" -msgstr "" +msgstr "İade Siparişi" #: order/models.py:90 #: report/templates/report/inventree_purchase_order_report.html:38 #: report/templates/report/inventree_sales_order_report.html:31 msgid "Total Price" -msgstr "" +msgstr "Toplam Fiyat" #: order/models.py:91 msgid "Total price for this order" -msgstr "" +msgstr "Bu sipariş için toplam fiyat" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" -msgstr "" +msgstr "Sipariş Para Birimi" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" -msgstr "" +msgstr "Bu sipariş için para birimi (şirket varsayılanını kullanmak için boş bırakın)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" -msgstr "" +msgstr "Bu sipariş kilitli olduğundan değiştirilemez" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" -msgstr "" +msgstr "İletişim bilgileri seçilen şirketle eşleşmiyor" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" -msgstr "" +msgstr "Başlangıç tarihi hedef tarihinden önce olmalıdır" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" -msgstr "" +msgstr "Adres bilgileri seçilen şirketle eşleşmiyor" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" -msgstr "" +msgstr "Açıklama (isteğe bağlı)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" -msgstr "" +msgstr "Bu sipariş için proje kodu seçin" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Harici sayfaya bağlantı" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" -msgstr "" +msgstr "Başlangıç ​​tarihi" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" -msgstr "" +msgstr "Bu üretim emri için planlanan başlangıç tarihi" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Hedeflenen tarih" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." -msgstr "" +msgstr "Sipariş teslimatı için beklenen tarih. Bu tarihten sonra sipariş gecikmeli olacaktır." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" -msgstr "" +msgstr "Düzenleme Tarihi" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" -msgstr "" +msgstr "Siparişin düzenlendiği tarih" -#: order/models.py:504 -msgid "User or group responsible for this order" -msgstr "" +#: order/models.py:506 +msgid "Updated At" +msgstr "Güncellenme Tarihi" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "Bu siparişten sorumlu kullanıcı veya grup" + +#: order/models.py:526 msgid "Point of contact for this order" -msgstr "" +msgstr "Bu sipariş için ilgili kişi" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" -msgstr "" +msgstr "Bu sipariş için şirket adresi" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Sipariş referansı" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Durum" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" -msgstr "" +msgstr "Satın alma siparişi durumu" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" -msgstr "" +msgstr "Ürünlerin sipariş edilmekte olduğu şirket" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" -msgstr "" +msgstr "Tedarikçi Referansı" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" -msgstr "" +msgstr "Tedarikçi siparişi referans kodu" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" -msgstr "" +msgstr "teslim alan" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" -msgstr "" +msgstr "Siparişin tamamlandığı tarih" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Hedef" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" -msgstr "" +msgstr "Teslim alınan kalemler için varış yeri" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" -msgstr "" +msgstr "Parça tedarikçisi PO tedarikçisi ile eşleşmelidir" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" -msgstr "" +msgstr "Satır, satın alma siparişi ile eşleşmiyor" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" -msgstr "" +msgstr "Satırda bağlantılı bir parça eksik" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" -msgstr "" +msgstr "Miktar pozitif bir sayı olmalıdır" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Müşteri" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" -msgstr "" +msgstr "Ürünlerin satılmakta olduğu şirket" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" -msgstr "" +msgstr "Satış siparişi durumu" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " -msgstr "" +msgstr "Müşteri Referansı " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" -msgstr "" +msgstr "Müşteri siparişi referans kodu" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" -msgstr "" +msgstr "Sevkiyat Tarihi" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" -msgstr "" +msgstr "tarafından sevk edildi" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" -msgstr "" +msgstr "Sipariş zaten tamamlandı" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" -msgstr "" +msgstr "Sipariş zaten iptal edildi" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" -msgstr "" +msgstr "Yalnızca açık siparişler tamamlandı olarak işaretlenebilir" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" -msgstr "" +msgstr "Tamamlanmamış sevkiyatlar olduğundan sipariş tamamlanamaz" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" -msgstr "" +msgstr "Tamamlanmamış tahsisatlar olduğundan sipariş tamamlanamaz" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" -msgstr "" +msgstr "Tamamlanmamış satırlar olduğundan sipariş tamamlanamaz" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" -msgstr "" +msgstr "Bu sipariş kilitli olduğundan değiştirilemez" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" -msgstr "" +msgstr "Kalem miktarı" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" -msgstr "" - -#: order/models.py:1782 -msgid "Line item notes" -msgstr "" +msgstr "Satır referansı" #: order/models.py:1797 +msgid "Line item notes" +msgstr "Satır notları" + +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" -msgstr "" +msgstr "Bu satır için hedef tarih (siparişin hedef tarihini kullanmak için boş bırakın)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" -msgstr "" +msgstr "Satır açıklaması (isteğe bağlı)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" -msgstr "" +msgstr "Bu satır için ek bağlam" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" -msgstr "" +msgstr "Birim Fiyat" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" -msgstr "" +msgstr "Satın Alma Siparişi Kalemi" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" -msgstr "" +msgstr "Tedarikçi parçası tedarikçi ile eşleşmelidir" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" -msgstr "" +msgstr "Üretim emri harici olarak işaretlenmelidir" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" -msgstr "" +msgstr "Üretim emirleri yalnızca montaj parçalarına bağlanabilir" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" -msgstr "" - -#: order/models.py:1943 -msgid "Supplier part" -msgstr "" - -#: order/models.py:1950 -msgid "Received" -msgstr "" - -#: order/models.py:1951 -msgid "Number of items received" -msgstr "" - -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 -msgid "Purchase Price" -msgstr "" +msgstr "Üretim emri parçası satır parçası ile eşleşmelidir" #: order/models.py:1960 +msgid "Supplier part" +msgstr "Tedarikçi parçası" + +#: order/models.py:1967 +msgid "Received" +msgstr "Teslim Alındı" + +#: order/models.py:1968 +msgid "Number of items received" +msgstr "Teslim alınan miktar" + +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 +msgid "Purchase Price" +msgstr "Alış Fiyatı" + +#: order/models.py:1977 msgid "Unit purchase price" -msgstr "" +msgstr "Birim alış fiyatı" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" -msgstr "" +msgstr "Bu kalem tarafından karşılanacak harici Üretim Emri" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" -msgstr "" +msgstr "Ek Sipariş Kalemi" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" -msgstr "" +msgstr "Satış Siparişi Kalemi" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" -msgstr "" +msgstr "Yalnızca satışa uygun parçalar bir satış siparişine atanabilir" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" -msgstr "" +msgstr "Satış Fiyatı" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" -msgstr "" +msgstr "Birim satış fiyatı" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Sevk edildi" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" -msgstr "" +msgstr "Sevk edilen miktar" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" -msgstr "" +msgstr "Satış Siparişi Sevkiyatı" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" -msgstr "" +msgstr "Sevk adresi müşteri ile eşleşmelidir" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" -msgstr "" +msgstr "Bu sevkiyatın sevk adresi" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" -msgstr "" - -#: order/models.py:2304 -msgid "Delivery Date" -msgstr "" - -#: order/models.py:2305 -msgid "Date of delivery of shipment" -msgstr "" - -#: order/models.py:2313 -msgid "Checked By" -msgstr "" - -#: order/models.py:2314 -msgid "User who checked this shipment" -msgstr "" - -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 -#: report/templates/report/inventree_sales_order_shipment_report.html:14 -msgid "Shipment" -msgstr "" +msgstr "Sevkiyat tarihi" #: order/models.py:2322 -msgid "Shipment number" -msgstr "" +msgid "Delivery Date" +msgstr "Teslimat Tarihi" -#: order/models.py:2330 -msgid "Tracking Number" -msgstr "" +#: order/models.py:2323 +msgid "Date of delivery of shipment" +msgstr "Sevkiyatın teslimat tarihi" #: order/models.py:2331 +msgid "Checked By" +msgstr "Kontrol Eden" + +#: order/models.py:2332 +msgid "User who checked this shipment" +msgstr "Bu sevkiyatı kontrol eden kullanıcılar" + +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 +#: report/templates/report/inventree_sales_order_shipment_report.html:14 +msgid "Shipment" +msgstr "Sevkiyat" + +#: order/models.py:2340 +msgid "Shipment number" +msgstr "Sevkiyat numarası" + +#: order/models.py:2348 +msgid "Tracking Number" +msgstr "Takip Numarası" + +#: order/models.py:2349 msgid "Shipment tracking information" -msgstr "" +msgstr "Sevkiyat takip numarası" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" -msgstr "" +msgstr "Fatura Numarası" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" -msgstr "" +msgstr "Fatura referans numarası" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" -msgstr "" +msgstr "Sevkiyat zaten sevk edildi" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" -msgstr "" +msgstr "Sevkiyatın tahsis edilen stok kalemleri bulunmuyor" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" -msgstr "" +msgstr "Sevkiyat tamamlanmadan önce kontrol edilmelidir" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" -msgstr "" +msgstr "Ek Sipariş Kalemi" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" -msgstr "" +msgstr "Satış Siparişi Tahsisatı" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" -msgstr "" +msgstr "Stok kalemi henüz atanmadı" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" -msgstr "" +msgstr "Farklı bir parçaya sahip satıra stok kalemi tahsis edilemez" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" -msgstr "" +msgstr "Parça içermeyen bir satıra stok tahsis edilemez" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tahsis miktarı stok miktarını aşamaz" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" -msgstr "Seri numaralı stok kalemi için miktar bir olmalı" - -#: order/models.py:2556 -msgid "Sales order does not match shipment" -msgstr "" - -#: order/models.py:2557 plugin/base/barcodes/api.py:642 -msgid "Shipment does not match sales order" -msgstr "" +msgstr "Seri numaralı stok kalemi için miktar 1 olmalıdır" #: order/models.py:2565 +msgid "Sales order does not match shipment" +msgstr "Satış siparişi sevkiyatla eşleşmiyor" + +#: order/models.py:2566 plugin/base/barcodes/api.py:643 +msgid "Shipment does not match sales order" +msgstr "Sevkiyat satış siparişiyle eşleşmiyor" + +#: order/models.py:2574 msgid "Line" -msgstr "" +msgstr "Satır" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" -msgstr "" +msgstr "Satış siparişinin sevkiyat referansı" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" -msgstr "" - -#: order/models.py:2590 -msgid "Select stock item to allocate" -msgstr "" +msgstr "Kalem" #: order/models.py:2599 +msgid "Select stock item to allocate" +msgstr "Tahsis edilecek stok kalemini seçin" + +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Stok tahsis miktarını girin" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" -msgstr "" +msgstr "İade Siparişi referansı" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" -msgstr "" +msgstr "Ürünlerin iade edildiği şirket" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" -msgstr "" +msgstr "İade siparişi durumu" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" -msgstr "" +msgstr "İade Siparişi Satırı" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" -msgstr "" +msgstr "Stok kalemi belirtilmelidir" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" -msgstr "" +msgstr "İade miktarı stok miktarını aşıyor" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" -msgstr "" - -#: order/models.py:2993 -msgid "Invalid quantity for serialized stock item" -msgstr "" +msgstr "İade miktarı sıfırdan büyük olmalıdır" #: order/models.py:3009 -msgid "Select item to return from customer" -msgstr "" - -#: order/models.py:3024 -msgid "Received Date" -msgstr "" +msgid "Invalid quantity for serialized stock item" +msgstr "Seri numaralı stok kalemi için geçersiz miktar" #: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "" +msgid "Select item to return from customer" +msgstr "Müşteriden iade edilecek ürünü seçin" -#: order/models.py:3037 +#: order/models.py:3040 +msgid "Received Date" +msgstr "Teslim Alma Tarihi" + +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "Bu iade kaleminin teslim alındığı tarih" + +#: order/models.py:3053 msgid "Outcome" -msgstr "" +msgstr "Sonuç" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" -msgstr "" +msgstr "Bu satırın sonucu" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" -msgstr "" +msgstr "Bu kalem için iade veya onarımla ilgili maliyet" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" -msgstr "" +msgstr "Ek Sipariş Kalemi" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" -msgstr "" +msgstr "Sipariş ID" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" -msgstr "" +msgstr "Kopyası oluşturulacak siparişin ID'si" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" -msgstr "" +msgstr "Satırları Kopyala" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" -msgstr "" +msgstr "Satırları orijinal siparişten kopyala" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" -msgstr "" +msgstr "Ek Kalemleri Kopyala" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" -msgstr "" +msgstr "Orijinal siparişten ek kalemleri kopyala" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Parametreleri Kopyala" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "Parametreleri orijinal siparişten kopyala" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" -msgstr "Satır Ögeleri" +msgstr "Satırlar" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" -msgstr "" +msgstr "Tamamlanan Satırlar" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" -msgstr "" +msgstr "Siparişin Kopyasını Oluştur" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" -msgstr "" +msgstr "Bu siparişin kopyasını oluşturmak için seçenekleri belirtin" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" -msgstr "" +msgstr "Geçersiz sipariş ID" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" -msgstr "" +msgstr "Tedarikçi Adı" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" -msgstr "" +msgstr "Sipariş iptal edilemez" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" -msgstr "" +msgstr "Satır eksiği olan siparişin kapatılmasına izin ver" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" -msgstr "" +msgstr "Siparişin eksik satırları var" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" -msgstr "" +msgstr "Sipariş açık değil" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" -msgstr "" +msgstr "Otomatik Fiyatlandırma" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" -msgstr "" +msgstr "Tedarikçi parça verilerine göre satın alma fiyatını otomatik olarak hesapla" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" -msgstr "" +msgstr "Satın alma fiyatı para birimi" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" -msgstr "" +msgstr "Kalemleri Birleştir" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" -msgstr "" +msgstr "Aynı parça, hedef ve hedef tarihe sahip kalemleri tek bir satırda birleştir" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" -msgstr "" +msgstr "SKU" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" -msgstr "" +msgstr "Dahili Parça Numarası" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" -msgstr "" +msgstr "Dahili Parça Adı" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" -msgstr "" +msgstr "Tedarikçi parçası belirtilmeli" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" -msgstr "" +msgstr "Satın alma siparişi belirtilmeli" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" -msgstr "" +msgstr "Tedarikçi satın alma siparişi ile eşleşmelidir" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" -msgstr "" +msgstr "Satın alma siparişi tedarikçi ile eşleşmelidir" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" -msgstr "" +msgstr "Satır" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" -msgstr "" +msgstr "Teslim alınan kalemler için varış konumunu seçin" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" -msgstr "" +msgstr "Gelen stok kalemleri için parti numarası girin" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" -msgstr "" +msgstr "Son Kullanma Tarihi" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" -msgstr "" +msgstr "Gelen stok kalemleri için son kullanma tarihi girin" + +#: order/serializers.py:835 +msgid "Enter serial numbers for incoming stock items" +msgstr "Gelen stok kalemlerinin seri numaralarını girin" + +#: order/serializers.py:845 +msgid "Override packaging information for incoming stock items" +msgstr "Gelen stok kalemlerinin paketleme bilgilerini geçersiz kıl" + +#: order/serializers.py:853 order/serializers.py:2029 +msgid "Additional note for incoming stock items" +msgstr "Gelen stok kalemleri için ek not" + +#: order/serializers.py:860 +msgid "Barcode" +msgstr "Barkod" + +#: order/serializers.py:861 +msgid "Scanned barcode" +msgstr "Taranan barkod" #: order/serializers.py:877 -msgid "Enter serial numbers for incoming stock items" -msgstr "" - -#: order/serializers.py:887 -msgid "Override packaging information for incoming stock items" -msgstr "" - -#: order/serializers.py:895 order/serializers.py:2065 -msgid "Additional note for incoming stock items" -msgstr "" - -#: order/serializers.py:902 -msgid "Barcode" -msgstr "" - -#: order/serializers.py:903 -msgid "Scanned barcode" -msgstr "" - -#: order/serializers.py:919 msgid "Barcode is already in use" -msgstr "" +msgstr "Barkod zaten kullanımda" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" -msgstr "" +msgstr "Satırlar sağlanmalıdır" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" -msgstr "" +msgstr "Hedef konum belirtilmelidir" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" -msgstr "" +msgstr "Sağlanan barkod değerleri benzersiz olmalıdır" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" -msgstr "" +msgstr "Sevkiyatlar" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" -msgstr "" +msgstr "Tamamlanan Sevkiyatlar" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "Tahsis Edilen Kalemler" + +#: order/serializers.py:1294 msgid "Sale price currency" -msgstr "" +msgstr "Satış para birimi" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" -msgstr "" +msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" -msgstr "" +msgstr "Sevkiyat bilgileri sağlanmadı" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" -msgstr "" +msgstr "Ürün kalemi bu siparişle ilişkilendirilmemiştir" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" -msgstr "" +msgstr "Miktar pozitif olmalıdır" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" -msgstr "" +msgstr "Tahsis edilecek seri numaralarını girin" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" -msgstr "" +msgstr "Sevkiyat zaten sevk edildi" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" -msgstr "" +msgstr "Sevkiyat bu sipariş ile ilişkilendirilmemiştir" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" -msgstr "" +msgstr "Şu seri numaraları için bir eşleşme bulunamadı" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" -msgstr "" +msgstr "Şu seri numaraları mevcut değildir" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" -msgstr "" +msgstr "İade siparişi kalemi" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" -msgstr "" +msgstr "Ürün kalemi iade siparişi ile eşleşmiyor" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" -msgstr "" +msgstr "Ürün kalemi zaten teslim alındı" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" -msgstr "" +msgstr "Ürün kalemleri yalnızca işlemdeki siparişlere istinaden teslim alınabilir" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" -msgstr "" +msgstr "İade olacak miktar" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" -msgstr "" +msgstr "Satır para birimi" #: order/status_codes.py:17 order/status_codes.py:54 stock/status_codes.py:16 msgid "Lost" @@ -5518,1211 +5599,1263 @@ msgstr "Geri Dön" #: order/status_codes.py:108 msgid "Repair" -msgstr "" +msgstr "Onar" #: order/status_codes.py:111 msgid "Replace" -msgstr "" +msgstr "Değiştir" #: order/status_codes.py:114 msgid "Refund" -msgstr "" +msgstr "Geri öde" #: order/status_codes.py:117 msgid "Reject" -msgstr "" +msgstr "Reddet" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" -msgstr "" +msgstr "Geciken Satın Alma Siparişi" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" -msgstr "" +msgstr "Satın alma siparişi {po} şimdi gecikti" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" -msgstr "" +msgstr "Geciken Satış Siparişi" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" -msgstr "" +msgstr "Satış siparişi {so} şimdi gecikti" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" -msgstr "" +msgstr "Gecikmiş İade Siparişi" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" -msgstr "" +msgstr "İade siparişi {ro} şimdi gecikti" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" -msgstr "" +msgstr "Yıldızlı" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" -msgstr "" +msgstr "Yıldızlı kategorilere göre filtrele" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" -msgstr "" +msgstr "Derinlik" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" -msgstr "" +msgstr "Kategori derinliğine göre filtrele" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" -msgstr "" +msgstr "Üst Seviye" + +#: part/api.py:127 +msgid "Filter by top-level categories" +msgstr "Üst seviye kategorilere göre filtrele" + +#: part/api.py:140 stock/api.py:320 +msgid "Cascade" +msgstr "Kademeli" #: part/api.py:142 -msgid "Filter by top-level categories" -msgstr "" - -#: part/api.py:155 stock/api.py:321 -msgid "Cascade" -msgstr "" - -#: part/api.py:157 msgid "Include sub-categories in filtered results" -msgstr "" +msgstr "Filtrelenmiş sonuçlara alt kategorileri dahil et" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" -msgstr "" +msgstr "Üst" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" -msgstr "" +msgstr "Üst kategoriye göre filtrele" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" -msgstr "" +msgstr "Belirtilen kategorideki alt kategorileri hariç tut" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" -msgstr "" +msgstr "Sonuçları Olanlar" + +#: part/api.py:653 +msgid "Is Variant" +msgstr "Varyant mı" #: part/api.py:661 -msgid "Is Variant" -msgstr "" - -#: part/api.py:669 msgid "Is Revision" -msgstr "" +msgstr "Revizyon mu" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" -msgstr "" +msgstr "Revizyonu Olanlar" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" -msgstr "" +msgstr "BOM Geçerli" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" -msgstr "" +msgstr "Kategorileri Kademele" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" -msgstr "" +msgstr "Etkin ise, verilen kategorinin alt kategorilerindeki ögeleri dahil et" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" -msgstr "" +msgstr "Sayısal kategori ID veya 'null' sabitine göre filtrele" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "Montaj parçası etkin" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "Montaj parçası takip edilebilir" + +#: part/api.py:1288 msgid "Assembly part is testable" -msgstr "" +msgstr "Montaj test edilebilir" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "Bileşen etkin" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "Bileşen takip edilebilir" + +#: part/api.py:1301 msgid "Component part is testable" -msgstr "" +msgstr "Bileşen test edilebilir" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "Bileşen bir montaj parçası" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "Bileşen sanal" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "Stok mevcut" + +#: part/api.py:1370 msgid "Uses" -msgstr "" +msgstr "Kullanımlar" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" -msgstr "" +msgstr "Parça Kategorisi" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Parça Kategorileri" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Varsayılan Konum" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "Bu kategori içindeki parçalar için varsayılan konum" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" -msgstr "" +msgstr "Yapısal" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." -msgstr "" +msgstr "Parçalar doğrudan bir yapısal kategoriye atanamayabilir, ancak alt kategorilere atanabilir." + +#: part/models.py:128 +msgid "Default keywords" +msgstr "Varsayılan anahtar kelimeler" #: part/models.py:129 -msgid "Default keywords" -msgstr "" - -#: part/models.py:130 msgid "Default keywords for parts in this category" -msgstr "" +msgstr "Bu kategoridaki parçalar için varsayılan anahtar kelimeler" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" -msgstr "" +msgstr "Simge" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" -msgstr "" +msgstr "Simge (isteğe bağlı)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" -msgstr "" +msgstr "Bu parça kategorisini yapısal hale getiremezsiniz çünkü bazı parçalar zaten bu kategoriye atanmıştır!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" -msgstr "" +msgstr "Parça Kategorisi Parametre Şablonu" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" -msgstr "" +msgstr "Varsayılan Değer" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" -msgstr "" +msgstr "Varsayılan Parametre Değeri" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Parçalar" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" -msgstr "" +msgstr "Kilitli bir parçanın parametreleri silinemez" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" -msgstr "" +msgstr "Kilitli bir parçanın parametreleri değiştirilemez" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" -msgstr "" +msgstr "Bu parça kilitli olduğu için silinemez" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" -msgstr "" +msgstr "Bu parça hala aktif olduğundan silinemez" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" -msgstr "" +msgstr "Bu parça bir montajda kullanıldığından silinemez" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" -msgstr "" +msgstr "'{self}' parçası, '{parent}' için BOM'da kullanılamaz (yinelemeli)" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" -msgstr "" +msgstr "'{parent}' parçası, '{self}' için BOM'da kullanılır (yinelemeli)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" -msgstr "" +msgstr "IPN, düzenli ifade kalıbı {pattern} ile eşleşmelidir" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" -msgstr "" +msgstr "Parça, kendisinin revizyonu olamaz" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" -msgstr "" +msgstr "Zaten bir revizyon olan bir parçanın revizyonu yapılamaz" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" -msgstr "" +msgstr "Revizyon kodu belirtilmelidir" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" -msgstr "" +msgstr "Revizyonlara yalnızca montaj parçaları için izin verilir" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" -msgstr "" +msgstr "Bir şablon parçanın revizyonu yapılamaz" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" -msgstr "" +msgstr "Üst parça aynı şablonu göstermelidir" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" -msgstr "" +msgstr "Bu seri numarasına sahip stok kalemi zaten var" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "Yinelenen DPN'ye parça ayarlarında izin verilmiyor" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." -msgstr "" +msgstr "Kopyası oluşturulan parça revizyonu zaten var." -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." -msgstr "" +msgstr "Bu Ad, IPN ve Revizyona sahip parça zaten var." -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" -msgstr "" +msgstr "Parçalar yapısal parça kategorilerine atanamaz!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Parça adı" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Şablon Mu" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Bu parça bir şablon parçası mı?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" -msgstr "Bu parça başka bir parçanın çeşidi mi?" +msgstr "Bu parça başka bir parçanın varyantı mı?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" -msgstr "Çeşidi" +msgstr "Şunun Varyantı" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" -msgstr "" +msgstr "Açıklama (isteğe bağlı)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Anahtar kelimeler" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" -msgstr "" +msgstr "Arama sonuçlarında görünürlüğü artırmak için parça anahtar kelimeleri" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" -msgstr "" +msgstr "Parça kategorisi" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "DPN" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "Parça revizyon veya versiyon numarası" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Revizyon" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" -msgstr "" +msgstr "Bu parça başka bir parçanın revizyonu mu?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" -msgstr "" +msgstr "Şunun Revizyonu" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" -msgstr "" +msgstr "Bu kalem normalde nerede depolanır?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Varsayılan Tedarikçi" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Varsayılan tedarikçi parçası" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" -msgstr "" +msgstr "Varsayılan Son Kullanma" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" -msgstr "" +msgstr "Bu parçanın stok kalemleri için son kullanma süresi (gün olarak)" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Minimum Stok" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" -msgstr "" +msgstr "İzin verilen minimum stok düzeyi" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" -msgstr "" +msgstr "Bu parça için ölçü birimleri" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" -msgstr "Bu parça diğer parçalardan yapılabilir mi?" +msgstr "Bu parça diğer parçalardan üretilebilir mi?" -#: part/models.py:1297 +#: part/models.py:1260 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?" +msgstr "Bu parça diğer parçaların üretiminde kullanılabilir mi?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" -msgstr "" +msgstr "Bu parçanın benzersiz kalemler için izleme özelliği var mı?" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" -msgstr "" +msgstr "Bu parçanın test sonuçları kaydedilebilir mi?" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "Bu parça dış tedarikçilerden satın alınabilir mi?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "Bu parça müşterilere satılabilir mi?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Bu parça aktif mi?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" -msgstr "" +msgstr "Kilitli parçalar değiştirilemez" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" -msgstr "" +msgstr "Bu, yazılım ürünü veya lisans gibi sanal bir parça mı?" + +#: part/models.py:1305 +msgid "BOM Validated" +msgstr "BOM Doğrulandı" + +#: part/models.py:1306 +msgid "Is the BOM for this part valid?" +msgstr "Bu parçanın BOM'u geçerli mi?" + +#: part/models.py:1312 +msgid "BOM checksum" +msgstr "BOM sağlama toplamı" + +#: part/models.py:1313 +msgid "Stored BOM checksum" +msgstr "Saklanan BOM sağlama toplamı" + +#: part/models.py:1321 +msgid "BOM checked by" +msgstr "BOM'u kontrol eden" + +#: part/models.py:1326 +msgid "BOM checked date" +msgstr "BOM kontrol tarihi" #: part/models.py:1342 -msgid "BOM Validated" -msgstr "" - -#: part/models.py:1343 -msgid "Is the BOM for this part valid?" -msgstr "" - -#: part/models.py:1349 -msgid "BOM checksum" -msgstr "" - -#: part/models.py:1350 -msgid "Stored BOM checksum" -msgstr "" - -#: part/models.py:1358 -msgid "BOM checked by" -msgstr "" - -#: part/models.py:1363 -msgid "BOM checked date" -msgstr "" - -#: part/models.py:1379 msgid "Creation User" msgstr "Oluşturan Kullanıcı" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" -msgstr "" +msgstr "Bu parçanın sorumlu sahibi" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" -msgstr "" +msgstr "Birden fazla sat" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" -msgstr "" +msgstr "Fiyat hesaplamalarını önbelleğe almak için kullanılan para birimi" + +#: part/models.py:3330 +msgid "Minimum BOM Cost" +msgstr "Minimum BOM Maliyeti" + +#: part/models.py:3331 +msgid "Minimum cost of component parts" +msgstr "Bileşenlerin minimum maliyeti" + +#: part/models.py:3337 +msgid "Maximum BOM Cost" +msgstr "Maksimum BOM Maliyeti" + +#: part/models.py:3338 +msgid "Maximum cost of component parts" +msgstr "Bileşenlerin maksimum maliyeti" + +#: part/models.py:3344 +msgid "Minimum Purchase Cost" +msgstr "Minimum Satın Alma Maliyeti" + +#: part/models.py:3345 +msgid "Minimum historical purchase cost" +msgstr "Minimum tarihsel satın alma maliyeti" + +#: part/models.py:3351 +msgid "Maximum Purchase Cost" +msgstr "Maksimum Satın Alma Maliyeti" + +#: part/models.py:3352 +msgid "Maximum historical purchase cost" +msgstr "Maksimum tarihsel satın alma maliyeti" + +#: part/models.py:3358 +msgid "Minimum Internal Price" +msgstr "Minimum Dahili Fiyat" + +#: part/models.py:3359 +msgid "Minimum cost based on internal price breaks" +msgstr "Dahili fiyat kademelerine dayalı minimum maliyet" + +#: part/models.py:3365 +msgid "Maximum Internal Price" +msgstr "Maksimum Dahili Fiyat" #: part/models.py:3366 -msgid "Minimum BOM Cost" -msgstr "" +msgid "Maximum cost based on internal price breaks" +msgstr "Dahili fiyat kademelerine dayalı maksimum maliyet" -#: part/models.py:3367 -msgid "Minimum cost of component parts" -msgstr "" +#: part/models.py:3372 +msgid "Minimum Supplier Price" +msgstr "Minimum Tedarikçi Fiyatı" #: part/models.py:3373 -msgid "Maximum BOM Cost" -msgstr "" +msgid "Minimum price of part from external suppliers" +msgstr "Parça için minimum dış tedarikçi fiyatı" -#: part/models.py:3374 -msgid "Maximum cost of component parts" -msgstr "" +#: part/models.py:3379 +msgid "Maximum Supplier Price" +msgstr "Maksimum Tedarikçi Fiyatı" #: part/models.py:3380 -msgid "Minimum Purchase Cost" -msgstr "" +msgid "Maximum price of part from external suppliers" +msgstr "Parça için maksimum dış tedarikçi fiyatı" -#: part/models.py:3381 -msgid "Minimum historical purchase cost" -msgstr "" +#: part/models.py:3386 +msgid "Minimum Variant Cost" +msgstr "Minimum Varyant Maliyeti" #: part/models.py:3387 -msgid "Maximum Purchase Cost" -msgstr "" +msgid "Calculated minimum cost of variant parts" +msgstr "Varyant parçaların hesaplanan minimum maliyeti" -#: part/models.py:3388 -msgid "Maximum historical purchase cost" -msgstr "" +#: part/models.py:3393 +msgid "Maximum Variant Cost" +msgstr "Maksimum Varyant Maliyeti" #: part/models.py:3394 -msgid "Minimum Internal Price" -msgstr "" +msgid "Calculated maximum cost of variant parts" +msgstr "Varyant parçaların hesaplanan maksimum maliyeti" -#: part/models.py:3395 -msgid "Minimum cost based on internal price breaks" -msgstr "" +#: part/models.py:3400 part/models.py:3414 +msgid "Minimum Cost" +msgstr "Minimum Maliyet" #: part/models.py:3401 -msgid "Maximum Internal Price" -msgstr "" +msgid "Override minimum cost" +msgstr "Minimum maliyeti geçersiz kıl" -#: part/models.py:3402 -msgid "Maximum cost based on internal price breaks" -msgstr "" +#: part/models.py:3407 part/models.py:3421 +msgid "Maximum Cost" +msgstr "Maksimum Maliyet" #: part/models.py:3408 -msgid "Minimum Supplier Price" -msgstr "" - -#: part/models.py:3409 -msgid "Minimum price of part from external suppliers" -msgstr "" +msgid "Override maximum cost" +msgstr "Maksimum maliyeti geçersiz kıl" #: part/models.py:3415 -msgid "Maximum Supplier Price" -msgstr "" - -#: part/models.py:3416 -msgid "Maximum price of part from external suppliers" -msgstr "" +msgid "Calculated overall minimum cost" +msgstr "Hesaplanan genel minimum maliyet" #: part/models.py:3422 -msgid "Minimum Variant Cost" -msgstr "" +msgid "Calculated overall maximum cost" +msgstr "Hesaplanan genel maksimum maliyet" -#: part/models.py:3423 -msgid "Calculated minimum cost of variant parts" -msgstr "" +#: part/models.py:3428 +msgid "Minimum Sale Price" +msgstr "Minimum Satış Fiyatı" #: part/models.py:3429 -msgid "Maximum Variant Cost" -msgstr "" - -#: part/models.py:3430 -msgid "Calculated maximum cost of variant parts" -msgstr "" - -#: part/models.py:3436 part/models.py:3450 -msgid "Minimum Cost" -msgstr "" - -#: part/models.py:3437 -msgid "Override minimum cost" -msgstr "" - -#: part/models.py:3443 part/models.py:3457 -msgid "Maximum Cost" -msgstr "" - -#: part/models.py:3444 -msgid "Override maximum cost" -msgstr "" - -#: part/models.py:3451 -msgid "Calculated overall minimum cost" -msgstr "" - -#: part/models.py:3458 -msgid "Calculated overall maximum cost" -msgstr "" - -#: part/models.py:3464 -msgid "Minimum Sale Price" -msgstr "" - -#: part/models.py:3465 msgid "Minimum sale price based on price breaks" -msgstr "" +msgstr "Fiyat kademelerine dayalı minimum satış fiyatı" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" -msgstr "" +msgstr "Maksimum Satış Fiyatı" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" -msgstr "" +msgstr "Fiyat kademelerine dayalı maksimum satış fiyatı" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" -msgstr "" +msgstr "Minimum Satış Maliyeti" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" -msgstr "" +msgstr "Minimum tarihsel satış fiyatı" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" -msgstr "" +msgstr "Maksimum Satış Maliyeti" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" -msgstr "" +msgstr "Maksimum tarihsel satış fiyatı" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" -msgstr "" +msgstr "Stok sayımı için parça" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" -msgstr "" +msgstr "Kalem Sayısı" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" -msgstr "" +msgstr "Sayım anındaki tekil stok kaydı sayısı" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" -msgstr "" +msgstr "Sayım anındaki toplam mevcut stok" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" -msgstr "" +msgstr "Tarih" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" -msgstr "" +msgstr "Stok sayımının yapıldığı tarih" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" -msgstr "" +msgstr "Minimum Stok Maliyeti" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" -msgstr "" +msgstr "Mevcut stokun tahmini minimum maliyeti" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" -msgstr "" +msgstr "Maksimum Stok Maliyeti" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" -msgstr "" +msgstr "Mevcut stokun tahmini maksimum maliyeti" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" -msgstr "" +msgstr "Parça Satış Fiyat Kademesi" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" -msgstr "" +msgstr "Parça Test Şablonu" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" -msgstr "" +msgstr "Geçersiz şablon adı - en az bir alfasayısal karakter içermelidir" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" -msgstr "" +msgstr "Test şablonları sadece test edilebilir paçalar için oluşturulabilir" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" -msgstr "" +msgstr "Aynı anahtara sahip test şablonu parça için zaten mevcut" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Test Adı" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" -msgstr "" +msgstr "Test için bir ad girin" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" -msgstr "" +msgstr "Test Anahtarı" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" -msgstr "" +msgstr "Test için basitleştirilmiş anahtar" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Test Açıklaması" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" -msgstr "" +msgstr "Bu test için açıklama girin" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" -msgstr "" +msgstr "Bu test etkinleştirildi mi?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Gerekli" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Testi geçmesi için bu gerekli mi?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" -msgstr "" +msgstr "Değer Gerektirir" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" -msgstr "" +msgstr "Bir test sonucu eklerken bu test bir değer gerektirir mi?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" -msgstr "" +msgstr "Ek Gerektirir" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" -msgstr "" +msgstr "Bir test sonucu eklerken bu test bir dosya eki gerektirir mi?" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" -msgstr "" +msgstr "Bu test için geçerli seçenekler (virgül ile ayrılmış)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" -msgstr "" +msgstr "BOM kalemi değiştirilemez - montaj kilitlidir" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" -msgstr "" +msgstr "BOM kalemi değiştirilemez - varyant montajı kilitlidir" + +#: part/models.py:3972 +msgid "Select parent part" +msgstr "Üst parçayı seçin" + +#: part/models.py:3982 +msgid "Sub part" +msgstr "Alt parça" + +#: part/models.py:3983 +msgid "Select part to be used in BOM" +msgstr "BOM'da kullanılacak parçayı seçin" #: part/models.py:3994 -msgid "Select parent part" -msgstr "" - -#: part/models.py:4004 -msgid "Sub part" -msgstr "" - -#: part/models.py:4005 -msgid "Select part to be used in BOM" -msgstr "" - -#: part/models.py:4016 msgid "BOM quantity for this BOM item" -msgstr "" +msgstr "Bu BOM kalemi için BOM miktarı" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" -msgstr "" +msgstr "Bu BOM kalemi isteğe bağlıdır" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" -msgstr "" +msgstr "Bu BOM kalemi bir sarf malzemesidir (üretim emirlerinde izlenmez)" + +#: part/models.py:4014 +msgid "Setup Quantity" +msgstr "Hazırlık Payı" + +#: part/models.py:4015 +msgid "Extra required quantity for a build, to account for setup losses" +msgstr "Bir üretimdeki hazırlık kayıplarını telafi etmek için gereken ek miktar" + +#: part/models.py:4023 +msgid "Attrition" +msgstr "Fire" + +#: part/models.py:4025 +msgid "Estimated attrition for a build, expressed as a percentage (0-100)" +msgstr "Bir üretim için tahmini fire oranı, yüzde olarak ifade edilir (0-100)" #: part/models.py:4036 -msgid "Setup Quantity" -msgstr "" - -#: part/models.py:4037 -msgid "Extra required quantity for a build, to account for setup losses" -msgstr "" - -#: part/models.py:4045 -msgid "Attrition" -msgstr "" - -#: part/models.py:4047 -msgid "Estimated attrition for a build, expressed as a percentage (0-100)" -msgstr "" - -#: part/models.py:4058 msgid "Rounding Multiple" -msgstr "" +msgstr "Kat Yuvarlama" + +#: part/models.py:4038 +msgid "Round up required production quantity to nearest multiple of this value" +msgstr "Gerekli üretim miktarını bu değerin en yakın katına yuvarlayın" + +#: part/models.py:4046 +msgid "BOM item reference" +msgstr "BOM kalemi referansı" + +#: part/models.py:4054 +msgid "BOM item notes" +msgstr "BOM kalemi notları" #: part/models.py:4060 -msgid "Round up required production quantity to nearest multiple of this value" -msgstr "" - -#: part/models.py:4068 -msgid "BOM item reference" -msgstr "" - -#: part/models.py:4076 -msgid "BOM item notes" -msgstr "" - -#: part/models.py:4082 msgid "Checksum" -msgstr "" +msgstr "Sağlama Toplamı" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" -msgstr "" +msgstr "BOM satırı sağlama toplamı" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" -msgstr "" +msgstr "Doğrulandı" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" -msgstr "" +msgstr "Bu BOM kalemi doğrulandı" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" -msgstr "" +msgstr "Devralınır" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" -msgstr "Bu malzeme listesi, çeşit parçalar listesini kalıtsalıdır" +msgstr "Bu BOM kalemi, varyant parçaların BOM'larından devralınmıştır" -#: part/models.py:4101 +#: part/models.py:4079 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" +msgstr "Varyant parçaların stok kalemleri bu BOM kalemi için kullanılabilir" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" -msgstr "" +msgstr "İzlenebilir parçalar için miktar tamsayı olmalıdır" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" -msgstr "" +msgstr "Alt parça belirtilmelidir" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" -msgstr "" +msgstr "BOM Kalemi Muadili" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" -msgstr "" +msgstr "Muadil parça ile asıl parça aynı olamaz" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" -msgstr "" +msgstr "Üst BOM kalemi" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" -msgstr "" +msgstr "Muadil parça" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" -msgstr "" +msgstr "Parça 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" -msgstr "" +msgstr "Parça 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" -msgstr "" +msgstr "İlgili Parçayı Seçin" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" -msgstr "" +msgstr "Bu ilişki için not" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" -msgstr "" +msgstr "Bir parça ile kendisi arasında parça ilişkisi oluşturulamaz" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" -msgstr "" +msgstr "Kopyalanan ilişki zaten mevcut" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" -msgstr "" +msgstr "Üst Kategori" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" -msgstr "" +msgstr "Üst parça kategorisi" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Alt kategoriler" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" -msgstr "" +msgstr "Sonuçlar" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" -msgstr "" +msgstr "Bu şablon ile ilişkilendirilmiş sonuç sayısı" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" -msgstr "" +msgstr "Bu stok kaleminin alış para birimi" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" -msgstr "" +msgstr "Dosya bir görsel değil" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" -msgstr "" +msgstr "Orijinal Parça" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" -msgstr "" +msgstr "Kopyalanacak orijinal parçayı seçin" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" -msgstr "" +msgstr "Görseli Kopyala" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" -msgstr "" +msgstr "Orijinal parçadan görseli kopyala" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" -msgstr "" +msgstr "BOM'u Kopyala" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" -msgstr "" +msgstr "Orijinal parçadan ürün ağacını kopyala" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" -msgstr "" +msgstr "Orijinal parçadan parametreleri kopyala" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" -msgstr "" +msgstr "Notları Kopyala" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" -msgstr "" +msgstr "Orijinal parçadan notları kopyala" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" -msgstr "" +msgstr "Testleri Kopyala" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" -msgstr "" +msgstr "Orijinal parçadan test şablonlarını kopyala" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" -msgstr "" +msgstr "Başlangıç Stok Miktarı" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." -msgstr "" +msgstr "Bu parça için başlangıç stok miktarını belirtin. Miktar sıfır ise, stok eklenmez." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" -msgstr "" +msgstr "Başlangıç Stok Konumu" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" -msgstr "" +msgstr "Bu parça için başlangıç stok konumunu belirtin" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" -msgstr "" +msgstr "Tedarikçiyi seçin (veya atlamak için boş bırakın)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" -msgstr "" +msgstr "Üreticiyi seçin (veya atlamak için boş bırakın)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" -msgstr "" +msgstr "Üretici parça numarası" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" -msgstr "" - -#: part/serializers.py:504 -msgid "Selected company is not a valid manufacturer" -msgstr "" +msgstr "Seçilen şirket geçerli bir tedarikçi değildir" #: part/serializers.py:515 +msgid "Selected company is not a valid manufacturer" +msgstr "Seçilen şirket geçerli bir üretici değildir" + +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" -msgstr "" +msgstr "Bu MPN ile eşleşen üretici parçası zaten mevcut" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" -msgstr "" +msgstr "Bu SKU ile tedarikçi parçası zaten mevcut" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" -msgstr "" +msgstr "Kategori Adı" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" -msgstr "" +msgstr "Üretiliyor" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" -msgstr "" +msgstr "Bu parçanın şu anda üretimde olan miktarı" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" -msgstr "" +msgstr "Bu parçanın üretilmesi planlanan açık miktarı" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Stok Kalemleri" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" -msgstr "" +msgstr "Revizyonlar" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" -msgstr "" +msgstr "Toplam Stok" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" -msgstr "" +msgstr "Tahsis Edilmemiş Stok" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" -msgstr "" +msgstr "Varyant Stoku" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" -msgstr "" +msgstr "Parçanın Kopyasını Oluştur" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" -msgstr "" +msgstr "Başlangıç verisini diğer parçadan kopyala" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" -msgstr "" +msgstr "Başlangıç Stoku" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" -msgstr "" +msgstr "Başlangıç stok miktarı ile parça oluştur" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" -msgstr "" +msgstr "Tedarikçi Bilgileri" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" -msgstr "" +msgstr "Bu parça için ilk tedarikçi bilgilerini ekleyin" + +#: part/serializers.py:965 +msgid "Copy Category Parameters" +msgstr "Kategori Parametrelerini Kopyala" #: part/serializers.py:966 -msgid "Copy Category Parameters" -msgstr "" - -#: part/serializers.py:967 msgid "Copy parameter templates from selected part category" -msgstr "" +msgstr "Seçilen parça kategorisinden parametre şablonlarını kopyala" + +#: part/serializers.py:971 +msgid "Existing Image" +msgstr "Mevcut Görsel" #: part/serializers.py:972 -msgid "Existing Image" -msgstr "" - -#: part/serializers.py:973 msgid "Filename of an existing part image" -msgstr "" +msgstr "Mevcut parça görselinin dosya adı" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" -msgstr "" +msgstr "Görsel dosyası mevcut değil" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" -msgstr "" +msgstr "Tüm ürün ağacını doğrula" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" -msgstr "" +msgstr "Üretebilir Miktar" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" -msgstr "" +msgstr "Üretim Emirleri için Gerekli" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" -msgstr "" +msgstr "Üretim Emirlerine Tahsis Edildi" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" -msgstr "" +msgstr "Satış Siparişleri için Gerekli" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" -msgstr "" +msgstr "Satış Siparişlerine Tahsis Edildi" -#: part/serializers.py:1340 -msgid "Minimum Price" -msgstr "" +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "Parça DPN" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "Parça Açıklaması" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "Stok sayımı bilgisi oluşturmak üzere bir parça (ve varsa varyantlarını) seçin" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "Kategorideki (ve alt kategorilerdeki) tüm parçaları dahil etmek için bir kategori seçin" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "Konumda (ve alt konumlarda) stoğu bulunan tüm parçaları dahil etmek için bir konum seçin" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "Stok Sayımı Kayıtları Oluşturun" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "Seçili parçalar için stok sayımı girdilerini kaydedin" #: part/serializers.py:1341 +msgid "Generate Report" +msgstr "Rapor Oluştur" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "Seçili parçalar için stok sayımı raporu oluşturun" + +#: part/serializers.py:1445 +msgid "Minimum Price" +msgstr "Minimum Fiyat" + +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" -msgstr "" +msgstr "Minimum fiyat için hesaplanan değeri geçersiz kıl" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" -msgstr "" +msgstr "Minimum fiyat para birimi" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" -msgstr "" +msgstr "Maksimum Fiyat" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" -msgstr "" +msgstr "Maksimum fiyat için hesaplanan değeri geçersiz kıl" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" -msgstr "" +msgstr "Maksimum fiyat para birimi" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" -msgstr "" +msgstr "Güncelle" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" -msgstr "" +msgstr "Bu parçanın fiyatlandırmasını güncelle" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" -msgstr "" +msgstr "Sağlanan para birimlerinden {default_currency} para birimine dönüştürülemedi" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" -msgstr "" +msgstr "Minimum fiyat maksimum fiyattan yüksek olamaz" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" -msgstr "" +msgstr "Maksimum fiyat minimum fiyattan düşük olamaz" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "Miktar sıfır veya daha büyük olmalıdır" + +#: part/serializers.py:1697 msgid "Select the parent assembly" -msgstr "" +msgstr "Üst montajı seçin" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" -msgstr "" +msgstr "Bileşeni seçin" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" -msgstr "" +msgstr "BOM'u kopyalanacak parçayı seçin" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" -msgstr "" +msgstr "Mevcut Verileri Temizle" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" -msgstr "" +msgstr "Kopyalamadan önce mevcut BOM kalemlerini temizle" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" -msgstr "" +msgstr "Devralınanı Dahil Et" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" -msgstr "" +msgstr "Şablon parçalardan devralınan BOM kalemlerini dahil et" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" -msgstr "" +msgstr "Geçersiz Satırları Atla" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" -msgstr "" +msgstr "Geçersiz satırları atlamak için bu seçeneği etkinleştir" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" -msgstr "" +msgstr "Muadil Parçaları Kopyala" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" -msgstr "" +msgstr "BOM kalemlerinin kopyasını oluştururken muadil parçaları kopyala" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" -msgstr "" +msgstr "Düşük stok bildirimi" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" -msgstr "" +msgstr "{part.name} için mevcut stok, yapılandırılan minimum seviyenin altına düştü" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" -msgstr "" +msgstr "Eskimiş stok bildirimi" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" -msgstr "" +msgstr "Geçerlilik tarihi yaklaşan 1 adet stok kaleminiz var" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" -msgstr "" +msgstr "Geçerlilik tarihleri yaklaşan {item_count} adet stok kaleminiz var" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" -msgstr "" +msgstr "Geçerlilik tarihi yok" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" -msgstr "" +msgstr "{abs(days_diff)} Gün önce süresi doldu" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" -msgstr "" +msgstr "Süresi bugün doluyor" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" -msgstr "" +msgstr "{days_until_expiry} gün" #: plugin/api.py:80 msgid "Builtin" -msgstr "" +msgstr "Yerleşik" #: plugin/api.py:94 msgid "Mandatory" -msgstr "" +msgstr "Zorunlu" #: plugin/api.py:109 msgid "Sample" -msgstr "" +msgstr "Numune" #: plugin/api.py:123 plugin/models.py:167 msgid "Installed" -msgstr "" +msgstr "Kuruldu" #: plugin/api.py:190 msgid "Plugin cannot be deleted as it is currently active" -msgstr "" +msgstr "Bu eklenti şu an aktif olduğundan silinemez" #: plugin/base/action/api.py:56 msgid "No action specified" @@ -6732,247 +6865,247 @@ msgstr "İşlem belirtilmedi" msgid "No matching action found" msgstr "Eşleşen eylem bulunamadı" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "Barkod verisi için eşleşme bulunamadı" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "Barkod verisi için eşleşme bulundu" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" -msgstr "" +msgstr "Model desteklenmiyor" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" -msgstr "" +msgstr "Model örneği bulunamadı" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" -msgstr "" +msgstr "Barkod mevcut kalemle eşleşiyor" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" -msgstr "" +msgstr "Eşleşen parça verisi bulunamadı" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" -msgstr "" +msgstr "Eşleşen tedarikçi parçası verisi bulunamadı" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" -msgstr "" +msgstr "Birden çok eşleşen tedarikçi parçası bulundu" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" -msgstr "" +msgstr "Barkod verisi için eşleşen eklenti bulunamadı" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" -msgstr "" +msgstr "Eşleşen tedarikçi parçası" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" -msgstr "" +msgstr "Ürün kalemi zaten teslim alındı" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" -msgstr "" +msgstr "Tedarikçi barkodu için uygun eklenti bulunamadı" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" -msgstr "" +msgstr "Birden çok eşleşen satır bulundu" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" -msgstr "" +msgstr "Eşleşen satır bulunamadı" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" -msgstr "" +msgstr "Satış siparişi sağlanmadı" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" -msgstr "" +msgstr "Barkod mevcut bir stok kalemiyle eşleşmiyor" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" -msgstr "" +msgstr "Stok kalemi satır kalemiyle eşleşmiyor" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" -msgstr "" +msgstr "Mevcut stok yetersiz" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" -msgstr "" +msgstr "Stok kalemi satış siparişine tahsis edilmiştir" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" -msgstr "" +msgstr "Yetersiz bilgi" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" -msgstr "" +msgstr "Eşleşen öge bulundu" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" -msgstr "" +msgstr "Tedarikçi parçası satır ile eşleşmiyor" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" -msgstr "" +msgstr "Satır zaten tamamlandı" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" -msgstr "" +msgstr "Satır kalemini teslim almak için gerekli ek bilgiler" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" -msgstr "" +msgstr "Teslim alınan satın alma satırı" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" -msgstr "" +msgstr "Satırı teslim alınamadı" #: plugin/base/barcodes/serializers.py:53 msgid "Scanned barcode data" -msgstr "" +msgstr "Taranan barkod verisi" #: plugin/base/barcodes/serializers.py:62 msgid "Model name to generate barcode for" -msgstr "" +msgstr "Barkod oluşturulacak model adı" #: plugin/base/barcodes/serializers.py:67 msgid "Primary key of model object to generate barcode for" -msgstr "" +msgstr "Barkod oluşturulacak model nesnesinin birincil anahtarı" #: plugin/base/barcodes/serializers.py:137 msgid "Purchase Order to allocate items against" -msgstr "" +msgstr "Satın alma siparişi kapsamında tahsis edilecek kalemler" #: plugin/base/barcodes/serializers.py:143 msgid "Purchase order is not open" -msgstr "" +msgstr "Satın alma siparişi açık değil" #: plugin/base/barcodes/serializers.py:161 msgid "Supplier to receive items from" -msgstr "" +msgstr "Ürünlerin teslim alınacağı tedarikçi" #: plugin/base/barcodes/serializers.py:168 msgid "PurchaseOrder to receive items against" -msgstr "" +msgstr "Satın alma siparişi kapsamında teslim alınacak kalemler" #: plugin/base/barcodes/serializers.py:174 msgid "Purchase order has not been placed" -msgstr "" +msgstr "Satın alma siparişi henüz verilmedi" #: plugin/base/barcodes/serializers.py:182 msgid "Location to receive items into" -msgstr "" +msgstr "Ürünlerin teslim alınacağı konum" #: plugin/base/barcodes/serializers.py:188 msgid "Cannot select a structural location" -msgstr "" +msgstr "Yapısal bir konum seçilemez" #: plugin/base/barcodes/serializers.py:196 msgid "Purchase order line item to receive items against" -msgstr "" +msgstr "Satın alma siparişi kapsamında teslim alınacak kalemler" #: plugin/base/barcodes/serializers.py:202 msgid "Automatically allocate stock items to the purchase order" -msgstr "" +msgstr "Stok kalemlerini satın alma siparişine otomatik olarak tahsis edin" #: plugin/base/barcodes/serializers.py:215 msgid "Sales Order to allocate items against" -msgstr "" +msgstr "Satış siparişi kapsamında tahsis edilecek kalemler" #: plugin/base/barcodes/serializers.py:221 msgid "Sales order is not open" -msgstr "" +msgstr "Satın alma siparişi açık değil" #: plugin/base/barcodes/serializers.py:229 msgid "Sales order line item to allocate items against" -msgstr "" +msgstr "Satış siparişi satırı kapsamında tahsis edilecek kalemler" #: plugin/base/barcodes/serializers.py:236 msgid "Sales order shipment to allocate items against" -msgstr "" +msgstr "Satış siparişi sevkiyatı kapsamında tahsis edilecek kalemler" #: plugin/base/barcodes/serializers.py:242 msgid "Shipment has already been delivered" -msgstr "" +msgstr "Sevkiyat zaten teslim edildi" #: plugin/base/barcodes/serializers.py:247 msgid "Quantity to allocate" -msgstr "" +msgstr "Tahsis edilecek miktar" #: plugin/base/label/label.py:41 msgid "Label printing failed" -msgstr "" +msgstr "Etiket yazdırılamadı" #: plugin/base/label/mixins.py:53 msgid "Error rendering label to PDF" -msgstr "" +msgstr "Etiket PDF olarak işlenirken hata oluştu" #: plugin/base/label/mixins.py:67 msgid "Error rendering label to HTML" -msgstr "" +msgstr "Etiket HTML olarak işlenirken hata oluştu" #: plugin/base/label/mixins.py:144 msgid "No items provided to print" -msgstr "" +msgstr "Yazdırılacak öge seçilmedi" #: plugin/base/ui/serializers.py:30 msgid "Plugin Name" -msgstr "" +msgstr "Eklenti Adı" #: plugin/base/ui/serializers.py:34 msgid "Feature Type" -msgstr "" +msgstr "Özellik Türü" #: plugin/base/ui/serializers.py:39 msgid "Feature Label" -msgstr "" +msgstr "Özellik Etiketi" #: plugin/base/ui/serializers.py:44 msgid "Feature Title" -msgstr "" +msgstr "Özellik Başlığı" #: plugin/base/ui/serializers.py:49 msgid "Feature Description" -msgstr "" +msgstr "Özellik Açıklaması" #: plugin/base/ui/serializers.py:54 msgid "Feature Icon" -msgstr "" +msgstr "Özellik Simgesi" #: plugin/base/ui/serializers.py:58 msgid "Feature Options" -msgstr "" +msgstr "Özellik Seçenekleri" #: plugin/base/ui/serializers.py:61 msgid "Feature Context" -msgstr "" +msgstr "Özellik Bağlamı" #: plugin/base/ui/serializers.py:64 msgid "Feature Source (javascript)" -msgstr "" +msgstr "Özellik Kaynağı (javascript)" #: plugin/builtin/barcodes/inventree_barcode.py:27 msgid "InvenTree Barcodes" -msgstr "" +msgstr "InvenTree Barkodları" #: plugin/builtin/barcodes/inventree_barcode.py:28 msgid "Provides native support for barcodes" -msgstr "" +msgstr "Barkodlar için yerleşik destek sağlar" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -6988,871 +7121,871 @@ msgstr "" #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 #: plugin/builtin/suppliers/mouser.py:20 plugin/builtin/suppliers/tme.py:22 msgid "InvenTree contributors" -msgstr "" +msgstr "InvenTree'ye katkıda bulunanlar" #: plugin/builtin/barcodes/inventree_barcode.py:34 msgid "Internal Barcode Format" -msgstr "" +msgstr "Dahili Barkod Biçimi" #: plugin/builtin/barcodes/inventree_barcode.py:35 msgid "Select an internal barcode format" -msgstr "" +msgstr "Dahili bir barkod biçimi seçin" #: plugin/builtin/barcodes/inventree_barcode.py:37 msgid "JSON barcodes (human readable)" -msgstr "" +msgstr "JSON barkodları (insan tarafından okunabilir)" #: plugin/builtin/barcodes/inventree_barcode.py:38 msgid "Short barcodes (space optimized)" -msgstr "" +msgstr "Kısa barkodlar (alan optimizasyonu yapılmış)" #: plugin/builtin/barcodes/inventree_barcode.py:43 msgid "Short Barcode Prefix" -msgstr "" +msgstr "Kısa Barkod Ön Eki" #: 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 "" +msgstr "Kısa barkodlar için kullanılan ön eki özelleştirin; birden fazla InvenTree örneği bulunan ortamlar için kullanışlı olabilir" #: plugin/builtin/events/auto_create_builds.py:28 msgid "Auto Create Builds" -msgstr "" +msgstr "Üretimleri Otomatik Oluştur" #: plugin/builtin/events/auto_create_builds.py:31 msgid "Automatically create build orders for assemblies" -msgstr "" +msgstr "Montajlar için otomatik olarak üretim emirleri oluşturun" #: plugin/builtin/events/auto_issue_orders.py:17 msgid "Auto Issue Orders" -msgstr "" +msgstr "Siparişleri Otomatik Düzenle" #: plugin/builtin/events/auto_issue_orders.py:20 msgid "Automatically issue orders on the assigned target date" -msgstr "" +msgstr "Siparişler, tanımlanan hedef tarihte otomatik olarak oluşturulur" #: plugin/builtin/events/auto_issue_orders.py:30 msgid "Auto Issue Build Orders" -msgstr "" +msgstr "Üretim Emirlerini Otomatik Düzenle" #: plugin/builtin/events/auto_issue_orders.py:32 msgid "Automatically issue build orders on the assigned target date" -msgstr "" +msgstr "Üretim emirleri, tanımlanan hedef tarihte otomatik olarak oluşturulur" #: plugin/builtin/events/auto_issue_orders.py:38 msgid "Auto Issue Purchase Orders" -msgstr "" +msgstr "Satın Alma Siparişlerini Otomatik Düzenle" #: plugin/builtin/events/auto_issue_orders.py:40 msgid "Automatically issue purchase orders on the assigned target date" -msgstr "" +msgstr "Satın alma siparişleri, tanımlanan hedef tarihte otomatik olarak düzenlenir" #: plugin/builtin/events/auto_issue_orders.py:46 msgid "Auto Issue Sales Orders" -msgstr "" +msgstr "Satış Siparişlerini Otomatik Düzenle" #: plugin/builtin/events/auto_issue_orders.py:48 msgid "Automatically issue sales orders on the assigned target date" -msgstr "" +msgstr "Satış siparişleri, tanımlanan hedef tarihte otomatik olarak düzenlenir" #: plugin/builtin/events/auto_issue_orders.py:54 msgid "Auto Issue Return Orders" -msgstr "" +msgstr "İade Siparişlerini Otomatik Düzenle" #: plugin/builtin/events/auto_issue_orders.py:56 msgid "Automatically issue return orders on the assigned target date" -msgstr "" +msgstr "İade siparişleri, tanımlanan hedef tarihte otomatik olarak düzenlenir" #: plugin/builtin/events/auto_issue_orders.py:62 msgid "Issue Backdated Orders" -msgstr "" +msgstr "Geriye Dönük Siparişleri Düzenle" #: plugin/builtin/events/auto_issue_orders.py:63 msgid "Automatically issue orders that are backdated" -msgstr "" +msgstr "Geriye dönük siparişler otomatik olarak düzenlenir" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" -msgstr "" +msgstr "Seviyeler" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" -msgstr "" - -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 -msgid "Total Quantity" -msgstr "" +msgstr "Dışa aktarılacak seviye sayısı - tüm BOM seviyeleri için sıfır olarak ayarlayın" #: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 +msgid "Total Quantity" +msgstr "Toplam Miktar" + +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" -msgstr "" +msgstr "BOM'daki her parçanın toplam miktarını ekle" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" -msgstr "" +msgstr "Stok Verisi" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" -msgstr "" +msgstr "Parça stok verilerini ekle" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" -msgstr "" +msgstr "Fiyatlandırma Verisi" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" -msgstr "" +msgstr "Parça fiyatlandırma verilerini ekle" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" -msgstr "" +msgstr "Tedarikçi Verisi" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" -msgstr "" - -#: plugin/builtin/exporter/bom_exporter.py:48 -msgid "Manufacturer Data" -msgstr "" +msgstr "Tedarikçi verilerini ekle" #: plugin/builtin/exporter/bom_exporter.py:49 -msgid "Include manufacturer data" -msgstr "" +msgid "Manufacturer Data" +msgstr "Üretici Verisi" -#: plugin/builtin/exporter/bom_exporter.py:54 -msgid "Substitute Data" -msgstr "" +#: plugin/builtin/exporter/bom_exporter.py:50 +msgid "Include manufacturer data" +msgstr "Üretici verilerini ekle" #: plugin/builtin/exporter/bom_exporter.py:55 -msgid "Include substitute part data" -msgstr "" +msgid "Substitute Data" +msgstr "Muadil Verisi" -#: plugin/builtin/exporter/bom_exporter.py:60 -msgid "Parameter Data" -msgstr "" +#: plugin/builtin/exporter/bom_exporter.py:56 +msgid "Include substitute part data" +msgstr "Muadil parça verilerini ekle" #: plugin/builtin/exporter/bom_exporter.py:61 -msgid "Include part parameter data" -msgstr "" +msgid "Parameter Data" +msgstr "Parametre Verisi" -#: plugin/builtin/exporter/bom_exporter.py:70 -msgid "Multi-Level BOM Exporter" -msgstr "" +#: plugin/builtin/exporter/bom_exporter.py:62 +msgid "Include part parameter data" +msgstr "Parça parametre verilerini ekle" #: plugin/builtin/exporter/bom_exporter.py:71 +msgid "Multi-Level BOM Exporter" +msgstr "Çok Seviyeli BOM Dışa Aktarıcı" + +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" -msgstr "" +msgstr "Çok seviyeli BOM'ları dışa aktarma desteği sunar" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" -msgstr "" +msgstr "BOM Seviyesi" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" -msgstr "" +msgstr "Muadil {n}" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" -msgstr "" +msgstr "Tedarikçi {n}" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" -msgstr "" +msgstr "Tedarikçi {n} SKU" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" -msgstr "" +msgstr "Tedarikçi {n} MPN" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" -msgstr "" +msgstr "Üretici {n}" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" -msgstr "" +msgstr "Üretici {n} MPN" #: plugin/builtin/exporter/inventree_exporter.py:14 msgid "InvenTree Generic Exporter" -msgstr "" +msgstr "InvenTree Genel Dışa Aktarıcı" #: plugin/builtin/exporter/inventree_exporter.py:15 msgid "Provides support for exporting data from InvenTree" -msgstr "" +msgstr "InvenTree'den verileri dışa aktarma desteği sağlar" #: plugin/builtin/exporter/parameter_exporter.py:16 msgid "Exclude Inactive" -msgstr "" +msgstr "Pasifi Hariç Tut" #: plugin/builtin/exporter/parameter_exporter.py:17 msgid "Exclude parameters which are inactive" -msgstr "" +msgstr "Pasif parametreleri hariç tut" #: plugin/builtin/exporter/parameter_exporter.py:29 msgid "Parameter Exporter" -msgstr "" +msgstr "Parametre Dışa Aktarıcı" #: plugin/builtin/exporter/parameter_exporter.py:30 msgid "Exporter for model parameter data" -msgstr "" +msgstr "Model parametre verilerini dışa aktarıcı" #: plugin/builtin/exporter/stocktake_exporter.py:25 msgid "Include External Stock" -msgstr "" +msgstr "Harici Stoku Ekle" #: plugin/builtin/exporter/stocktake_exporter.py:26 msgid "Include external stock in the stocktake data" -msgstr "" +msgstr "Stok sayımı verilerine harici stoku ekle" #: plugin/builtin/exporter/stocktake_exporter.py:31 msgid "Include Variant Items" -msgstr "" +msgstr "Varyantları Ekle" #: plugin/builtin/exporter/stocktake_exporter.py:32 msgid "Include part variant stock in pricing calculations" -msgstr "" +msgstr "Fiyat hesaplamalarına parça varyant stokunu ekle" #: plugin/builtin/exporter/stocktake_exporter.py:44 msgid "Part Stocktake Exporter" -msgstr "" +msgstr "Parça Stok Sayımı Dışa Aktarıcı" #: plugin/builtin/exporter/stocktake_exporter.py:45 msgid "Exporter for part stocktake data" -msgstr "" +msgstr "Parça stok sayımı dışa aktarıcısı" #: plugin/builtin/exporter/stocktake_exporter.py:108 msgid "Minimum Unit Cost" -msgstr "" +msgstr "Minimum Birim Maliyeti" #: plugin/builtin/exporter/stocktake_exporter.py:109 msgid "Maximum Unit Cost" -msgstr "" +msgstr "Maksimum Birim Maliyeti" #: plugin/builtin/exporter/stocktake_exporter.py:110 msgid "Minimum Total Cost" -msgstr "" +msgstr "Minimum Toplam Maliyet" #: plugin/builtin/exporter/stocktake_exporter.py:111 msgid "Maximum Total Cost" -msgstr "" +msgstr "Maksimum Toplam Maliyet" #: plugin/builtin/integration/core_notifications.py:23 msgid "InvenTree UI Notifications" -msgstr "" +msgstr "InvenTree Arayüz Bildirimleri" #: plugin/builtin/integration/core_notifications.py:26 msgid "Integrated UI notification methods" -msgstr "" +msgstr "Entegre arayüz bildirim yöntemleri" #: plugin/builtin/integration/core_notifications.py:67 msgid "InvenTree Email Notifications" -msgstr "" +msgstr "InvenTree E-posta Bildirimleri" #: plugin/builtin/integration/core_notifications.py:70 msgid "Integrated email notification methods" -msgstr "" +msgstr "Entegre e-posta bildirim yöntemleri" #: plugin/builtin/integration/core_notifications.py:75 msgid "Allow email notifications" -msgstr "" +msgstr "E-posta bildirimlerine izin verin" #: plugin/builtin/integration/core_notifications.py:76 msgid "Allow email notifications to be sent to this user" -msgstr "" +msgstr "Bu kullanıcıya e-posta bildirimlerinin gönderilmesine izin verin" #: plugin/builtin/integration/core_notifications.py:123 msgid "InvenTree Slack Notifications" -msgstr "" +msgstr "InvenTree Slack Bildirimleri" #: plugin/builtin/integration/core_notifications.py:126 msgid "Integrated Slack notification methods" -msgstr "" +msgstr "InvenTree Slack bildirim yöntemleri" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "" +msgid "Slack incoming webhook URL" +msgstr "Slack gelen webhook URL'si" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" -msgstr "" +msgstr "Bir Slack kanalına mesajlar göndermek için kullanılacak URL" #: plugin/builtin/integration/core_notifications.py:162 msgid "Open link" -msgstr "" +msgstr "Bağlantıyı aç" #: plugin/builtin/integration/currency_exchange.py:22 msgid "InvenTree Currency Exchange" -msgstr "" +msgstr "InvenTree Döviz Kuru" #: plugin/builtin/integration/currency_exchange.py:23 msgid "Default currency exchange integration" -msgstr "" +msgstr "Varsayılan döviz kuru entegrasyonu" #: plugin/builtin/integration/machine_types.py:15 msgid "InvenTree Machines" -msgstr "" +msgstr "InvenTree Makineleri" #: plugin/builtin/integration/machine_types.py:16 msgid "Built-in machine types for InvenTree" -msgstr "" +msgstr "InvenTree için yerleşik makine türleri" #: plugin/builtin/integration/part_notifications.py:20 msgid "Part Notifications" -msgstr "" +msgstr "Parça Bildirimleri" #: plugin/builtin/integration/part_notifications.py:22 msgid "Notify users about part changes" -msgstr "" +msgstr "Kullanıcılara parça değişikliklerini bildir" #: plugin/builtin/integration/part_notifications.py:27 msgid "Send notifications" -msgstr "" +msgstr "Bildirim gönder" #: plugin/builtin/integration/part_notifications.py:28 msgid "Send notifications for part changes to subscribed users" -msgstr "" +msgstr "Takip eden kullanıcılara parça değişiklikleri için bildirim gönder" #: plugin/builtin/integration/part_notifications.py:45 msgid "Changed part notification" -msgstr "" +msgstr "Değişen parça bildirimi" #: plugin/builtin/integration/part_notifications.py:55 #, python-brace-format msgid "The part `{part.name}` has been triggered with a `{part_action}` event" -msgstr "" +msgstr "`{part.name}` parçası, `{part_action}` olayı ile tetiklenmiştir" #: plugin/builtin/labels/inventree_label.py:23 msgid "InvenTree PDF label printer" -msgstr "" +msgstr "InvenTree PDF etiket yazıcı" #: plugin/builtin/labels/inventree_label.py:24 msgid "Provides native support for printing PDF labels" -msgstr "" +msgstr "PDF etiketleri yazdırmak için yerleşik destek sağlar" #: plugin/builtin/labels/inventree_label.py:32 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" -msgstr "" +msgstr "Hata ayıklama modu" #: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" -msgstr "" +msgstr "Hata ayıklama modunu etkinleştir - PDF yerine ham HTML döndürür" #: plugin/builtin/labels/inventree_machine.py:61 msgid "InvenTree machine label printer" -msgstr "" +msgstr "InvenTree cihaz etiket yazıcısı" #: plugin/builtin/labels/inventree_machine.py:62 msgid "Provides support for printing using a machine" -msgstr "" +msgstr "Bir cihaz aracılığıyla yazdırma desteği sunar" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" -msgstr "" +msgstr "son kullanılan" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" -msgstr "" +msgstr "Seçenekler" #: plugin/builtin/labels/label_sheet.py:30 msgid "Page size for the label sheet" -msgstr "" +msgstr "Etiket sayfasının boyutu" #: plugin/builtin/labels/label_sheet.py:35 msgid "Skip Labels" -msgstr "" +msgstr "Etiketleri Atla" #: plugin/builtin/labels/label_sheet.py:36 msgid "Skip this number of labels when printing label sheets" -msgstr "" +msgstr "Etiket sayfası yazdırılırken atlanacak etiket sayısı" #: plugin/builtin/labels/label_sheet.py:43 msgid "Border" -msgstr "" +msgstr "Kenarlık" #: plugin/builtin/labels/label_sheet.py:44 msgid "Print a border around each label" -msgstr "" +msgstr "Her etiketin etrafına kenarlık ekle" #: plugin/builtin/labels/label_sheet.py:49 report/models.py:387 msgid "Landscape" -msgstr "" +msgstr "Yatay" #: plugin/builtin/labels/label_sheet.py:50 msgid "Print the label sheet in landscape mode" -msgstr "" +msgstr "Etiket sayfasını yatay olarak yazdır" #: plugin/builtin/labels/label_sheet.py:55 msgid "Page Margin" -msgstr "" +msgstr "Sayfa Kenar Boşluğu" #: plugin/builtin/labels/label_sheet.py:56 msgid "Margin around the page in mm" -msgstr "" +msgstr "Sayfanın kenar boşluğu (mm)" #: plugin/builtin/labels/label_sheet.py:69 msgid "InvenTree Label Sheet Printer" -msgstr "" +msgstr "InvenTree Etiket Sayfası Yazıcısı" #: plugin/builtin/labels/label_sheet.py:70 msgid "Arrays multiple labels onto a single sheet" -msgstr "" +msgstr "Birden fazla etiketi tek bir sayfaya dizer" #: plugin/builtin/labels/label_sheet.py:122 msgid "Label is too large for page size" -msgstr "" +msgstr "Etiket bu sayfa boyutu için çok büyük" #: plugin/builtin/labels/label_sheet.py:161 msgid "No labels were generated" -msgstr "" +msgstr "Hiç etiket oluşturulmadı" #: plugin/builtin/suppliers/digikey.py:17 msgid "Supplier Integration - DigiKey" -msgstr "" +msgstr "Tedarikçi Entegrasyonu - DigiKey" #: plugin/builtin/suppliers/digikey.py:18 msgid "Provides support for scanning DigiKey barcodes" -msgstr "" +msgstr "DigiKey barkodları taraması için destek sağlar" #: plugin/builtin/suppliers/digikey.py:27 msgid "The Supplier which acts as 'DigiKey'" -msgstr "" +msgstr "'DigiKey' rolünü üstlenen tedarikçi" #: plugin/builtin/suppliers/lcsc.py:19 msgid "Supplier Integration - LCSC" -msgstr "" +msgstr "Tedarikçi Entegrasyonu - LCSC" #: plugin/builtin/suppliers/lcsc.py:20 msgid "Provides support for scanning LCSC barcodes" -msgstr "" +msgstr "LCSC barkodları taraması için destek sağlar" #: plugin/builtin/suppliers/lcsc.py:28 msgid "The Supplier which acts as 'LCSC'" -msgstr "" +msgstr "'LCSC' rolünü üstlenen tedarikçi" #: plugin/builtin/suppliers/mouser.py:17 msgid "Supplier Integration - Mouser" -msgstr "" +msgstr "Tedarikçi Entegrasyonu - Mouser" #: plugin/builtin/suppliers/mouser.py:18 msgid "Provides support for scanning Mouser barcodes" -msgstr "" +msgstr "Mouser barkodları taraması için destek sağlar" #: plugin/builtin/suppliers/mouser.py:26 msgid "The Supplier which acts as 'Mouser'" -msgstr "" +msgstr "'Mouser' rolünü üstlenen tedarikçi" #: plugin/builtin/suppliers/tme.py:19 msgid "Supplier Integration - TME" -msgstr "" +msgstr "Tedarikçi Entegrasyonu - TME" #: plugin/builtin/suppliers/tme.py:20 msgid "Provides support for scanning TME barcodes" -msgstr "" +msgstr "TME barkodları taraması için destek sağlar" #: plugin/builtin/suppliers/tme.py:28 msgid "The Supplier which acts as 'TME'" -msgstr "" +msgstr "'TME' rolünü üstlenen tedarikçi" #: plugin/installer.py:240 plugin/installer.py:320 msgid "Only staff users can administer plugins" -msgstr "" +msgstr "Eklentileri yalnızca yetkili personel yönetebilir" #: plugin/installer.py:243 msgid "Plugin installation is disabled" -msgstr "" +msgstr "Eklenti kurulumu devre dışı bırakıldı" #: plugin/installer.py:280 msgid "Installed plugin successfully" -msgstr "" +msgstr "Eklenti kurulumu başarılı" #: plugin/installer.py:285 #, python-brace-format msgid "Installed plugin into {path}" -msgstr "" +msgstr "Eklenti {path} yoluna kuruldu" #: plugin/installer.py:311 msgid "Plugin was not found in registry" -msgstr "" +msgstr "Eklenti kayıt defterinde bulunamadı" #: plugin/installer.py:314 msgid "Plugin is not a packaged plugin" -msgstr "" +msgstr "Eklenti paketlenmiş bir eklenti değildir" #: plugin/installer.py:317 msgid "Plugin package name not found" -msgstr "" +msgstr "Eklenti paketi adı bulunamadı" #: plugin/installer.py:337 msgid "Plugin uninstalling is disabled" -msgstr "" +msgstr "Eklenti kaldırma devre dışı bırakıldı" #: plugin/installer.py:341 msgid "Plugin cannot be uninstalled as it is currently active" -msgstr "" +msgstr "Bu eklenti şu an aktif olduğundan kaldırılamaz" #: plugin/installer.py:347 msgid "Plugin cannot be uninstalled as it is mandatory" -msgstr "" +msgstr "Eklenti zorunlu olduğu için kaldırılamaz" #: plugin/installer.py:352 msgid "Plugin cannot be uninstalled as it is a sample plugin" -msgstr "" +msgstr "Eklenti örnek bir eklenti olduğu için kaldırılamaz" #: plugin/installer.py:357 msgid "Plugin cannot be uninstalled as it is a built-in plugin" -msgstr "" +msgstr "Eklenti yerleşik bir eklenti olduğu için kaldırılamaz" #: plugin/installer.py:361 msgid "Plugin is not installed" -msgstr "" +msgstr "Eklenti kurulu değil" #: plugin/installer.py:379 msgid "Plugin installation not found" -msgstr "" +msgstr "Eklenti kurulumu bulunamadı" #: plugin/installer.py:395 msgid "Uninstalled plugin successfully" -msgstr "" +msgstr "Eklenti başarıyla kaldırıldı" #: plugin/models.py:39 msgid "Plugin Configuration" -msgstr "" +msgstr "Eklenti Yapılandırma" #: plugin/models.py:40 msgid "Plugin Configurations" -msgstr "" +msgstr "Eklenti Yapılandırmaları" #: plugin/models.py:47 msgid "Key of plugin" -msgstr "" +msgstr "Eklentinin anahtarı" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "" +msgid "Name of the plugin" +msgstr "Eklentinin adı" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" -msgstr "" +msgstr "Paket Adı" #: plugin/models.py:64 msgid "Name of the installed package, if the plugin was installed via PIP" -msgstr "" +msgstr "Eklenti PIP aracılığıyla yüklendiyse, yüklenen paketin adı" #: plugin/models.py:69 msgid "Is the plugin active" -msgstr "" +msgstr "Eklenti aktif mi" #: plugin/models.py:176 msgid "Sample plugin" -msgstr "" +msgstr "Örnek eklenti" #: plugin/models.py:184 msgid "Builtin Plugin" -msgstr "" +msgstr "Yerleşik Eklenti" #: plugin/models.py:192 msgid "Mandatory Plugin" -msgstr "" +msgstr "Zorunlu Eklenti" #: plugin/models.py:210 msgid "Package Plugin" -msgstr "" +msgstr "Paket Eklenti" #: plugin/models.py:301 plugin/models.py:347 msgid "Plugin" -msgstr "" +msgstr "Eklenti" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" -msgstr "" +msgstr "Yazar bulunamadı" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" -msgstr "" +msgstr "'{p}' eklentisi, şu anki InvenTree sürümü {v} ile uyumlu değildir" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" -msgstr "" +msgstr "Eklenti en az {v} sürümünü gerektirir" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" -msgstr "" +msgstr "Eklenti en fazla {v} sürümünü gerektirir" #: plugin/samples/integration/sample.py:52 msgid "User Setting 1" -msgstr "" +msgstr "Kullanıcı Ayarı 1" #: plugin/samples/integration/sample.py:53 msgid "A user setting that can be changed by the user" -msgstr "" +msgstr "Kullanıcı tarafından değiştirilebilen bir kullanıcı ayarı" #: plugin/samples/integration/sample.py:57 msgid "User Setting 2" -msgstr "" +msgstr "Kullanıcı Ayarı 2" #: plugin/samples/integration/sample.py:58 msgid "Another user setting" -msgstr "" +msgstr "Başka bir kullanıcı ayarı" #: plugin/samples/integration/sample.py:63 msgid "User Setting 3" -msgstr "" +msgstr "Kullanıcı Ayarı 3" #: plugin/samples/integration/sample.py:64 msgid "A user setting with choices" -msgstr "" +msgstr "Seçenekli bir kullanıcı ayarı" #: plugin/samples/integration/sample.py:72 msgid "Enable PO" -msgstr "" +msgstr "PO'yu Etkinleştir" #: plugin/samples/integration/sample.py:73 msgid "Enable PO functionality in InvenTree interface" -msgstr "" +msgstr "InvenTree arayüzünde PO işlevselliğini etkinleştir" #: plugin/samples/integration/sample.py:78 msgid "API Key" -msgstr "" +msgstr "API Anahtarı" #: plugin/samples/integration/sample.py:79 msgid "Key required for accessing external API" -msgstr "" +msgstr "Harici API erişimi için gerekli anahtar" #: plugin/samples/integration/sample.py:83 msgid "Numerical" -msgstr "" +msgstr "Sayısal" #: plugin/samples/integration/sample.py:84 msgid "A numerical setting" -msgstr "" +msgstr "Sayısal bir ayar" #: plugin/samples/integration/sample.py:90 msgid "Choice Setting" -msgstr "" +msgstr "Seçenekli Ayar" #: plugin/samples/integration/sample.py:91 msgid "A setting with multiple choices" -msgstr "" +msgstr "Birden fazla seçeneği olan bir ayar" #: plugin/samples/integration/sample_currency_exchange.py:15 msgid "Sample currency exchange plugin" -msgstr "" +msgstr "Örnek döviz kuru eklentisi" #: plugin/samples/integration/sample_currency_exchange.py:18 msgid "InvenTree Contributors" -msgstr "" +msgstr "InvenTree Katkıda Bulunanlar" #: plugin/samples/integration/user_interface_sample.py:27 msgid "Enable Part Panels" -msgstr "" +msgstr "Parça Panelerini Etkinleştir" #: plugin/samples/integration/user_interface_sample.py:28 msgid "Enable custom panels for Part views" -msgstr "" +msgstr "Parça görünümleri için özel panelleri etkinleştir" #: plugin/samples/integration/user_interface_sample.py:33 msgid "Enable Purchase Order Panels" -msgstr "" +msgstr "Satın Alma Sipariş Panellerini Etkinleştir" #: plugin/samples/integration/user_interface_sample.py:34 msgid "Enable custom panels for Purchase Order views" -msgstr "" +msgstr "Satın alma siparişi görünümleri için özel panelleri etkinleştir" #: plugin/samples/integration/user_interface_sample.py:39 msgid "Enable Broken Panels" -msgstr "" +msgstr "Bozuk Panelleri Etkinleştir" #: plugin/samples/integration/user_interface_sample.py:40 msgid "Enable broken panels for testing" -msgstr "" +msgstr "Test için kırık panelleri etkinleştir" #: plugin/samples/integration/user_interface_sample.py:45 msgid "Enable Dynamic Panel" -msgstr "" +msgstr "Dinamik Paneli Etkinleştir" #: plugin/samples/integration/user_interface_sample.py:46 msgid "Enable dynamic panels for testing" -msgstr "" +msgstr "Test için dinamik panelleri etkinleştir" #: plugin/samples/integration/user_interface_sample.py:114 msgid "Part Panel" -msgstr "" +msgstr "Parça Paneli" #: plugin/samples/integration/user_interface_sample.py:149 msgid "Broken Dashboard Item" -msgstr "" +msgstr "Bozuk Pano Kartı" #: plugin/samples/integration/user_interface_sample.py:151 msgid "This is a broken dashboard item - it will not render!" -msgstr "" +msgstr "Bu bozuk pano kartı görüntülenemiyor!" #: plugin/samples/integration/user_interface_sample.py:157 msgid "Sample Dashboard Item" -msgstr "" +msgstr "Örnek Kontrol Paneli Kartı" #: plugin/samples/integration/user_interface_sample.py:159 msgid "This is a sample dashboard item. It renders a simple string of HTML content." -msgstr "" +msgstr "Bu, örnek bir pano kartıdır. Basit bir HTML içeriği dizesi görüntüler." #: plugin/samples/integration/user_interface_sample.py:165 msgid "Context Dashboard Item" -msgstr "" +msgstr "Bağlamsal Pano Kartı" #: plugin/samples/integration/user_interface_sample.py:179 msgid "Admin Dashboard Item" -msgstr "" +msgstr "Yönetici Pano Kartı" #: plugin/samples/integration/user_interface_sample.py:180 msgid "This is an admin-only dashboard item." -msgstr "" +msgstr "Bu, yalnızca yöneticilerin kullanabileceği bir pano kartıdır." #: plugin/serializers.py:86 msgid "Source File" -msgstr "" +msgstr "Kaynak Dosyası" #: plugin/serializers.py:87 msgid "Path to the source file for admin integration" -msgstr "" +msgstr "Yönetici entegrasyonu için kaynak dosya yolu" #: plugin/serializers.py:94 msgid "Optional context data for the admin integration" -msgstr "" +msgstr "Yönetici entegrasyonu için isteğe bağlı bağlam verileri" #: plugin/serializers.py:110 msgid "Source URL" -msgstr "" +msgstr "Kaynak URL" #: plugin/serializers.py:112 msgid "Source for the package - this can be a custom registry or a VCS path" -msgstr "" +msgstr "Paketin kaynağı - bu, özel bir kayıt defteri veya bir VCS yolu olabilir" #: plugin/serializers.py:121 msgid "Name for the Plugin Package - can also contain a version indicator" -msgstr "" +msgstr "Eklenti Paketi Adı - sürüm göstergesi de içerebilir" #: plugin/serializers.py:128 msgid "Version" -msgstr "" +msgstr "Sürüm" #: plugin/serializers.py:130 msgid "Version specifier for the plugin. Leave blank for latest version." -msgstr "" +msgstr "Eklenti için sürüm belirleyici. En son sürüm için boş bırakın." #: plugin/serializers.py:135 msgid "Confirm plugin installation" -msgstr "" +msgstr "Eklenti kurulumunu onaylayın" #: plugin/serializers.py:137 msgid "This will install this plugin now into the current instance. The instance will go into maintenance." -msgstr "" +msgstr "Bu, eklentiyi mevcut örneğe şimdi yükleyecektir. Örnek bakım moduna geçecektir." #: plugin/serializers.py:150 msgid "Installation not confirmed" -msgstr "" +msgstr "Kurulum onaylanmadı" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "" +msgid "Either packagename or URL must be provided" +msgstr "Paket adı veya URL'den biri belirtilmelidir" #: plugin/serializers.py:188 msgid "Full reload" -msgstr "" +msgstr "Tam yeniden yükleme" #: plugin/serializers.py:189 msgid "Perform a full reload of the plugin registry" -msgstr "" +msgstr "Eklenti kayıt defterini tamamen yeniden yükle" #: plugin/serializers.py:195 msgid "Force reload" -msgstr "" +msgstr "Yeniden yüklemeye zorla" #: plugin/serializers.py:197 msgid "Force a reload of the plugin registry, even if it is already loaded" -msgstr "" +msgstr "Eklenti kayıt defterini, zaten yüklenmiş olsa bile yeniden yüklemeye zorla" #: plugin/serializers.py:204 msgid "Collect plugins" -msgstr "" +msgstr "Eklentileri topla" #: plugin/serializers.py:205 msgid "Collect plugins and add them to the registry" -msgstr "" +msgstr "Eklentileri topla ve kayıt defterine ekle" #: plugin/serializers.py:233 msgid "Activate Plugin" -msgstr "" +msgstr "Eklentiyi Aktifleştir" #: plugin/serializers.py:234 msgid "Activate this plugin" -msgstr "" +msgstr "Bu eklentiyi aktifleştir" #: plugin/serializers.py:243 msgid "Mandatory plugin cannot be deactivated" -msgstr "" +msgstr "Zorunlu eklenti pasifleştirilemez" #: plugin/serializers.py:261 msgid "Delete configuration" -msgstr "" +msgstr "Yapılandırmayı sil" #: plugin/serializers.py:262 msgid "Delete the plugin configuration from the database" -msgstr "" +msgstr "Eklenti yapılandırmasını veritabanından sil" #: plugin/serializers.py:293 msgid "The user for which this setting applies" -msgstr "" +msgstr "Bu ayarların uygulanacağı kullanıcı" #: report/api.py:44 report/serializers.py:102 report/serializers.py:152 msgid "Items" -msgstr "" +msgstr "Kalemler" #: report/api.py:115 msgid "Plugin not found" -msgstr "" +msgstr "Eklenti bulunamadı" #: report/api.py:117 msgid "Plugin does not support label printing" -msgstr "" +msgstr "Eklenti, etiket yazdırmayı desteklemiyor" #: report/api.py:165 msgid "Invalid label dimensions" -msgstr "" +msgstr "Geçersiz etiket boyutları" #: report/api.py:183 report/api.py:267 msgid "No valid items provided to template" -msgstr "" +msgstr "Şablona geçerli öge sağlanmadı" #: report/helpers.py:43 msgid "A4" -msgstr "" +msgstr "A4" #: report/helpers.py:44 msgid "A3" -msgstr "" +msgstr "A3" #: report/helpers.py:45 msgid "Legal" -msgstr "" +msgstr "Yasal" #: report/helpers.py:46 msgid "Letter" -msgstr "" +msgstr "Harf" #: report/models.py:128 msgid "Template file with this name already exists" -msgstr "" +msgstr "Aynı isimde bir şablon zaten mevcut" #: report/models.py:217 msgid "Template name" @@ -7860,19 +7993,19 @@ msgstr "Şablon adı" #: report/models.py:223 msgid "Template description" -msgstr "" +msgstr "Şablon açıklaması" #: report/models.py:229 msgid "Revision number (auto-increments)" -msgstr "" +msgstr "Revizyon numarası (otomatik artar)" #: report/models.py:235 msgid "Attach to Model on Print" -msgstr "" +msgstr "Yazdırmada Modele Ekle" #: report/models.py:237 msgid "Save report output as an attachment against linked model instance when printing" -msgstr "" +msgstr "Yazdırırken rapor çıktısını bağlantılı model örneğine ek olarak kaydet" #: report/models.py:281 msgid "Filename Pattern" @@ -7880,15 +8013,15 @@ msgstr "Dosya Adı Deseni" #: report/models.py:282 msgid "Pattern for generating filenames" -msgstr "" +msgstr "Dosya adları oluşturmak için desen" #: report/models.py:287 msgid "Template is enabled" -msgstr "" +msgstr "Şablon etkinleştirildi" #: report/models.py:294 msgid "Target model type for template" -msgstr "" +msgstr "Şablon için hedef model türü" #: report/models.py:314 msgid "Filters" @@ -7896,48 +8029,48 @@ msgstr "Filtreler" #: report/models.py:315 msgid "Template query filters (comma-separated list of key=value pairs)" -msgstr "" +msgstr "Şablon sorgu filtreleri (virgülle ayrılmış anahtar=değer çiftleri listesi)" #: report/models.py:374 report/models.py:670 msgid "Template file" -msgstr "" +msgstr "Şablon dosyası" #: report/models.py:382 msgid "Page size for PDF reports" -msgstr "" +msgstr "PDF raporları için sayfa boyutu" #: report/models.py:388 msgid "Render report in landscape orientation" -msgstr "" +msgstr "Raporu yatay yönde işle" #: report/models.py:393 msgid "Merge" -msgstr "" +msgstr "Birleştir" #: report/models.py:394 msgid "Render a single report against selected items" -msgstr "" +msgstr "Seçili ögeler için tek bir rapor oluştur" #: report/models.py:449 #, python-brace-format msgid "Report generated from template {self.name}" -msgstr "" +msgstr "{self.name} şablonundan oluşturulan rapor" #: report/models.py:546 report/models.py:585 report/models.py:586 msgid "Template syntax error" -msgstr "" +msgstr "Şablon sözdizimi hatası" #: report/models.py:553 report/models.py:592 msgid "Error rendering report" -msgstr "" +msgstr "Rapor işleme hatası" #: report/models.py:612 msgid "Error generating report" -msgstr "" +msgstr "Rapor oluşturma hatası" #: report/models.py:644 msgid "Error merging report outputs" -msgstr "" +msgstr "Rapor çıktılarını birleştirme hatası" #: report/models.py:676 msgid "Width [mm]" @@ -7957,70 +8090,70 @@ msgstr "Etiket yüksekliği mm olarak belirtilmeli" #: report/models.py:789 msgid "Error printing labels" -msgstr "" +msgstr "Etiket yazdırma hatası" #: report/models.py:808 msgid "Snippet" -msgstr "" +msgstr "Parçacık" #: report/models.py:809 msgid "Report snippet file" -msgstr "" +msgstr "Rapor parçacık dosyası" #: report/models.py:816 msgid "Snippet file description" -msgstr "" +msgstr "Parçacık dosyası açıklaması" #: report/models.py:834 msgid "Asset" -msgstr "" +msgstr "Kaynak Dosyası" #: report/models.py:835 msgid "Report asset file" -msgstr "" +msgstr "Rapor kaynak dosyası" #: report/models.py:842 msgid "Asset file description" -msgstr "" +msgstr "Kaynak dosyası açıklaması" #: report/serializers.py:95 msgid "Select report template" -msgstr "" +msgstr "Rapor şablonu seç" #: report/serializers.py:103 report/serializers.py:153 msgid "List of item primary keys to include in the report" -msgstr "" +msgstr "Rapora dahil edilecek öge birincil anahtarlarının listesi" #: report/serializers.py:136 msgid "Select label template" -msgstr "" +msgstr "Etiket Şablonu Seç" #: report/serializers.py:144 msgid "Printing Plugin" -msgstr "" +msgstr "Yazdırma Eklentisi" #: report/serializers.py:145 msgid "Select plugin to use for label printing" -msgstr "" +msgstr "Etiket yazdırma için kullanılacak eklentiyi seç" #: report/templates/label/part_label.html:31 #: report/templates/label/stockitem_qr.html:21 #: report/templates/label/stocklocation_qr.html:20 msgid "QR Code" -msgstr "" +msgstr "QR Kod" #: report/templates/label/part_label_code128.html:31 #: report/templates/label/stocklocation_qr_and_text.html:31 msgid "QR code" -msgstr "" +msgstr "QR kod" #: report/templates/report/inventree_bill_of_materials_report.html:100 msgid "Bill of Materials" -msgstr "" +msgstr "Ürün Ağacı" #: report/templates/report/inventree_bill_of_materials_report.html:133 msgid "Materials needed" -msgstr "" +msgstr "Gerekli Malzemeler" #: report/templates/report/inventree_build_order_report.html:98 #: report/templates/report/inventree_purchase_order_report.html:47 @@ -8031,11 +8164,11 @@ msgstr "" #: report/templates/report/inventree_test_report.html:84 #: report/templates/report/inventree_test_report.html:162 msgid "Part image" -msgstr "" +msgstr "Parça görseli" #: report/templates/report/inventree_build_order_report.html:121 msgid "Issued" -msgstr "" +msgstr "Düzenlendi" #: report/templates/report/inventree_build_order_report.html:146 msgid "Required For" @@ -8043,43 +8176,43 @@ msgstr "İçin Gerekli Olan" #: report/templates/report/inventree_build_order_report.html:152 msgid "Issued By" -msgstr "Veren" +msgstr "Düzenleyen" #: report/templates/report/inventree_purchase_order_report.html:15 msgid "Supplier was deleted" -msgstr "" +msgstr "Tedarikçi silindi" #: report/templates/report/inventree_purchase_order_report.html:22 msgid "Order Details" -msgstr "" +msgstr "Sipariş Ayrıntıları" #: report/templates/report/inventree_purchase_order_report.html:37 #: report/templates/report/inventree_sales_order_report.html:30 msgid "Unit Price" -msgstr "" +msgstr "Birim Fiyat" #: report/templates/report/inventree_purchase_order_report.html:62 #: report/templates/report/inventree_return_order_report.html:48 #: report/templates/report/inventree_sales_order_report.html:55 msgid "Extra Line Items" -msgstr "" +msgstr "Ek Kalemler" #: report/templates/report/inventree_purchase_order_report.html:79 #: report/templates/report/inventree_sales_order_report.html:72 msgid "Total" -msgstr "" +msgstr "Toplam" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Seri Numara" #: report/templates/report/inventree_sales_order_shipment_report.html:23 msgid "Allocations" -msgstr "" +msgstr "Tahsisler" #: report/templates/report/inventree_sales_order_shipment_report.html:47 #: templates/email/stale_stock_notification.html:20 @@ -8088,18 +8221,18 @@ msgstr "Toplu" #: report/templates/report/inventree_stock_location_report.html:97 msgid "Stock location items" -msgstr "" +msgstr "Stok konumu ögeleri" #: report/templates/report/inventree_stock_report_merge.html:21 #: report/templates/report/inventree_test_report.html:21 msgid "Stock Item Test Report" -msgstr "" +msgstr "Stok Kalemi Test Raporu" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" -msgstr "" +msgstr "Takılı Kalemler" #: report/templates/report/inventree_stock_report_merge.html:111 #: report/templates/report/inventree_test_report.html:167 @@ -8108,517 +8241,541 @@ msgstr "Seri No" #: report/templates/report/inventree_test_report.html:97 msgid "Test Results" -msgstr "" +msgstr "Test Sonuçları" #: report/templates/report/inventree_test_report.html:102 msgid "Test" -msgstr "" +msgstr "Test" #: report/templates/report/inventree_test_report.html:129 msgid "Pass" -msgstr "" +msgstr "Geçti" #: report/templates/report/inventree_test_report.html:131 msgid "Fail" -msgstr "" +msgstr "Kaldı" #: report/templates/report/inventree_test_report.html:138 msgid "No result (required)" -msgstr "" +msgstr "Sonuç yok (gerekli)" #: report/templates/report/inventree_test_report.html:140 msgid "No result" +msgstr "Sonuç yok" + +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:187 +msgid "Invalid static file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" +msgstr "Görsel dosyası bulunumadı" + +#: report/templatetags/report.py:412 +msgid "No image file specified" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" -msgstr "" +msgstr "part_image etiketi bir parça örneği gerektirir" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" -msgstr "" +msgstr "company_image etiketi bir şirket örneği gerektirir" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" -msgstr "" +msgstr "Konum derinliğine göre filtrele" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" -msgstr "" +msgstr "Üst seviye konumlara göre filtrele" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" -msgstr "" +msgstr "Filtrelenmiş sonuçlara alt konumları dahil et" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" -msgstr "" +msgstr "Üst Konum" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" -msgstr "" +msgstr "Üst konuma göre filtrele" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" -msgstr "" +msgstr "Parça adı (büyük/küçük harf duyarlı değildir)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" -msgstr "" +msgstr "Parça adı şunu içerir (büyük/küçük harf duyarlı değildir)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" -msgstr "" +msgstr "Parça adı (regex)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" -msgstr "" +msgstr "Parça IPN (büyük/küçük harf duyarlı değildir)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" -msgstr "" +msgstr "Parça IPN şunu içerir (büyük/küçük harf duyarlı değildir)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" -msgstr "" +msgstr "Parça IPN (regex)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" -msgstr "" +msgstr "Minimum stok" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" -msgstr "" +msgstr "Maksimum stok" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" -msgstr "" +msgstr "Durum Kodu" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" -msgstr "" +msgstr "Harici Konum" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" -msgstr "" +msgstr "Üretim Emrine göre Tüketilenler" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" -msgstr "" +msgstr "Başka bir stok kalemine bağlı" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" -msgstr "" +msgstr "Parça Ağacı" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" -msgstr "" +msgstr "Daha önce güncellendi" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" -msgstr "" +msgstr "Güncellendi (den sonra)" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" -msgstr "" +msgstr "Stok Sayımı (-dan önce)" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" -msgstr "" +msgstr "Stok Sayımı (-dan sonra)" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" -msgstr "" +msgstr "Son kullanma tarihi öncesi" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" -msgstr "" +msgstr "Son kullanma tarihi sonrası" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" -msgstr "" +msgstr "Bozuk" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" -msgstr "" +msgstr "Bu stok kalemini ve bağlı tüm alt kalemleri hariç tutmak için bir PK girin" + +#: stock/api.py:980 +msgid "Cascade Locations" +msgstr "Konumları alt konumlara uygula" #: stock/api.py:981 -msgid "Cascade Locations" -msgstr "" - -#: stock/api.py:982 msgid "If true, include items in child locations of the given location" -msgstr "" +msgstr "Açıksa belirtilen konumun alt konumlarındaki öğeleri de dahil eder" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" -msgstr "" +msgstr "Sayısal konum ID'si veya \"null\" değeriyle filtreleyin" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" -msgstr "" +msgstr "Miktar gereklidir" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" -msgstr "" +msgstr "Geçerli bir parça girilmelidir" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" -msgstr "" +msgstr "Belirtilen tedarikçi parçası bulunamadı" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" -msgstr "" +msgstr "Tedarikçi parçası için paket boyutu tanımlanmış, ancak ‘use_pack_size’ seçeneği etkin değil" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" -msgstr "" +msgstr "Takibi olmayan bir parça için seri numarası verilemez" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" -msgstr "" +msgstr "Takılıyı Dahil Et" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" -msgstr "" +msgstr "Aktifse verilen stok kaleminin altına takılı öğelerin test sonuçları da dahil edilir" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" -msgstr "" +msgstr "Sayısal Stok Kalemi ID’sine göre Filtrele" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" -msgstr "" +msgstr "Belirtilen ID {id} ile bir stok kalemi bulunamadı" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "Varyantları Dahil Et" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "(-den sonra) sil" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "Önce" + +#: stock/models.py:73 msgid "Stock Location type" -msgstr "" +msgstr "Stok Konumu Türü" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" -msgstr "" +msgstr "Stok Konum Türleri" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" -msgstr "" +msgstr "Simge atanmamış tüm konumlar için varsayılan simge (isteğe bağlı)" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Stok Konumu" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Stok Konumları" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" -msgstr "" +msgstr "Sahip" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" -msgstr "" +msgstr "Sahibi Seçin" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." -msgstr "" +msgstr "Stok kalemleri yapısal stok konumlarına doğrudan yerleştirilemez; ancak alt konumlara yerleştirilebilir." -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" -msgstr "" +msgstr "Harici" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" -msgstr "" +msgstr "Bu, harici bir stok konumudur" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" -msgstr "" +msgstr "Konum türü" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" -msgstr "" +msgstr "Bu konumun stok konumu türü" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" -msgstr "" +msgstr "Bazı stok kalemleri zaten bu stok konumunda bulunduğundan, bu stok konumunu yapısal hale getiremezsiniz!" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" -msgstr "" +msgstr "{field} mevcut değil" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" -msgstr "" +msgstr "Parça belirtilmelidir" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" -msgstr "" +msgstr "Stok kalemleri yapısal stok konumlarına yerleştirilemez!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" -msgstr "" +msgstr "Sanal parçalar için stok kalemi oluşturulamaz" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" -msgstr "" +msgstr "Parça türü ('{self.supplier_part.part}'), {self.part} olmalıdır" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Seri numarası olan ögenin miktarı bir olmalı" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Miktar birden büyük ise seri numarası ayarlanamaz" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" -msgstr "" +msgstr "Öge kendisine ait olamaz" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" -msgstr "" +msgstr "is_building=True ise ögenin bir üretim referansı olmalıdır" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" -msgstr "" +msgstr "Üretim referansı aynı parça nesnesini göstermiyor" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Üst Stok Kalemi" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" -msgstr "" +msgstr "Temel parça" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" -msgstr "Bu stok kalemi için tedarikçi parçası seçin" +msgstr "Bu stok kalemiyle eşleşen bir tedarikçi parçası seçin" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" -msgstr "" +msgstr "Bu stok kalemi nerede bulunur?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" -msgstr "" +msgstr "Bu stok kaleminin ambalajı şu şekilde saklanmaktadır" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" -msgstr "" +msgstr "Şuna Takıldı" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" -msgstr "" +msgstr "Bu öge başka bir ögeye takılı mı?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" -msgstr "" +msgstr "Bu stok kalemine ait parti kodu" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" -msgstr "" +msgstr "Stok Miktarı" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" -msgstr "" - -#: stock/models.py:1122 -msgid "Build for this stock item" -msgstr "" +msgstr "Kaynak Üretim" #: stock/models.py:1129 +msgid "Build for this stock item" +msgstr "Bu stok kalemi için üretim kaydı" + +#: stock/models.py:1136 msgid "Consumed By" -msgstr "" +msgstr "Tüketen" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" -msgstr "" +msgstr "Bu stok kaleminin kullanıldığı üretim emri" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" -msgstr "" +msgstr "Kaynak Satın Alma Emri" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" -msgstr "" +msgstr "Bu stok kalemi için satın alma emri" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" -msgstr "" +msgstr "Hedef satış siparişi" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" -msgstr "" +msgstr "Stok kalemi için son kullanma tarihi. Bu tarihten sonra stok süresi dolmuş kabul edilir" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" -msgstr "" +msgstr "Tükendiğinde sil" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" -msgstr "" +msgstr "Stok tükendiğinde bu stok kalemini sil" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" -msgstr "" +msgstr "Satın alma anındaki birim alış fiyatı" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" -msgstr "" +msgstr "Parçaya dönüştürüldü" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" -msgstr "" +msgstr "Miktar, mevcut stoğu aşıyor" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" -msgstr "" +msgstr "Parça için izlenebilirlik etkin değil" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" -msgstr "" +msgstr "Miktar tam sayı olmalıdır" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" -msgstr "" +msgstr "Miktar, mevcut stok miktarını ({self.quantity}) aşmamalıdır" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" -msgstr "" +msgstr "Seri numaraları liste halinde girilmelidir" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Miktar seri numaları ile eşleşmiyor" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" -msgstr "" +msgstr "Stok, yapısal bir konuma atanamaz" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" -msgstr "" +msgstr "Test şablonu mevcut değil" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" -msgstr "" +msgstr "Stok kalemi bir satış siparişine atanmıştır" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" -msgstr "" +msgstr "Stok kalemi başka bir stok kalemine takılıdır" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" -msgstr "" +msgstr "Bu öge, başka ögeler de içeriyor" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stok kalemi stokta olmadığı için taşınamaz" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,248 +8819,248 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" -msgstr "Sağlayıcı Parça Numarası" +msgstr "Tedarikçi Parça Numarası" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" -msgstr "" +msgstr "Bu parçaya seri numarası atanamaz" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Seri numaraları zaten mevcut" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" -msgstr "" +msgstr "Takılacak stok kalemini seçin" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" -msgstr "" +msgstr "Miktar" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" -msgstr "" +msgstr "Takılacak kalemlerin miktarını girin" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "İşlem notu ekle (isteğe bağlı)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" -msgstr "" +msgstr "Miktar en az \"1\" olmalıdır" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" -msgstr "" +msgstr "Stok kalemi mevcut değil" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" -msgstr "" +msgstr "Seçilen parça malzeme listesinde bulunamadı" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" -msgstr "" +msgstr "Takılacak miktar, mevcudu geçmemeli" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" -msgstr "" +msgstr "Sökülen ürün için hedef konum" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" -msgstr "" +msgstr "Stok kaleminin dönüştürüleceği parçayı seçin" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" -msgstr "" +msgstr "Seçilen parça dönüştürülmeye uygun değil" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" -msgstr "" +msgstr "Tedarikçi parçası atanmış stok kalemi dönüştürülemez" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" -msgstr "" - -#: stock/serializers.py:1020 -msgid "Select stock items to change status" -msgstr "" +msgstr "Stok kalemi durum kodu" #: stock/serializers.py:1026 -msgid "No stock items selected" -msgstr "" +msgid "Select stock items to change status" +msgstr "Durumu değiştirilecek stok kalemlerini seçin" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1032 +msgid "No stock items selected" +msgstr "Hiçbir stok kalemi seçilmedi" + +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Alt konumlar" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" -msgstr "" +msgstr "Üst stok konumu" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" -msgstr "" +msgstr "Parça satılabilir olmalıdır" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" -msgstr "" +msgstr "Ürün bir satış siparişine tahsis edilmiştir" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" -msgstr "" +msgstr "Ürün bir üretim emrine tahsis edilmiştir" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" -msgstr "" +msgstr "Stok kalemlerini atamak için müşteri" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" -msgstr "" +msgstr "Seçilen şirket bir müşteri değil" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" -msgstr "" +msgstr "Stok tahsis notları" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" -msgstr "" +msgstr "Bir stok kalemleri listesi girilmelidir" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" -msgstr "" +msgstr "Stok birleştirme notları" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" -msgstr "" +msgstr "Farklı tedarikçilere izin ver" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" -msgstr "" +msgstr "Farklı tedarikçi parçalarına sahip stokları birleştirmeye izin ver" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" -msgstr "" +msgstr "Farklı durumlara sahip kalemlere izin ver" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" -msgstr "" +msgstr "Farklı durum kodlarına sahip stokları birleştirmeye izin ver" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" -msgstr "" +msgstr "En az iki stok kalemi girilmelidir" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" -msgstr "" +msgstr "Değişiklik Yok" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" -msgstr "" +msgstr "Stok Kalemi birincil anahtar (PK) değeri" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" -msgstr "" +msgstr "Stok kalemi mevcut stokta yok" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" -msgstr "" +msgstr "Stok kalemi zaten stokta" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" -msgstr "" +msgstr "Miktar negatif olamaz" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" -msgstr "" +msgstr "Stok aktarım notları" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" -msgstr "" +msgstr "Mevcut stokla birleştir" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" -msgstr "" +msgstr "Mümkünse iade edilen ürünleri mevcut stoklarla birleştir" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" -msgstr "" +msgstr "Sıradaki Seri Numarası" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" -msgstr "" +msgstr "Önceki Seri Numarası" #: stock/status_codes.py:11 msgid "OK" @@ -8959,11 +9116,11 @@ msgstr "Stok manuel olarak çıkarıldı" #: stock/status_codes.py:56 msgid "Serialized stock items" -msgstr "" +msgstr "Seri numaralı stok kalemleri" #: stock/status_codes.py:58 msgid "Returned to stock" -msgstr "" +msgstr "Stoğa geri alındı" #: stock/status_codes.py:61 msgid "Location changed" @@ -8975,7 +9132,7 @@ msgstr "Stok Güncellendi" #: stock/status_codes.py:65 msgid "Installed into assembly" -msgstr "Montajda kullanıldı" +msgstr "Montaj yerine takıldı" #: stock/status_codes.py:66 msgid "Removed from assembly" @@ -8983,7 +9140,7 @@ msgstr "Montajdan çıkarıldı" #: stock/status_codes.py:68 msgid "Installed component item" -msgstr "Bileşen ögesinde kullanıldı" +msgstr "Takılan bileşen" #: stock/status_codes.py:69 msgid "Removed component item" @@ -8999,39 +9156,39 @@ msgstr "Alt ögeyi ayır" #: stock/status_codes.py:76 msgid "Merged stock items" -msgstr "Stok parçalarını birleştir" +msgstr "Birleştirilen stok kalemleri" #: stock/status_codes.py:79 msgid "Converted to variant" -msgstr "" +msgstr "Varyanta dönüştürüldü" #: stock/status_codes.py:82 msgid "Build order output created" -msgstr "Yapım emri çıktısı oluşturuldu" +msgstr "Üretim emri çıktısı oluşturuldu" #: stock/status_codes.py:83 msgid "Build order output completed" -msgstr "Yapım emri çıktısı tamamlandı" +msgstr "Üretim emri çıktısı tamamlandı" #: stock/status_codes.py:84 msgid "Build order output rejected" -msgstr "" +msgstr "Üretim emri çıktısı reddedildi" #: stock/status_codes.py:85 msgid "Consumed by build order" -msgstr "" +msgstr "Üretim emri tarafından tüketildi" #: stock/status_codes.py:88 msgid "Shipped against Sales Order" -msgstr "" +msgstr "Satış siparişi kapsamında sevk edildi" #: stock/status_codes.py:91 msgid "Received against Purchase Order" -msgstr "" +msgstr "Satın alma siparişi kapsamında teslim alındı" #: stock/status_codes.py:94 msgid "Returned against Return Order" -msgstr "" +msgstr "İade siparişine karşılık iade edildi" #: stock/status_codes.py:97 msgid "Sent to customer" @@ -9043,15 +9200,15 @@ msgstr "Müşteriden geri döndü" #: templates/403.html:6 templates/403.html:10 templates/403_csrf.html:7 msgid "Permission Denied" -msgstr "" +msgstr "İzin Reddedildi" #: templates/403.html:11 msgid "You do not have permission to view this page." -msgstr "" +msgstr "Bu sayfayı görüntülemek için izniniz yok." #: templates/403_csrf.html:11 msgid "Authentication Failure" -msgstr "" +msgstr "Kimlik Doğrulaması Başarısız" #: templates/403_csrf.html:12 msgid "You have been logged out from InvenTree." @@ -9317,149 +9474,149 @@ msgstr "" #: users/models.py:529 msgid "Chosen display name for the user" -msgstr "" +msgstr "Kullanıcının görünen adı" #: users/models.py:535 msgid "Position" -msgstr "" +msgstr "Konumu" #: users/models.py:536 msgid "Main job title or position" -msgstr "" +msgstr "Ana unvanı veya pozisyonu" #: users/models.py:543 msgid "User status message" -msgstr "" +msgstr "Kullanıcı durum mesajı" #: users/models.py:550 msgid "User location information" -msgstr "" +msgstr "Kullanıcı konum bilgisi" #: users/models.py:555 msgid "User is actively using the system" -msgstr "" +msgstr "Kullanıcı, sistemi aktif kullanıyor" #: users/models.py:562 msgid "Preferred contact information for the user" -msgstr "" +msgstr "Kullanıcının tercih edilen iletişim bilgileri" #: users/models.py:568 msgid "User Type" -msgstr "" +msgstr "Kullanıcı Türü" #: users/models.py:569 msgid "Which type of user is this?" -msgstr "" +msgstr "Bu, hangi tür kullanıcı?" #: users/models.py:575 msgid "Organisation" -msgstr "" +msgstr "Organizasyon" #: users/models.py:576 msgid "Users primary organisation/affiliation" -msgstr "" +msgstr "Kullanıcının ana organizasyonu/ilişkisi" #: users/models.py:584 msgid "Primary Group" -msgstr "" +msgstr "Birincil Grup" #: users/models.py:585 msgid "Primary group for the user" -msgstr "" +msgstr "Kullanıcının birincil grubu" #: users/ruleset.py:26 msgid "Admin" -msgstr "" +msgstr "Yönetici" #: users/ruleset.py:32 msgid "Purchase Orders" -msgstr "Satın Alma Emirleri" +msgstr "Satın Alma Siparişleri" #: users/ruleset.py:33 msgid "Sales Orders" -msgstr "Satış Emirleri" +msgstr "Satış Siparişleri" #: users/ruleset.py:34 msgid "Return Orders" -msgstr "" +msgstr "İade Emirleri" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Kullanıcı Adı" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Adı" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Kullanıcının adı" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Soyadı" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Kullanıcının soyadı" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Kullanıcının e-posta adresi" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Personel" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Bu kullanıcının personel izinleri var mı" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Süper Kullanıcı" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Bu kullanıcı bir süper kullanıcı mı" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" -msgstr "Bu kullanıcı hesabı etkin mi" +msgstr "Bu kullanıcı hesabı aktif mi" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" -msgstr "" +msgstr "Bu alanı sadece bir yönetici değiştirebilir" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" -msgstr "" +msgstr "Parola" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" -msgstr "" +msgstr "Kullanıcının parolası" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" -msgstr "" +msgstr "Uyarıları yok say" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" -msgstr "" +msgstr "Şifre kuralları uyarılarını yok say" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" -msgstr "" +msgstr "Kullanıcı yaratmak için yetkiniz yok" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Kullanıcı hesabınız oluşturulmuştur." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Giriş yapmak için lütfen şifre sıfırlama fonksiyonunu kullanınız" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "InvenTree'ye Hoşgeldiniz" diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po index e16b1afdab..efae01509d 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "Кінцева точка API не знайдена" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "Для масових операцій необхідно надати перелік сутностей або фільтрів" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "Сутності необхідно надати списком" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "Надано неправильний список сутностей" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "Фільтри необхідно надавати у вигляді словника" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "Надано неправильні фільтри" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "Немає сутностей що відповідають наданим критеріям" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "У користувача немає дозволу на перегляд цієї моделі" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Email (ще раз)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Підтвердження адреси електронної пошти" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "Ви повинні використовувати щоразу однаковий email." -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Вказана основна адреса електронної пошти недійсна." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Наданий домен електронної пошти не затверджено." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Не вдалося перетворити {original} на {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Невірна кількість" @@ -112,13 +104,13 @@ msgstr "Введіть дату" msgid "Invalid decimal value" msgstr "Неправильне десяткове значення" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Нотатки" @@ -131,75 +123,75 @@ msgstr "Значення '{name}' не відповідає шаблону фо msgid "Provided value does not match required pattern: " msgstr "Надане значення не відповідає обов'язковому шаблону: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "Неможливо серіалізувати більше ніж 1000 сутностей за раз" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Пустий серійний номер" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Видаліть HTML тег з цього значення" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "Дані містять заборонений вміст у форматі Markdown" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Помилка підключення" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "Сервер відправив некоректний код статусу" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Відбулося виключення" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "Сервер повернув невірне значення Content-Length" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Розмір зображення занадто великий" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "Розмір зображення перевищує максимально дозволений розмір" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Віддалений сервер повернув пусту відповідь" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "" @@ -207,11 +199,11 @@ msgstr "" msgid "Log in to the app" msgstr "Авторизуватися в додатку" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Електронна пошта" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "Необхідно увімкнути двофакторну автентифікацію, перед тим як робити будь-що інше." @@ -255,133 +247,124 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Назва" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Опис" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Опис (опціонально)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Шлях" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Примітки в Markdown (опціонально)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Помилка сервера" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Зображення" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Китайська (спрощена)" msgid "Chinese (Traditional)" msgstr "Китайська (Традиційна)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "Деталь" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Розхідний матеріал" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Збірка" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Тестуємо" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Доступно" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Місце" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "" msgid "Reference" msgstr "" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Обрати деталь для створення" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Кількість" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" +#: build/serializers.py:1121 +msgid "All Items" msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Дозволити варіанти" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "У виробництві" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "" msgid "Cancelled" msgstr "" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Користувач" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Ціна" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Назва" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Посилання" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Коментар" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "Дата завантаження" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "Дата завантаження файлу" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "Розмір файлу" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "Розмір файлу в байтах" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "Етикетка" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "Колір" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "Модель" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "Список вибору" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "Заблоковано" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Прапорець" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Шаблон" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Дані" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Примітка" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "" @@ -2351,93 +2359,101 @@ msgstr "" msgid "Items have been received against a return order" msgstr "" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Компонент" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Доступний для продажу" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Віртуальний" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Показати пов'язані деталі" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "Чи призначені групи користувачеві повинні бути видалені, якщо вони не є резервним сервером IdP. Відключення цього налаштування може спричинити проблеми безпеки" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "Позиція активна" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "Позиція постачальника активна" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "Внутрішня позиція активна" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Виробник" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Позиція виробника" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Базова позиція" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Обрати позицію" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 -msgid "Select manufacturer part" +#: company/models.py:792 +msgid "Primary" msgstr "" -#: company/models.py:794 -msgid "URL for external supplier part link" +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" msgstr "" #: company/models.py:803 +msgid "Select manufacturer part" +msgstr "" + +#: company/models.py:810 +msgid "URL for external supplier part link" +msgstr "" + +#: company/models.py:819 msgid "Supplier part description" msgstr "" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "Базова вартість" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Мінімальний платіж (напр. комісія за збереження)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "В наявності" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Дійсно" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Внутрішній компонент" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "" -#: order/models.py:504 -msgid "User or group responsible for this order" +#: order/models.py:506 +msgid "Updated At" msgstr "" #: order/models.py:515 +msgid "User or group responsible for this order" +msgstr "" + +#: order/models.py:526 msgid "Point of contact for this order" msgstr "" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "" -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "" @@ -5532,1174 +5613,1226 @@ msgstr "" msgid "Reject" msgstr "" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "Глибина" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "Батьківський елемент" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "Фільтр за батьківською категорією" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Позиції" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "Неможливо видалити цю позицію, оскільки вона заблокована" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "Неможливо видалити цю позицію, оскільки вона ще активна" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "Неможливо видалити цю позицію, бо вона використовується у збірці" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Назва позиції" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Це шаблон" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "Ця позиція є шаблоном?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Опис позиції (опціонально)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Ревізія" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "Ревізія" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Мінімальний запас" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Мінімально дозволений рівень запасів" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Одиниці виміру для цієї позиції" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "Чи можна побудувати цю позицію з інших компонентів?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Дата" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Тестова назва" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Позиція 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Позиція 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "Результати" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Виробничий номер позиції" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Початковий запас" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Наявне зображення" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Мінімальна ціна" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Максимальна ціна" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,108 @@ msgstr "" msgid "No matching action found" msgstr "" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,7 +7409,7 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "" #: plugin/builtin/integration/core_notifications.py:132 @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,7 +7669,7 @@ msgid "Key of plugin" msgstr "" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "" @@ -7763,7 +7896,7 @@ msgid "Installation not confirmed" msgstr "" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "" #: plugin/serializers.py:188 @@ -8072,7 +8205,7 @@ msgstr "" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8097,7 +8230,7 @@ msgstr "" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "" @@ -8130,495 +8263,519 @@ msgstr "" msgid "No result" msgstr "" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "" msgid "Return Orders" msgstr "" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Ім`я" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Прізвище" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Адреса електронної пошти користувача" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Персонал" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "" diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po index 88b816d41b..4d88bc8d5e 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: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "API endpoint không tồn tại" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "Không có dữ liệu được cung cấp" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "Người dùng không được phân quyền xem mẫu này" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "Email (nhắc lại)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "Xác nhận địa chỉ email" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 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/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "Địa chỉ email chính đã cung cấp không hợp lệ." -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "Miền email được cung cấp không được phê duyệt." @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "Không thể chuyển đổi {original} sang {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "Số lượng cung cấp không hợp lệ" @@ -112,13 +104,13 @@ msgstr "Nhập ngày" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "Ghi chú" @@ -131,75 +123,75 @@ msgstr "Giá trị '{name}' không xuất hiện ở định dạng mẫu" msgid "Provided value does not match required pattern: " msgstr "Giá trị được cung cấp không khớp với mẫu bắt buộc: " -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "Chuỗi số sê-ri trống" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "Trùng lặp sê-ri" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, 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:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "Không tìm thấy số sê-ri" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "Xóa thẻ HTML từ giá trị này" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "Lỗi kết nối" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 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:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "Xảy ra Exception" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 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:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "Hình ảnh quá lớn" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 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:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "Máy chủ trả về phản hồi trống" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "URL được cung cấp không phải là tệp hình ảnh hợp lệ" @@ -207,11 +199,11 @@ msgstr "URL được cung cấp không phải là tệp hình ảnh hợp lệ" msgid "Log in to the app" msgstr "" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -255,133 +247,124 @@ msgstr "Tham chiếu phải phù hợp với mẫu yêu cầu" msgid "Reference number is too large" msgstr "Số tham chiếu quá lớn" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "Lựa chọn sai" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "Tên" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "Mô tả" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "Mô tả (tùy chọn)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "Đường dẫn" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 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:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Ghi chú markdown (không bắt buộc)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "Dữ liệu mã vạch" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "Dữ liệu mã vạch của bên thứ ba" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "Dữ liệu băm mã vạch" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 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:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "Mã vạch đã tồn tại" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "Lỗi máy chủ" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "Lỗi đã được ghi lại bởi máy chủ." -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "Hình ảnh" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "Phải là một số hợp lệ" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "Tiền tệ" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "Chọn tiền tệ trong các tùy chọn đang có" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "Giá trị không hợp lệ" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "Hình ảnh từ xa" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "URL của tệp hình ảnh bên ngoài" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "Chức năng tải hình ảnh từ URL bên ngoài không được bật" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" msgstr "" @@ -537,11 +520,11 @@ msgstr "Tiếng Trung (Giản thể)" msgid "Chinese (Traditional)" msgstr "Tiếng Trung (Phồn thể)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "" @@ -553,30 +536,30 @@ msgstr "Đơn vị vật lý không hợp lệ" msgid "Not a valid currency code" msgstr "Mã tiền tệ không hợp lệ" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "Trạng thái đặt hàng" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "Phiên bản cha" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "" msgid "Part" msgstr "Nguyên liệu" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "Danh mục" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "Xây dựng nguồn gốc" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "Đã gán cho tôi" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "Đã gán cho" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "Bạn dựng phải được hủy bỏ trước khi có thể xóa được" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "Vật tư tiêu hao" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "Tuỳ chọn" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "Lắp ráp" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "Đã theo dõi" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "Có thể kiểm tra" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "Đã cấp phát" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "Đã dùng" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "Có sẵn" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "Bật đơn hàng" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "Tạo đơn hàng" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "Địa điểm" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "Tạo đơn hàng" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "Dây chuyền BOM chưa được xác thực" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "Không thể tạo đơn hàng cho hàng hoá đang không hoạt động" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "Không thể tạo đơn hàng cho hàng hoá đang mở khoá" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "Phải chọn người dùng hoặc nhóm" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "Sản phẩm đơn đặt bản dựng không thể thay đổi được" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "Tham chiếu đơn đặt bản dựng" msgid "Reference" msgstr "Tham chiếu" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "Mô tả ngắn về phiên bạn (Tùy chọn)" -#: build/models.py:266 -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:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "Chọn sản phẩm để xây dựng" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" -#: build/models.py:285 -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:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "Địa điểm nguồn" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "Chọn địa điểm để lấy trong kho cho bản dựng này (để trống để lấy từ bất kỳ vị trí kho nào)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "Địa điểm đích" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "Chọn địa điểm nơi hàng hóa hoàn thiện sẽ được lưu kho" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "Xây dựng số lượng" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "Số kho hàng để dựng" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "Những mục hoàn thành" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "Số sản phẩm trong kho đã được hoàn thiện" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "Trnạg thái bản dựng" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "Mã trạng thái bản dựng" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "Mã lô hàng" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "Mã lô cho đầu ra bản dựng này" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "Ngày tạo" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "Ngày hoàn thành mục tiêu" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ngày mục tiêu để hoàn thành bản dựng. Bản dựng sẽ bị quá hạn sau ngày này." -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "Ngày hoàn thành" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "hoàn thành bởi" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "Cấp bởi" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "Người dùng người đã được phân công cho đơn đặt bản dựng này" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Chịu trách nhiệm" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "Người dùng hoặc nhóm có trách nhiệm với đơn đặt bản dựng này" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "Liên kết bên ngoài" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "Liên kết đến URL bên ngoài" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "Độ ưu tiên" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "Độ quan trọng của đơn đặt bản dựng" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "Mã dự án" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "Mã dự án cho đơn đặt bản dựng này" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "Không thể dỡ bỏ tác vụ để hoàn tất phân bổ" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "Đơn đặt bản dựng {build} đã được hoàn thành" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "Một đơn đặt bản dựng đã được hoàn thành" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "Số sê-ri phải được cung cấp cho hàng hoá có thể theo dõi" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "Không có đầu ra bản dựng đã được chỉ ra" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "Đầu ra bản dựng đã được hoàn thiện" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "Đầu ra bản dựng không phù hợp với đơn đặt bản dựng" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "Số lượng phải lớn hơn 0" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "Số lượng không thể lớn hơn số lượng đầu ra" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Tạo đầu ra {serial} chưa vượt qua tất cả các bài kiểm tra" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "Tạo mục đơn hàng" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "Dựng đối tượng" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "Dựng đối tượng" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "Số lượng" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "Yêu cầu số lượng để dựng đơn đặt" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Xây dựng mục phải xác định đầu ra, bởi vì sản phẩm chủ được đánh dấu là có thể theo dõi" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "Hàng trong kho đã chọn không phù hợp với đường BOM" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "Số lượng phải là 1 cho kho sê ri" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Số lượng được phân bổ ({q}) không thể vượt quá số lượng có trong kho ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "Kho hàng đã bị phân bổ quá đà" -#: build/models.py:1810 order/models.py:2550 -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:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "Số lượng phải là 1 cho kho sê ri" - -#: build/models.py:1876 -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:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "Kho hàng" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "Kho hàng gốc" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "Số lượng kho hàng cần chỉ định để xây dựng" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "Cài đặt vào" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "Kho hàng đích" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "Tạo cấp" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "Tên sản phẩm" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "Nhãn mã dự án" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "Đầu ra xây dựng không hợp với bản dựng cha" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "Đầu ra sản phẩm không phù hợp với bản dựng đơn đặt hàng" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "Đầu ra bản dựng này đã được hoàn thành" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "Đầu ra bản dựng này chưa được phân bổ đầy đủ" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "Điền số lượng cho đầu ra bản dựng" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "Số lượng nguyên dương cần phải điền cho sản phẩm có thể theo dõi" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Cần nhập số lượng nguyên dương, bởi vì hóa đơn vật liệu chứa sản phẩm có thể theo dõi" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "Số sê-ri" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "Nhập vào số sêri cho đầu ra bản dựng" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "Vị trí tồn kho cho sản phẩm" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "Số sêri tự cấp" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "Tự động cấp số seri phù hợp cho hàng hóa được yêu cầu" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "Số sêri sau đây đã tồn tại hoặc không hợp lệ" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "Danh sách đầu ra bản dựng phải được cung cấp" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "Vị trí kho cho đầu ra phế phẩm" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "Hủy phân bổ" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "Hủy bất kỳ phân kho nào cho đầu ra phế phẩm" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "Lý do loại bỏ đầu ra bản dựng" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "Vị trí cho đầu ra bản dựng hoàn thiện" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "Chấp nhận phân kho dang dở" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "Hoàn hiện đầu ra nếu kho chưa được phân bổ hết chỗ trống" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "Xử lý phân bổ kho hàng" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "Tiêu thụ bất kỳ hàng tồn kho nào đã được phân bổ cho dự án này." -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "Xóa toàn bộ đầu ra chưa hoàn thành" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "Xóa bất kỳ đầu ra bản dựng nào chưa được hoàn thành" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "Chưa được cấp phép" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "Chấp nhận trạng thái tiêu hao bởi đơn đặt bản dựng này" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "Phân bổ trước khi hoàn thiện đơn đặt bản dựng này" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "Kho quá tải" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "Bạn muốn thế nào để xử lý hàng trong kho được gán thừa cho đơn đặt bản dựng" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "Một vài hàng hóa đã được phân bổ quá thừa" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "Chấp nhận chưa phân bổ được" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "Chấp nhận hàng hóa không được phân bổ đầy đủ vào đơn đặt bản dựng này" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "Kho được yêu cầu chưa được phân bổ hết không gian" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "Chấp nhận không hoàn thành" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "Chấp nhận số yêu cầu của đầu ra bản dựng chưa được hoàn thành" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "Số lượng bản dựng được yêu cầu chưa được hoàn thành" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "Tạo đơn hàng có các đơn hàng đang mở" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "Tạo đơn hàng phải ở trạng thái sản xuất." -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "Đơn đặt bản dựng có đầu ra chưa hoàn thiện" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "Lộ giới" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "Đầu ra bản dựng" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "Đầu ra bản dựng phải chỉ đến bản dựng tương ứng" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "Mục chi tiết bản dựng" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part phải trỏ đến phần tương tự của đơn đặt bản dựng" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "Hàng hóa phải trong kho" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Số lượng có sẵn ({q}) đã bị vượt quá" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "Đầu ra bản dựng phải được xác định cho việc phân sản phẩm được theo dõi" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Đầu ra bản dựng không thể chỉ định cho việc phân sản phẩm chưa được theo dõi" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "Hàng hóa phân bổ phải được cung cấp" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "Vị trí kho nơi sản phẩm được lấy ra (để trống để lấy từ bất kỳ vị trí nào)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "Ngoại trừ vị trí" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "Không bao gồm hàng trong kho từ vị trí đã chọn này" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "Kho trao đổi" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "Hàng trong kho thuộc nhiều vị trí có thể dùng thay thế được cho nhau" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "Kho thay thế" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "Cho phép phân kho sản phẩm thay thế" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "Mục tùy chọn" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "Phân bổ các mục hóa đơn vật liệu tùy chọn đến đơn đặt bản dựng" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "Không thể khởi động tác vụ phân bổ tự động." +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "BOM liên quan" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "ID hàng hoá BOM" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "Tên hàng hoá BOM" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "Sản phẩm nhà cung cấp" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "Số lượng đã phân bổ" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "Tạo liên quan" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "Tên danh mục hàng hoá" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "Có thể theo dõi" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "Được kế thừa" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "Cho phép biến thể" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "Mục BOM" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "Đang sản xuất" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "Kho ngoài" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "Số hàng tồn" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "Kho hàng thay thế" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "Hàng tồn kho có sẵn" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "" @@ -1474,67 +1478,71 @@ msgstr "Chờ" msgid "Cancelled" msgstr "Đã hủy" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "Hoàn thành" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "Kho được yêu cầu cho đặt hàng bản dựng" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "Đơn đặt bản dựng quá hạn" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "Đặt hàng bản dựng {bo} đang quá hạn" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "Đường dẫn" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "File" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "Không có quyền xoá file đính kèm" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "Không có quyền xoá file đính kèm" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "Sai mã tiền tệ" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "Trùng mã tiền tệ" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "Mã tiền tệ không đúng" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "Không phần mở rộng" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "Nhãn mã dự án" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "Đã cập nhật" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "Nhãn thời gian của lần cập cuối cùng" @@ -1546,778 +1554,778 @@ msgstr "" msgid "User who last updated this object" msgstr "" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "Mã dự án duy nhất" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "Mô tả dự án" -#: common/models.py:185 +#: common/models.py:187 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:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "Giá trị cài đặt" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "Giá trị đã chọn không hợp lệ" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "Giá trị phải là kiểu boolean" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "Giá trị phải là một số nguyên dương" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "Chuỗi khóa phải duy nhất" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "Người dùng" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "Số lượng giá phá vỡ" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "Giá" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "Đơn vị giá theo số lượng cụ thể" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "Đầu mối" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "Đầu mối tại điểm webhook được nhận" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "Tên của webhook này" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "Hoạt động" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "Webhook có hoạt động không" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "Chữ ký số" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "Chữ ký số để truy cập" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "Bí mật" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "Mã bí mật dùng chung cho HMAC" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "Mã Tin nhắn" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "Định danh duy nhất cho tin nhắn này" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "Máy chủ" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "Mãy chủ từ tin nhắn này đã được nhận" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "Đầu mục" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "Đầu mục tin nhắn" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "Thân" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "Thân tin nhắn này" -#: common/models.py:1590 +#: common/models.py:1607 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:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "Làm việc vào" -#: common/models.py:1596 +#: common/models.py:1613 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:1722 +#: common/models.py:1739 msgid "Id" msgstr "Mã" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "Tiêu đề" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Liên kết" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "Đã công bố" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "Tác giả" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "Tóm tắt" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "Đọc" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "Tin này đã được đọc?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "Tệp ảnh" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1823 +#: common/models.py:1840 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:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "Tên đơn vị" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "Biểu tượng" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "Biểu tượng đơn vị tùy chọn" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "Định nghĩa" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "Định nghĩa đơn vị" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "Đính kèm" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "Tập tin bị thiếu" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "Thiếu liên kết bên ngoài" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "Chọn file đính kèm" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "Bình luận" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "Giá trị" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "Đã tạo" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "Cập nhật lần cuối" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "Mẫu tham số" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "Tham số hộp kiểm tra không thể có đơn vị" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "Tham số hộp kiểm tra không thể có lựa chọn" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "Lựa chọn phải duy nhất" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "Tên tham số mẫu phải là duy nhất" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "Tên tham số" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "Đơn vị" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "Đơn vị vật lý cho tham số này" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "Mô tả tham số" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "Ô lựa chọn" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "Tham số này có phải là hộp kiểm tra?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "Lựa chọn" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "Lựa chọn hợp lệ từ tham số này (ngăn cách bằng dấu phẩy)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "Đã bật" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" msgstr "" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" msgstr "" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "Lựa chọn sai cho giá trị tham số" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "Mẫu" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "Dữ liệu" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "Giá trị tham số" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "Ghi chú" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "Trường ghi chú tùy chọn" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "Ngữ cảnh" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "Kết quả" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" msgstr "" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Khóa" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} đã bị hủy" msgid "A order that is assigned to you was canceled" msgstr "Một đơn đặt từng được phân công cho bạn đã bị hủy bỏ" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "Mục đã nhận" @@ -2351,93 +2359,101 @@ msgstr "Hàng đã được nhận theo đơn đặt mua" msgid "Items have been received against a return order" msgstr "Hàng đã nhận theo đơn hàng trả lại" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "Đang chạy" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "Công việc chờ xử lý" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "Tác vụ theo lịch" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "Tác vụ thất bại" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "ID tác vụ" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "ID tác vụ duy nhất" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "Khoá" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "Thời gian khóa" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "Tên công việc" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "Chức năng" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "Tên chức năng" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "Đối số" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "Đối số công việc" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "Đối số từ khóa" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "Đối số từ khóa công việc" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "Tên tập tin" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "" @@ -2445,1128 +2461,1157 @@ msgstr "" msgid "No group" msgstr "Không có nhóm" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "URL trang web đã bị khóa bởi cấu hình" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "Cần khởi động lại" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "Một thiết lập đã bị thay đổi yêu cầu khởi động lại máy chủ" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "Chuyển dữ liệu chờ xử lý" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "Số đợt nâng cấp cơ sở dữ liệu chờ xử lý" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "Tên thực thể máy chủ" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "Mô tả chuỗi cho thực thể máy chủ" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "Sử dụng tên thực thể" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "Sử dụng tên thực thể trên thanh tiêu đề" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "Cấm hiển thị `giới thiệu`" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "Chỉ hiển thị cửa sổ `giới thiệu` với siêu người dùng" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "Tên công ty" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "Tên công ty nội bộ" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "URL cơ sở" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "URL cơ sở cho thực thể máy chủ" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "Tiền tệ mặc định" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "Chọn tiền tệ chính khi tính giá" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "Tần suất cập nhật tiền tệ" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "Mức độ thường xuyên để cập nhật tỉ giá hối đoái (điền 0 để tắt)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "ngày" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "Phần mở rộng cập nhật tiền tệ" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "Phần mở rộng cập nhật tiền tệ được sử dụng" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "Tải về từ URL" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "Cho phép tải ảnh và tệp tin từ xa theo URL bên ngoài" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "Giới hạn kích thước tải xuống" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "Kích thước tải xuống tối đa với hình ảnh từ xa" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "User-agent được dùng để tải xuống theo URL" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "Cho phép ghi đè user-agent được dùng để tải về hình ảnh và tệp tin từ xa theo URL bên ngoài (để trống nghĩa là dùng mặc định)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "Thời gian kiểm tra bản cập nhật" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "Mức độ thường xuyên để kiểm tra bản cập nhật (điền 0 để tắt)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "Sao lưu tự động" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "Bật tính năng sao lưu tự động cơ sở dữ liệu và tệp tin đa phương tiện" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "Khoảng thời gian sao lưu tự động" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "Xác định số ngày giữa các kỳ sao lưu tự động" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "Khoảng thời gian xóa tác vụ" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "Kết quả tác vụ chạy ngầm sẽ bị xóa sau số ngày được chỉ định" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "Khoảng thời gian xóa nhật ký lỗi" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "Nhật ký lỗi sẽ bị xóa sau số ngày được chỉ định" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "Khoảng thời gian xóa thông báo" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "Thông báo sẽ bị xóa sau số ngày được chỉ định" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "Hỗ trợ mã vạch" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "Bật hỗ trợ máy quét mã vạch trong giao diện web" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "Độ trễ quét mã vạch" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "Thời gian trễ xử lý đầu đọc mã vạch" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "Hỗ trợ mã vạch qua webcam" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "Cho phép quét mã vạch qua webcam bên trong trình duyệt" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "Phiên bản Sản phẩm" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "Bật trường phiên bản cho sản phẩm" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "Mẫu IPN" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "Mẫu dùng nhanh phổ biến dành cho tìm IPN sản phẩm" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "Cho phép trùng IPN" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "Cho phép nhiều sản phẩm dùng IPN giống nhau" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "Cho phép sửa IPN" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "Cho phép đổi giá trị IPN khi sửa một sản phẩm" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "Sao chép dữ liệu BOM của sản phẩm" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "Sao chép dữ liệu BOM mặc định khi nhân bản 1 sản phẩm" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "Sao chép dữ liệu tham số sản phẩm" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "Sao chép dữ liệu tham số mặc định khi nhân bản 1 sản phẩm" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "Chép thông tin kiểm thử sản phẩm" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "Sao chép dữ liệu kiểm thử mặc định khi nhân bản 1 sản phẩm" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "Sao chéo mẫu tham số danh mục" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "Sao chéo mẫu tham số danh mục khi tạo 1 sản phẩm" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "Sản phẩm là mẫu bởi mặc định" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "Sản phẩm có thể lắp giáp từ thành phần khác theo mặc định" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "Thành phần" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "Sản phẩm có thể được sử dụng mặc định như thành phần phụ" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "Có thể mua" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "Sản phẩm mặc định có thể mua được" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "Có thể bán" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "Sản phẩm mặc định có thể bán được" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "Sản phẩm mặc định có thể theo dõi được" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "Ảo" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "Sản phẩm mặc định là số hóa" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "Hiển thị sản phẩm liên quan" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "Hiện sản phẩm liên quan cho 1 sản phẩm" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "Số liệu tồn kho ban đầu" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "Cho phép tạo tồn kho ban đầu khi thêm 1 sản phẩm mới" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "Dữ liệu nhà cung cấp ban đầu" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Cho phép tạo dữ liệu nhà cung cấp ban đầu khi thêm 1 sản phẩm mới" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "Định dạng tên sản phẩm hiển thị" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "Định dạng để hiển thị tên sản phẩm" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "Biểu tượng mặc định của danh mục sản phẩm" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "Biểu tượng mặc định của danh mục sản phẩm (để trống nghĩa là không có biểu tượng)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối thiểu" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Số vị trí thập phân tối thiểu cần hiển thị khi tạo dữ liệu giá" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối đa" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Số vị trí thập phân tối đa cần hiển thị khi tạo dữ liệu giá" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "Sử dụng giá bán nhà cung cấp" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Bao gồm giá phá vỡ cả nhà cung cấp trong tính toán giá tổng thể" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "Ghi đè lịch sử mua hàng" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Giá đơn hàng đặt mua trước đó ghi đè giá phá vỡ của nhà cung cấp" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "Sử dụng giá hàng hóa trong kho" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Dùng giá bán từ dữ liệu kho nhập vào thủ công đối với bộ tính toán giá bán" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "Tuổi giá kho hàng" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Loại trừ hàng hóa trong kho cũ hơn số ngày ngày từ bảng tính giá bán" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "Sử dụng giá biến thể" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "Bao gồm giá biến thể trong bộ tính toán giá tổng thể" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "Chỉ các biến thể hoạt động" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "Chỉ sử dụng sản phẩm biến thể hoạt động để tính toán giá bán biến thể" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "Tần suất tạo lại giá" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "Số ngày trước khi giá sản phẩm được tự động cập nhật" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "Giá nội bộ" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "Bật giá nội bộ cho sản phẩm" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "Ghi đè giá nội bộ" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "Nếu khả dụng, giá nội bộ ghi đè tính toán khoảng giá" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "Bật in tem nhãn" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "Bật chức năng in tem nhãn từ giao diện web" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "DPI hỉnh ảnh tem nhãn" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Độ phân giải DPI khi tạo tệp hình ảnh để cung cấp cho plugin in ấn tem nhãn" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "Bật báo cáo" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "Cho phép tạo báo cáo" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "Chế độ gỡ lỗi" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "Tạo báo cáo trong chế độ gỡ lỗi (đầu ra HTML)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "Khổ giấy" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "Kích thước trang mặc định cho báo cáo PDF" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "Bắt buộc đơn vị tham số" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "Nếu đơn vị được cung cấp, giá trị tham số phải phù hợp với các đơn vị xác định" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "Sê ri toàn cục duy nhất" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "Số sê ri cho hàng trong kho phải là duy nhất trong toàn hệ thống" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "Xóa kho đã hết hàng" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "Mẫu sinh mã theo lô" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "Mẫu tạo mã theo lô mặc định cho hàng trong kho" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "Quá hạn trong kho" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "Bật chức năng quá hạn tồn kho" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "Bán kho quá hạn" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "Cho phép bán hàng kho quá hạn" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "Thời gian hàng cũ trong kho" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "Số ngày hàng trong kho được xác định là cũ trước khi quá hạn" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "Dựng kho quá hạn" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "Cho phép xây dựng với kho hàng quá hạn" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "Kiểm soát sở hữu kho" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "Bật chức năng kiểm soát sở hữu kho với địa điểm và hàng trong kho" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "Biểu tượng địa điểm kho mặc định" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "Biểu tượng địa điểm kho hàng mặc định (trống nghĩa là không có biểu tượng)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "Hiển thị hàng hóa đã lắp đặt" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "Hiển thị hàng trong kho đã được lắp đặt trên bảng kho" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "Mã tham chiếu đơn đặt bản dựng" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "Mẫu bắt buộc cho để trường tham chiếu đơn đặt bản dựng" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "Bật đơn hàng trả lại" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "Bật chức năng đơn hàng trả lại trong giao diện người dùng" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "Mẫu tham chiếu đơn hàng trả lại" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "Sửa đơn hàng trả lại đã hoàn thành" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "Cho phép sửa đơn hàng trả lại sau khi đã hoàn thành rồi" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt hàng" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "Mẫu bắt buộc để tạo trường tham chiếu đơn đặt hàng" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "Vận chuyển mặc định đơn đặt hàng" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "Cho phép tạo vận chuyển mặc định với đơn đặt hàng" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "Sửa đơn đặt hàng đã hoàn thành" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "Cho phép sửa đơn đặt hàng sau khi đã vận chuyển hoặc hoàn thành" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt mua" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "Mẫu bắt buộc cho để trường tham chiếu đơn đặt mua" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "Sửa đơn đặt mua đã hoàn thành" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Cho phép sửa đơn đặt mua sau khi đã vận chuyển hoặc hoàn thành" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "Tự động hoàn thành đơn đặt mua" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "Bật quên mật khẩu" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "Bật chức năng quên mật khẩu trong trang đăng nhập" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "Bật đăng ký" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "Cho phép người dùng tự đăng ký tại trang đăng nhập" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "Bật SSO" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "Cho phép SSO tại trang đăng nhập" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "Bật đăng ký SSO" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Cho phép người dùng tự đăng ký SSO tại trang đăng nhập" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "Yêu cầu email" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "Yêu cầu người dùng cung cấp email để đăng ký" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "Người dùng tự động điền SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "Tự động điền thông tin chi tiết từ dữ liệu tài khoản SSO" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "Thư 2 lần" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "Khi đăng ký sẽ hỏi người dùng hai lần thư điện tử của họ" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "Mật khẩu 2 lần" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "Khi đăng ký sẽ hỏi người dùng hai lần mật khẩu của họ" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "Các tên miền được phép" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Cấm đăng ký với 1 số tên miền cụ thể (dấu phẩy ngăn cách, bắt đầu với dấu @)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "Nhóm khi đăng ký" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "Bắt buộc MFA" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "Người dùng phải sử dụng bảo mật đa nhân tố." -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "Kiểm tra phần mở rộng khi khởi động" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Kiểm tra toàn bộ phần mở rộng đã được cài đặt khi khởi dộng - bật trong môi trường ảo hóa" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "Kiểm tra cập nhật plugin" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "Bật tích hợp URL" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "Bật phần mở rộng để thêm định tuyến URL" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "Bật tích hợp điều hướng" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "Bật phần mở rộng để tích hợp thanh định hướng" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "Bật tích hợp ứng dụng" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "Bật phần mở rộng để thêm ứng dụng" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "Cho phép tích hợp lập lịch" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "Bật phẩn mở rộng để chạy các tác vụ theo lịch" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "Bật tích hợp nguồn cấp sự kiện" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "Bật phần mở rộng để trả lời sự kiện bên trong" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1083 -msgid "Enable Stock History" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "Ngoại trừ vị trí bên ngoài" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "Giai đoạn kiểm kê tự động" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "Hiển thị tên đầy đủ của người dùng" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "Hiển thị tên đầy đủ thay vì tên đăng nhập" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" +msgid "Delete stocktake entries older than the specified number of days" msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "Hiển thị tên đầy đủ của người dùng" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "Hiển thị tên đầy đủ thay vì tên đăng nhập" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "" msgid "Manufacturer is Active" msgstr "" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "Nhà sản xuất" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "Doanh nghiêp" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "Doanh nghiệp" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "Mô tả công ty" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "Mô tả của công ty" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "Trang web" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "URL trang web của công ty" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "Số điện thoại" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "Số điện thoại liên hệ" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "Địa chỉ email liên hệ" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "Liên hệ" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "Đầu mối liên hệ" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "Liên kết đến thông tin công ty ngoài" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "Bạn có bán hàng cho công ty này?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "Bạn có mua hàng từ công ty này?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "Công ty này có sản xuất sản phẩm?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "Tiền tệ mặc định dùng cho công ty này" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "Địa chỉ" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "Địa chỉ" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "Chọn doanh nghiệp" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "Tiêu đề địa chỉ" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "Tiêu đề mô tả mục địa chỉ" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "Địa chỉ chính" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "Đặt làm địa chỉ chính" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "Dòng 1" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "Địa chỉ dòng 1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "Dòng 2" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "Địa chỉ dòng 2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "Mã bưu chính" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "Thành phố/Vùng" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "Mã bưu chính thành phố/vùng" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "Bang/Tỉnh" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "Bang hay tỉnh" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "Quốc gia" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "Địa chỉ quốc gia" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "Ghi chú vận chuyển" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "Ghi chú dành cho chuyển phát nhanh" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "Ghi chú nội bọ chuyển phát nhanh" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "Ghi chú nội bộ sử dụng cho chuyển phát nhanh" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "Liên kết thông tin địa chỉ (bên ngoài)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "Sản phẩm nhà sản xuất" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "Sản phẩm cơ bản" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "Chọn sản phẩm" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "Chọn nhà sản xuất" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "Mã số nhà sản xuất" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "URL cho liên kết sản phẩm của nhà sản xuất bên ngoài" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "Mô tả sản phẩm của nhà sản xuất" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "Đơn vị đóng gói phải tương thích với đơn vị sản phẩm cơ bản" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "Đơn vị đóng gói phải lớn hơn không" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "Sản phẩm nhà sản xuất đã liên kết phải tham chiếu với sản phẩm cơ bản tương tự" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "Nhà cung cấp" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "Chọn nhà cung cấp" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "Đơn vị quản lý kho nhà cung cấp" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "Chọn sản phẩm của nhà sản xuất" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "URL cho liên kết sản phẩm của nhà cung cấp bên ngoài" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "Mô tả sản phẩm nhà cung cấp" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "chi phí cơ sở" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "Thu phí tối thiểu (vd: phí kho bãi)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "Đóng gói" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "Đóng gói sản phẩm" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "Số lượng gói" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Tổng số lượng được cung cấp trong một gói đơn. Để trống cho các hàng hóa riêng lẻ." -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "nhiều" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "Đặt hàng nhiều" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "Số lượng có sẵn từ nhà cung cấp" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "Sẵn hàng đã được cập nhật" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "Ngày cập nhật cuối thông tin tồn kho" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "" - -#: company/serializers.py:218 +#: company/serializers.py:191 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:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "Còn hàng" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "" @@ -4318,119 +4367,119 @@ msgstr "Đã đặt" msgid "Invalid status code" msgstr "" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "Tập tin dữ liệu" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "Hợp lệ" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "Không rõ" @@ -4658,105 +4707,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "Tham chiếu đơn đặt" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "Tạo bởi" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "" + +#: order/api.py:233 +msgid "Updated After" +msgstr "" + +#: order/api.py:284 msgid "Has Pricing" msgstr "" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "Đặt hàng" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "Sản phẩm nội bộ" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "Đã hoàn thành" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "Đơn hàng" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "Đơn hàng" msgid "Sales Order" msgstr "Đơn đặt hàng" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "Tổng tiền" msgid "Total price for this order" msgstr "Tổng tiền cho đơn hàng hàng" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "Tiền tệ đơn đặt hàng" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "Tiền tệ cho đơn đặt này (để trống để sử dụng tiền mặc định)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "Liên hệ không phù hợp với doanh nghiệp đã chọn" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "Mô tả đơn đặt (tùy chọn)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "Mã dự án đã chọn cho đơn đặt hàng này" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "Liên kết đến trang bên ngoài" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Ngày mục tiêu" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "Ngày mong muốn giao được hàng. Đơn đặt sẽ quá hạn sau ngày này." -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "Ngày phát hành" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "Ngày đặt hàng đã phát hành" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "Người dùng hoặc nhóm có trách nhiệm với đơn đặt này" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "Đầu mối liên hệ của đơn đặt này" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "Địa chỉ công ty cho đơn đặt này" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "Mã đặt hàng" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "Trạng thái" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "Trạng thái đơn đặt mua" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "Doanh nghiệp từ những hàng hóa đang được đặt mua" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "Tham chiếu nhà cung cấp" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "Mã tham chiếu đơn đặt nhà cung cấp" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "nhận bởi" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "Ngày đặt hàng đã được hoàn thiện" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "Đích đến" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "Nhà cung cấp sản phẩm phải trùng với nhà cung cấp PO" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "Mục dòng không phù hợp với đơn đặt mua" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "Số lượng phải là số dương" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Khách hàng" -#: order/models.py:1325 +#: order/models.py:1340 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:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "Tham chiếu khách hàng " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "Mã tham chiếu đơn đặt của khách hàng" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "Ngày giao hàng" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "vận chuyển bằng" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1421 +#: order/models.py:1436 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:1425 +#: order/models.py:1440 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:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1439 +#: order/models.py:1454 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:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "Số lượng mặt hàng" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "Tham chiếu khoản riêng" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "Ghi chú khoản riêng" -#: order/models.py:1797 +#: order/models.py:1812 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:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "Mô tả khoản riêng (tùy chọn)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "Ngữ cảnh bổ sung" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "Đơn giá" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1890 +#: order/models.py:1907 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:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "Sản phẩm nhà cung cấp" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "Đã nhận" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "Số mục đã nhận" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "Giá mua" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "Giá đơn vị mua" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2093 +#: order/models.py:2111 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:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "Giá bán" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "Giá bán đơn vị" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "Đã chuyển" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "Số lượng đã vận chuyển" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "Ngày vận chuyển" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "Ngày giao hàng" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "Ngày giao hàng của vận chuyển" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "Kiểm tra bởi" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "Người dùng đã kiểm tra vận chuyển này" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Vận chuyển" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "Mã vận chuyển" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "Số theo dõi" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "Thông tin theo dõi vận chuyển" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "Mã hóa đơn" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "Số tham chiếu liên kết với hóa đơn" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "Vận đơn đã được gửi đi" -#: order/models.py:2381 +#: order/models.py:2399 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:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "Hàng trong kho chưa được giao" -#: order/models.py:2528 +#: order/models.py:2537 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:2531 +#: order/models.py:2540 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:2534 +#: order/models.py:2543 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:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "Số lượng phân bổ phải lớn hơn 0" + +#: order/models.py:2562 order/serializers.py:1560 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:2556 +#: order/models.py:2565 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:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Vận đơn không phù hợp với đơn bán hàng" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "Dòng" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "Tham chiếu vận đơn của đơn hàng bán" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "Hàng hóa" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "Chọn hàng trong kho để phân bổ" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "Nhập số lượng phân kho" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "Tham chiếu đơn hàng trả lại" -#: order/models.py:2726 +#: order/models.py:2737 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:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "Trạng thái đơn hàng trả lại" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3009 +#: order/models.py:3025 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:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "Ngày nhận được" -#: order/models.py:3025 -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:3041 +msgid "The date this return item was received" +msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "Kết quả" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "Kết quả cho hàng hóa dòng này" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "Chi phí gắn với hàng trả lại hoặc sửa chữa cho dòng hàng hóa này" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "Sao chép thông số" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "Mục dòng" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "Tên nhà cung cấp" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "Đơn đặt không thể bị hủy" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 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:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 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:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "Đơn đặt là không được mở" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "Tiền tệ giá mua" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "Mã sản phẩm nội bộ" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "Sản phẩm nhà cung cấp phải được chỉ định" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "Đơn đặt mua phải được chỉ định" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "Nhà cung cấp phải phù hợp với đơn đặt mua" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "Đơn đặt mua phải phù hợp với nhà cung cấp" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "Mục dòng" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "Chọn vị trí đích cho hàng hóa đã nhận" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "Nhập mã lô cho hàng trong kho đang đến" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ngày hết hạn" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "Nhập số sê ri cho hàng trong kho đang đến" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "Mã vạch" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "Mã vạch đã quét" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "Mã vạch đã được dùng" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "Dòng hàng hóa phải được cung cấp" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "Vị trí đích phải được chỉ ra" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "Giá trị mã vạch đã cung cấp phải duy nhất" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "Vận đơn đã hoàn thành" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "Tiền tệ giá bán" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "Chưa cung cấp thông tin vận chuyển" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 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:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "Số lượng phải là số dương" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "Nhập số sê ri để phân bổ" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "Vận đơn đã được chuyển đi" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 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:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "Không tìm thấy số sê ri sau đây" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "Dòng riêng biệt đơn hàng trả lại" -#: order/serializers.py:2036 +#: order/serializers.py:2000 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:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "Line item đã nhận được" -#: order/serializers.py:2076 +#: order/serializers.py:2040 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:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "Tiền tệ giá đồng hạng" @@ -5532,1174 +5613,1226 @@ msgstr "Hoàn tiền" msgid "Reject" msgstr "Từ chối" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "Đơn đặt mua quá hạn" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "Đơn đặt mua {po} quá hạn" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "Đơn bán hàng quá hạn" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "Đơn bán hàng {so} đã quá hạn" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "Danh mục sản phẩm" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "Danh mục sản phẩm" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "Điểm bán mặc định" -#: part/models.py:113 +#: part/models.py:112 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:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "Cấu trúc" -#: part/models.py:120 +#: part/models.py:119 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:129 +#: part/models.py:128 msgid "Default keywords" msgstr "Từ khóa mặc định" -#: part/models.py:130 +#: part/models.py:129 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:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "Biểu tượng" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "Biểu tượng (tùy chọn)" -#: part/models.py:182 +#: part/models.py:181 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:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "Giá trị mặc định" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "Giá trị tham số mặc định" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "Nguyên liệu" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, 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:723 +#: part/models.py:701 #, 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:790 +#: part/models.py:768 #, 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:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:929 +#: part/models.py:907 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:1059 +#: part/models.py:1037 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:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1080 +#: part/models.py:1060 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:1095 +#: part/models.py:1075 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:1127 +#: part/models.py:1107 msgid "Part name" msgstr "Tên sản phẩm" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "Là Mẫu" -#: part/models.py:1133 +#: part/models.py:1113 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:1143 +#: part/models.py:1123 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:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "Biến thể của" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "Mô tả (không bắt buộc)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "Từ khóa" -#: part/models.py:1159 +#: part/models.py:1139 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:1169 +#: part/models.py:1149 msgid "Part category" msgstr "Danh mục sản phẩm" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1184 +#: part/models.py:1164 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:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "Phiên bản" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "Hàng hóa này sẽ được cất vào đâu?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "Nhà cung ứng mặc định" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "Nhà cung ứng sản phẩm mặc định" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "Hết hạn mặc định" -#: part/models.py:1266 +#: part/models.py:1229 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:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "Kho tối thiểu" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "Cấp độ kho tối thiểu được phép" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "Đơn vị đo cho sản phẩm này" -#: part/models.py:1291 +#: part/models.py:1254 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:1297 +#: part/models.py:1260 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:1303 +#: part/models.py:1266 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:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1315 +#: part/models.py:1278 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:1321 +#: part/models.py:1284 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:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "Sản phẩm này đang hoạt động?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1337 +#: part/models.py:1300 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:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "Giá trị tổng kiểm BOM" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "Giá trị tổng kiểm BOM đã được lưu" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "BOM kiểm tra bởi" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "Ngày kiểm tra BOM" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "Tạo người dùng" -#: part/models.py:1389 +#: part/models.py:1352 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:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "Bán nhiều" -#: part/models.py:3350 +#: part/models.py:3314 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:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "Chi phí BOM tối thiểu" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối thiểu" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "Chi phí BOM tối đa" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối đa" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "Chi phí mua vào tối thiểu" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "Chi phí mua vào tối thiểu trong lịch sử" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "Chi phí mua tối đa" -#: part/models.py:3388 +#: part/models.py:3352 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:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "Giá nội bộ tối thiểu" -#: part/models.py:3395 +#: part/models.py:3359 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:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "Giá nội bộ tối đa" -#: part/models.py:3402 +#: part/models.py:3366 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:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "Giá nhà cung ứng tối thiểu" -#: part/models.py:3409 +#: part/models.py:3373 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:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "Giá nhà cung ứng tối đa" -#: part/models.py:3416 +#: part/models.py:3380 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:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "Giá trị biến thể tối thiểu" -#: part/models.py:3423 +#: part/models.py:3387 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:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "Chi phí biến thể tối đa" -#: part/models.py:3430 +#: part/models.py:3394 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:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "Chi phí tối thiểu" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "Ghi đề chi phí tối thiểu" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "Chi phí tối đa" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "Ghi đề chi phí tối đa" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "Chi phí tối thiểu tính toán tổng thể" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "Chi phí tối đa tính toán tổng thể" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "Giá bán thấp nhất" -#: part/models.py:3465 +#: part/models.py:3429 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:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "Giá bán cao nhất" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "Giá bán cao nhất dựa trên phá giá" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "Chi phí bán hàng tối thiểu" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "Giá bán hàng tối thiểu trong lịch sử" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "Giá bán hàng tối đa" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "Giá bán hàng tối đa trong lịch sử" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "Sản phẩm dành cho kiểm kê" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "Tổng số hàng" -#: part/models.py:3510 +#: part/models.py:3474 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:3518 +#: part/models.py:3482 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:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "Ngày" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "Kiểm kê đã thực hiện" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "Chi phí kho tối thiểu" -#: part/models.py:3531 +#: part/models.py:3495 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:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "Chi phí kho tối đa" -#: part/models.py:3538 +#: part/models.py:3502 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:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "Tên kiểm thử" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "Nhập tên cho kiểm thử" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "Mô tả kiểm thử" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "Nhập mô tả cho kiểm thử này" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "Bắt buộc" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "Kiểm thử này bắt buộc phải đạt?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "Giá trị bắt buộc" -#: part/models.py:3781 +#: part/models.py:3747 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:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "Yêu cầu đính kèm" -#: part/models.py:3788 +#: part/models.py:3754 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:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "Chọn sản phẩm cha" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "Sản phẩm phụ" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "Chọn sản phẩm được dùng trong BOM" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "Số lượng BOM cho mục BOM này" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "Mục BOM này là tùy chọn" -#: part/models.py:4028 +#: part/models.py:4006 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:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "Tham chiếu mục BOM" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "Ghi chú mục BOM" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "Giá trị tổng kiểm" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "Giá trị tổng kiểm dòng BOM" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "Đã xác minh" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "Mục BOM này là hợp lệ" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "Nhận thừa hưởng" -#: part/models.py:4095 +#: part/models.py:4073 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:4101 +#: part/models.py:4079 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:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "Số lượng phải là giá trị nguyên dùng cho sản phẩm có thể theo dõi được" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "Sản phẩm phụ phải được chỉ định" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "Sảm phẩm thay thế mục BOM" -#: part/models.py:4392 +#: part/models.py:4370 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:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "Hàng hóa BOM cha" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "Sản phẩm thay thế" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "Sản phẩm 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "Sản phẩm 2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "Chọn sản phẩm liên quan" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "" -#: part/models.py:4464 +#: part/models.py:4442 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:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "Đã tồn tại mối quan hệ trùng lặp" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "Phụ mục" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 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:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "Sản phẩm gốc" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "Chọn sản phẩm gốc để nhân bản" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "Sao chép ảnh" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "Sao chép hình ảnh từ sản phẩm gốc" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "Sao chép BOM" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "Sao chép định mức nguyên vật liệu từ sản phẩm gốc" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "Sao chép thông số" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "Sao chép thông tin tham số từ sản phẩm gốc" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "Sao chép ghi chú" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "Sao chép ghi chú từ sản phẩm gốc" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "Số liệu tồn kho ban đầu" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Chỉ ra số lượng tồn kho ban đầu cho sản phẩm. Nếu điền là không, không thêm kho nào." -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "Vị trí kho ban đầu" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "Chỉ định vị trí kho ban đầu cho sản phẩm này" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "Chọn nhà cung cấp (hoặc để trống để bỏ qua)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "Chọn nhà sản xuất (hoặc để trống để bỏ qua)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "Mã số nhà sản xuất" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "Công ty đã chọn không phải là nhà cung ứng hợp lệ" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "Công ty đã chọn không phải là nhà sản xuất hợp lệ" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "Mã số nhà sản xuất khớp với MPN này đã tồn tại" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "Mã số nhà cung cấp khớp với SKU này đã tồn tại" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "Tên danh mục" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "Đang dựng" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "Hàng trong kho" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "Nhà cung cấp" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Tổng số lượng" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "Nhân bản sản phẩm" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "Sao chép dữ liệu ban đầu từ sản phẩm khác" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "Số liệu kho ban đầu" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "Tạo sản phẩm với số lượng tồn kho ban đầu" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "Thông tin nhà cung cấp" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "Thêm thông tin nhà cung cấp ban đầu cho sản phẩm này" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "Sao chép thông số nhóm hàng" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "Sao chép mẫu tham số từ nhóm sản phẩm được chọn" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "Ảnh hiện có" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "Tên tệp của ảnh sản phẩm hiện hữu" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "Tệp hình ảnh không tồn tại" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "Xác minh toàn bộ hóa đơn vật liệu" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "Có thể dựng" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "Giá thấp nhất" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "Giá trị tính toán ghi đè cho giá tối thiểu" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "Tiền tế giá tối thiểu" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "Giá cao nhất" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "Giá trị tính toán ghi đè cho giá tối đa" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "Tiền tế giá tối đa" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "Cập nhật" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "Cập nhật giá cho sản phẩm này" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Không thể chuyển đổi từ tiền tệ đã cung cấp cho {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "Giá tối thiểu không được lớn hơn giá tối đa" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "Giá tối đa không được nhỏ hơn giá tối thiểu" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "Chọn sản phẩm để sao chép định mức nguyên vật liệu" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "Xóa dữ liệu đã tồn tại" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "Xóa mục BOM đã tồn tại trước khi sao chép" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "Bao gồm thừa hưởng" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "Bao gồm mục BOM được thừa hưởng từ sản phẩm mẫu" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "Bỏ qua dòng không hợp lệ" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "Bật tùy chọn này để bỏ qua dòng không hợp lệ" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "Sao chép sản phẩm thay thế" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "Sao chép sản phẩm thay thế khi nhân bản hàng hóa BOM" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "Thông báo sắp hết hàng" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "Kho có sẵn cho {part.name} đã mất dưới mức cấu hình tối thiểu" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "" @@ -6732,108 +6865,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:211 +#: plugin/base/barcodes/api.py:212 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:215 +#: plugin/base/barcodes/api.py:216 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:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 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:418 +#: plugin/base/barcodes/api.py:419 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:434 +#: plugin/base/barcodes/api.py:435 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:437 +#: plugin/base/barcodes/api.py:438 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:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "Sản phẩm nhà cung cấp phù hợp" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "Hàng hóa này đã được nhận" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "Kho không đủ hạn mức khả dụng" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "Không đủ thông tin" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 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:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "Mục dòng đơn đặt mua đã nhận" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "" @@ -6972,7 +7105,7 @@ msgstr "Cung cấp hỗ trợ gốc cho mã vạch" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "" msgid "Automatically issue orders that are backdated" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "URL webhook đầu vào của Slack" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "" msgid "Provides support for printing using a machine" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "Khóa của phần bổ sung" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "Tên của phần bổ sung" +msgid "Name of the plugin" +msgstr "" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "" msgid "Plugin" msgstr "Phần bổ sung" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "Không tìm thấy tác giả" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, 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:777 +#: plugin/registry.py:784 #, 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:779 +#: plugin/registry.py:786 #, 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}" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "Cài đặt chưa được xác nhận" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "Hoặc là phải cung cấp tên gói của URL" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8072,7 +8205,7 @@ msgstr "Tổng cộng" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Số sê-ri" @@ -8097,7 +8230,7 @@ msgstr "Báo cáo kiểm thử mặt hàng" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "Mục đã cài đặt" @@ -8130,495 +8263,519 @@ msgstr "Không có kết quả (bắt buộc)" msgid "No result" msgstr "Không có kết quả" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "Tệp tin tài sản không tồn tại" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "Không tìm thấy tệp hình ảnh" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 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:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "thẻ company_image yêu cầu một thực thể doanh nghiệp" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "Mã trạng thái" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "Địa điểm bên ngoài" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "Cây sản phẩm" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "Ngày hết hạn trước đó" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "Ngày hết hạn sau đó" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "Ế" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "Bắt buộc nhập số lượng" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "Phải cung cấp sản phẩm hợp lệ" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "Sản phẩm nhà cung cấp đã đưa không tồn tại" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "Sản phẩm nhà cung cấp có kích thước đóng gói được định nghĩa nhưng cờ use_pack_size chưa được thiết lập" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "Số sê-ri không thê được cung cấp cho sản phẩm không thể theo dõi" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "Loại vị trí kho hàng" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "Loại vị trí kho hàng" -#: stock/models.py:98 +#: stock/models.py:100 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:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "Kho hàng" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "Vị trí kho hàng" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "Chủ sở hữu" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "Chọn chủ sở hữu" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "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:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "Bên ngoài" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "Đây là vị trí kho bên ngoài" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "Loại vị trí" -#: stock/models.py:236 +#: stock/models.py:224 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:308 +#: stock/models.py:296 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:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "Không thể đặt hàng trong kho vào trong địa điểm kho có cấu trúc!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 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:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Loại sản phẩm ('{self.supplier_part.part}') phải là {self.part}" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "Số lượng phải là 1 cho hàng hóa với số sê ri" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Số sê ri không thể đặt được nếu số lượng lớn hơn 1" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "Hàng hóa không thể thuộc về chính nó" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "Hàng hóa phải có 1 tham chiếu bản dựng nếu is_building=True" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "Tham chiếu bản dựng không thể trỏ vào cùng một đối tượng sản phẩm" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "Hàng trong kho cha" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "Sản phẩm cơ bản" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "Chọn sản phẩm nhà cung cấp khớp với hàng hóa trong kho này" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "Hàng trong kho này được đặt ở đâu?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 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:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "Đã cài đặt trong" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "Mục này đã được cài đặt trong mục khác?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "Số sê ri cho mục này" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "Mã lô cho hàng trong kho này" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "Số lượng tồn kho" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "Bản dựng nguồn" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "Bản dựng cho hàng hóa này" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "Tiêu thụ bởi" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "Đơn đặt bản dựng đã dùng hàng hóa này" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "Đơn đặt mua nguồn" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "Đơn đặt mua cho hàng hóa này" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "Đơn hàng bán đích" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Ngày hết hạn của hàng hóa này. Kho sẽ được nhắc tình trạng hết hạn sau ngày này" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "Xóa khi thiếu hụt" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "Xóa hàng trong kho này khi kho hàng bị thiếu hụt" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "Giá mua riêng lẻ tại thời điểm mua" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "Đã chuyển đổi sang sản phẩm" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "Chưa đặt sản phẩm thành có thể theo dõi" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "Số lượng phải là số nguyên" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Số lượng không thể vượt quá số lượng trong kho đang có ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "Số lượng không khớp với số sêri" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "Hàng trong kho đã được gán vào đơn hàng bán" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "Hàng trong kho đã được cài đặt vào hàng hóa khác" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "Hàng trong kho chứa hàng hóa khác" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "Hàng trong kho đã được gắn với một khách hàng" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "Hàng trong kho hiện đang sản xuất" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "Không thể hợp nhất kho nối tiếp" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "Mặt hàng trùng lặp" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "Mặt hàng phải tham chiếu đến sản phẩm tương tự" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "Mặt hàng phải tham chiếu đến sản phẩm nhà cung cấp tương tự" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "Mã trạng thái kho phải phù hợp" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "Không thể xóa mặt hàng không ở trong kho" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "Ghi chú đầu vào" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "Phải cung cấp giá trị cho kiểm thử này" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "Phải tải liên đính kèm cho kiểm thử này" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "Kết quả kiểm thử" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "Giá trị đầu ra kiểm thử" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "Đính kèm kết quả kiểm thử" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "Ghi chú kiểm thử" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "" @@ -8662,246 +8819,246 @@ msgstr "" msgid "Quantity of serial numbers to generate" msgstr "" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "Mục cha" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "" -#: stock/serializers.py:438 +#: stock/serializers.py:442 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:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "Điền số sêri cho hàng hóa mới" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "Số hiệu hàng hoá nhà cung cấp" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "Đã hết hạn" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "Mục con" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "" -#: stock/serializers.py:639 +#: stock/serializers.py:645 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:677 +#: stock/serializers.py:683 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:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, 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:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "Vị trí kho đích" -#: stock/serializers.py:731 +#: stock/serializers.py:737 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:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "Số sêri đã tồn tại" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "Chọn mặt hàng để lắp đặt" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "Số lượng để cài đặt" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "Nhập số lượng hàng hóa để cài đặt" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "Thêm ghi chú giao dịch (tùy chọn)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 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:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "Mặt hàng không khả dụng" -#: stock/serializers.py:841 +#: stock/serializers.py:847 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:854 +#: stock/serializers.py:860 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:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "Vị trí đích cho hàng hóa bị gỡ bỏ" -#: stock/serializers.py:927 +#: stock/serializers.py:933 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:940 +#: stock/serializers.py:946 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:957 +#: stock/serializers.py:963 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:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "Mã trạng thái mặt hàng" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "Chọn mặt hàng để đổi trạng thái" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "Không có mặt hàng nào được chọn" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "Kho phụ" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "Sản phẩm phải có thể bán được" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 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:1299 +#: stock/serializers.py:1332 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:1323 +#: stock/serializers.py:1356 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:1329 +#: stock/serializers.py:1362 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:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "Ghi chú phân bổ kho" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 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:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "Ghi chú gộp kho" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "Cho phép nhiều nhà cung không khớp" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 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:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "Cho phép trạng thái không khớp" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 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:1448 +#: stock/serializers.py:1481 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:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "Giá trị khóa chính mặt hàng" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "Ghi chú giao dịch kho" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "" @@ -9383,83 +9540,83 @@ msgstr "Đơn hàng bán" msgid "Return Orders" msgstr "Đơn hàng trả lại" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "Tên người dùng" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "Tên" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "Họ người dùng" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "Họ" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "Tên người dùng" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "Địa chỉ email của người dùng" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "Nhân viên" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "Người dùng có quyền nhân viên" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "Superuser" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "Người dùng này là superuser" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "Tài khoản người dùng đang hoạt động" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "Tài khoản của bạn đã được tạo." -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "Xin hãy sử dụng chức năng tạo lại mật khẩu để đăng nhập" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "Chào mừng đến với InvenTree" diff --git a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po index d0ef668039..83377caaec 100644 --- a/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "未找到 API 端点" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "批量操作必须提供物品或过滤器列表" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "必须以列表形式提供项目" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "提供了无效的单位" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "必须以字典形式提供筛选器" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "提供了无效的过滤器" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "所有过滤器只能使用true" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "没有符合所供条件的项目" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "未提供数据" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." msgstr "此字段的值必须是唯一的。" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "用户没有权限查阅当前模型。" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "电子邮件 (重复)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "邮箱地址已确认" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "您必须每次输入相同的电子邮件。" -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "提供的主电子邮件地址无效。" -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "提供的邮箱域名未被批准。" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "不能将 {original} 转换到 {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "提供的数量无效" @@ -112,13 +104,13 @@ msgstr "输入日期" msgid "Invalid decimal value" msgstr "无效的数值" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "备注" @@ -131,75 +123,75 @@ msgstr "值' {name}' 未出现在模式格式中" msgid "Provided value does not match required pattern: " msgstr "提供的值与所需模式不匹配:" -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "无法一次序列化超过 1000 个项目" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "序列号为空白" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "重复的序列号" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "无效群组: {group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "组范围 {group} 超出了允许的数量 ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "未找到序列号" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "唯一序列号 ({n}) 必须匹配数量 ({q})" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "从这个值中删除 HTML 标签" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "数据包含禁止的 markdown 内容" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "连接错误" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "服务器响应状态码无效" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "发生异常" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "服务器响应的内容长度值无效" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "图片尺寸过大" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "图片下载超出最大尺寸" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "远程服务器返回了空响应" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一个有效的图片文件" @@ -207,11 +199,11 @@ msgstr "提供的 URL 不是一个有效的图片文件" msgid "Log in to the app" msgstr "登录应用程序" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "电子邮件" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "您必须启用双重身份验证才能进行后续操作。" @@ -255,135 +247,126 @@ msgstr "参考字段必须符合指定格式" msgid "Reference number is too large" msgstr "参考编号过大" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "无效选项" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "名称" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "描述" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "描述(选填)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "路径" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "同一父级下不能存在重复名称" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Markdown备注(选填)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "条码数据" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "第三方条码数据" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "条码哈希值" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "条码数据的唯一哈希值" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "检测到已存在条码" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "任务失败" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "后台工作任务“{f}”在 {n} 次尝试后失败" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "服务器错误" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "服务器记录了一个错误。" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "图像" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "必须是有效数字" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "货币" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "从可用选项中选择货币" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "此字段不能为空。" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "无效值" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "远程图片" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "远程图片文件的 URL" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "未启用从远程 URL下载图片" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "从远程URL下载图像失败" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" -msgstr "" +msgstr "无效的内容类型格式" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" -msgstr "" +msgstr "未找到内容类型" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "内容类型不匹配所需的 mixin 类" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -537,11 +520,11 @@ msgstr "中文 (简体)" msgid "Chinese (Traditional)" msgstr "中文 (繁体)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "有可用更新" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "InvenTree有可用更新" @@ -553,30 +536,30 @@ msgstr "无效的物理单位" msgid "Not a valid currency code" msgstr "无效的货币代码" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "订单状态" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "父级生产订单" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "包含变体" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "包含变体" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "包含变体" msgid "Part" msgstr "零件" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "类别" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "可测试部分" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "分配给我" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "负责人" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "创建时间早于" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "创建时间晚于" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "有开始日期" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "开始日期早于" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "开始日期晚于" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "有目标日期" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "目标日期早于" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "目标日期晚于" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "完成日期早于" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "完成日期晚于" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "最小日期" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "最大日期" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "排除树" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "生产订单必须取消后才能删除" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "耗材" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "可选项" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "装配件" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "可追溯" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "需检测" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "未结算订单" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "已分配" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "已消耗" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "可用数量" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "已订购" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "生产订单" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "库存位置" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" msgstr "产出" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "按产出库存项ID筛选,使用“null”查找未安装的生产项。" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "生产订单" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "装配物料清单尚未验证" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "无法为未激活的零件创建生产订单" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "无法为已解锁的零件创建生产订单" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "生产订单仅能通过外部采购可购买零件来完成" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "必须指定负责的用户或组" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "生产订单关联零件不可变更" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "目标日期必须在开始日期之后" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "生产订单编号" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "生产订单编号" msgid "Reference" msgstr "编号" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "生产订单的简要说明(可选)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" msgstr "该生产订单所属的上级生产订单" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "选择要生产的零件" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "销售订单编号" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" msgstr "该生产订单关联的销售订单" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "源库位" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "指定本次生产领料的来源库位(留空可从任意库位调拨)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "外协生产" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "该生产订单由外部供应商完成" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "目标库位" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "选择生产完成品的存放库位" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "生产数量" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "需要生产的库存品数量" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "已完成项目" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "已完成并入库的库存物品数量" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "生产状态" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "批号" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "本批产出的批次编号" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "建立日期" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "生产开始日期" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "此生产订单的计划开始日期" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "计划完成日期" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "生产订单的计划完成时间,逾期后系统将标记为超期。" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "完成日期" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "完成人" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "发起人" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "创建该生产订单的用户" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "责任方" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "该生产订单的责任人或责任团队" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "外部链接" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "指向外部资源的URL链接" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "生产优先级" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "此生产订单的优先级" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "项目编号" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "该生产订单归属的项目编号" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "无法完成生产订单,存在未关闭的子生产订单" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "无法完成生产订单,存在未完成的产出项" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "生产分配任务卸载失败" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "生产订单 {build} 已完成" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "生产订单已完成" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "可追溯零件必须填写序列号" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "未指定产出" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "产出已完成" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "产出与生产订单不匹配" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "数量必须大于零" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "数量不能大于产出数量" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "产出未通过所有必要测试" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "产出 {serial} 未通过所有必要测试" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "存在已分配物料时无法部分完成生产输出" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "生产订单行项目" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "生产对象" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "生产对象" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "数量" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "生产订单所需数量" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "库存消耗量" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生产项必须指定产出,因为主零件已经被标记为可追踪的" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "所选库存项与物料清单行项不匹配" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "分配的数量必须大于零" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "序列化物料的数量必须为1" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "库存品项超额分配" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "分配的数量必须大于零" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "序列化物料的数量必须为1" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "所选库存项与物料清单行项不匹配" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "已分配数量超过可用库存数量" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "库存项" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "源库存项" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "分配给该生产任务的库存量" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "安裝到" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "目标库存项" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "生产等级" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "零件名称" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "项目编号标签" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "产出" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "生产产出与上级订单不匹配" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "产出零件与生产订单零件不匹配" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "此产出已经完成" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "此产出尚未完全分配" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "输入产出数量" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "可追踪的零件数量必须为整数" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因为物料清单包含可追踪的零件,所以数量必须为整数" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "序列号" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "输入产出的序列号" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "生产产出的库存地点" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "自动分配序列号" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "自动为所需项目分配对应的序列号" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "以下序列号已存在或无效" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "必须提供产出清单" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "报废品库存地点" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "放弃分配" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "取消对报废产品的库存分配" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "废品产出的原因" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "完工产出存放库位" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果库存尚未全部分配,则完成产出" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "消耗已分配库存" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "立即扣除已分配给该生产任务的库存" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "移除未完成的产出" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "删除所有未完成的产出" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "禁止操作" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "标记为当前生产订单消耗" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "完成此生产订单前取消分配" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "超额分配库存" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "如何处理分配给生产订单的超额库存" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "存在超额分配的库存项" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "接受未分配" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受库存项未被完全分配至生产订单" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "必需库存未完成全量分配" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "接受未完工" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "允许所需数量的产出未完成" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "生产需求数量未完成" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "生产订单有打开的子生产订单" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "生产订单必须处于生产状态" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "生产订单有未完成的产出" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "生产行" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "产出" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "生产产出必须指向相同的生产" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "生产行项目" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必须与生产订单零件相同" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "项目必须在库存中" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "对于被追踪的零件的分配,必须指定生产产出" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "对于未被追踪的零件,无法指定生产产出" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "必须提供分配项目" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "零件来源的库存地点(留空则可来源于任何库存地点)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "排除位置" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "从该选定的库存地点排除库存项" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "可互换库存" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "在多个位置的库存项目可以互换使用" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "替代品库存" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "允许分配可替换的零件" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "可选项目" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "分配可选的物料清单给生产订单" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "启动自动分配任务失败" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "未跟踪的物品" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "已跟踪的物品" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "物品类型" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "选择要自动分配的条目类型" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "物料清单参考" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "物料清单零件识别号码" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "物料清单零件名称" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "安裝到" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "生产" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "供应商零件" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "已分配数量" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "生产订单编号" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "零件类别名称" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "可追踪" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "已继承的" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "允许变体" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "物料清单项" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "生产中" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "生产计划" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "外部库存" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "可用库存" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "可用的替代品库存" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "可用的变体库存" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "消耗数量超过分配数量" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "库存消耗可选备注" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "生产物料项必须关联到正确的生产订单" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "重复的生产物料项分配" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "订单行项目必须关联到正确的生产订单" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "重复的订单行项目分配" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "必须提供至少一个物料项或行项目" @@ -1474,67 +1478,71 @@ msgstr "已暂停" msgid "Cancelled" msgstr "已取消" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "完成" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "生产订单所需库存" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "生产订单{build}需补充库存" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "逾期的生产订单" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "生产订单 {bo} 现已逾期" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "是否链接" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "是否为文件" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "用户没有权限删除此附件" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "用户没有权限删除此附件" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "无效的货币代码" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "重复的货币代码" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "未提供有效的货币代码" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "暂无插件" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "项目编号标签" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "已是最新" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "最后更新时间戳" @@ -1546,778 +1554,778 @@ msgstr "更新于" msgid "User who last updated this object" msgstr "上次修改该对象的用户" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "唯一项目编码" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "项目描述" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "负责此项目的用户或团队" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "设置密钥" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "设定值" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "所选值不是一个有效的选项" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "该值必须是布尔值" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "该值必须为整数" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "必须是有效数字" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "值未通过验证检查" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "键字符串必须是唯一的" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "使用者" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "批发价数量" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "价格" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "指定数量的单位价格" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "端点" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "接收此网络钩子的端点" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "此网络钩子的名称" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "激活" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "网络钩子是否已启用" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "令牌" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "访问令牌" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "密钥" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "HMAC共享密钥" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "消息ID" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "此邮件的唯一标识符" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "主机" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "接收此消息的主机" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "标题" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "此消息的标题" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "正文" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "此消息的正文" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "接收此消息的终点" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "工作于" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "这条消息的工作完成了吗?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "标识" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "标题" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "链接" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "已发布" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "作者" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "摘要" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "阅读" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "这条新闻被阅读了吗?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "图像文件" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "此图像的目标模型类型" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "此图像的目标型号ID" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "自定义单位" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "单位符号必须唯一" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "单位名称必须是有效的标识符" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "单位名称" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "符号" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "可选单位符号" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "定义" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "单位定义" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "附件" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "缺少文件" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "缺少外部链接" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "模型类型" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "图片的目标模型类型" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "选择附件" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "备注" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "附件备注" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "上传日期" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "上传文件的日期" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "文件大小" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "文件大小,以字节为单位" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "为附件指定的模型类型无效" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "自定状态" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "定制状态" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "参考状态设置" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "使用此自定义状态扩展状态的状态集" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "逻辑密钥" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "等同于商业逻辑中自定义状态的状态逻辑键" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "值" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "将保存至模型数据库的数值" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "状态名" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "标签" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "将在前端显示的标签" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "颜色" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "将在前端显示颜色" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "型号" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "该状态关联的模型" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "必须选定模型" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "必须选取密钥" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "必须选中逻辑密钥" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "密钥必须不同于逻辑密钥" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "必须提供有效的参考状态类" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "密钥必须不同于参考状态的逻辑密钥" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "逻辑密钥必须在参考状态的逻辑键中" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "名称必须不同于参考状态的名称" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "选择列表" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "选择列表" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "选择列表的名称" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "选择列表的描述" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "已锁定" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "此选择列表是否已锁定?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "能否使用此选择列表?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "源插件" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "提供选择列表的插件" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "源字符串" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "可选字符串,用于标识本列表的数据来源" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "缺省项" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "本选择列表的默认选项" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "已创建" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "选择列表的创建日期和时间" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "最近更新" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "选择列表的最后更新时间" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "选择列表项" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "选择列表项" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "此选项归属的选择列表" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "选择列表项的值" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "选择列表项的标签" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "选择列表项的描述" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "该选择列表项是否处于激活状态?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "参数模板" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" -msgstr "" +msgstr "参数模板" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "勾选框参数不能有单位" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "复选框参数不能有选项" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "选择必须是唯一的" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "参数模板名称必须是唯一的" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" -msgstr "" +msgstr "此参数模板的目标模型类型" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "参数名称" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "单位" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "此参数的物理单位" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "参数说明" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "勾选框" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "此参数是否为勾选框?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "选项" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "此参数的有效选择 (逗号分隔)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "此参数的选择列表" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "已启用" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" -msgstr "" +msgstr "此参数模板是否启用?" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" -msgstr "" +msgstr "参数" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" -msgstr "" +msgstr "参数" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "无效的参数值选择" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" -msgstr "" +msgstr "为附件指定的模型类型无效" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" -msgstr "" +msgstr "型号ID" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" -msgstr "" +msgstr "此参数的目标模型的 ID" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "模板" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" -msgstr "" +msgstr "参数模板" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "数据" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "参数值" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "备注" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "可选注释字段" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "扫描条码" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "条码数据" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "扫描条码的用户" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "时间戳" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "扫描条形码的日期和时间" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "处理条码的 URL 端点" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "上下文" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "扫描条形码的上下文数据" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "响应" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "扫描条形码的响应数据" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "结果" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "条码扫描成功吗?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "发生错误" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8:邮件日志删除受保护。需设置 INVENTREE_PROTECT_EMAIL_LOG 为 False 以允许删除。" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "电子邮件信息" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "电子邮箱信息" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "已发布" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "已发送" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "失败" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "已送达" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "已确认" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "入站" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "出站" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "暂无回复消息" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "跟踪交付" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "已读追踪" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "点击追踪" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "全局ID" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "此消息的标识符 (可能由外部系统提供)" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "主题 ID" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "此消息主题的标识符 (可能由外部系统提供)" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "主题" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "链接到此消息的主题" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" -msgstr "优先级" +msgstr "优先" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "邮件主题" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "邮件主题" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "键" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "此主题的唯一密钥 (用于识别主题)" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "此主题的唯一标识符" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "内部服务已启动" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "该线程是否为内部启动的?" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "创建主题的日期和时间" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "主题最后更新的日期和时间" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} 已取消" msgid "A order that is assigned to you was canceled" msgstr "分配给您的订单已取消" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "收到的物品" @@ -2351,93 +2359,101 @@ msgstr "已根据采购订单收到物品" msgid "Items have been received against a return order" msgstr "已收到退货订单中的物品" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "指示是否更改此设置需要确认" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "此设置需要确认后才能更改。请确认更改。" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "表示设置是否被环境变量覆盖" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "覆盖" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "正在运行" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "等待完成的任务" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "预定的任务" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "失败的任务" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "任务ID" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "唯一任务ID" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "锁定" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "锁定时间" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "任务名称" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "功能" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "功能名称" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "参数" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "任务参数" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "关键字参数" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "任务关键词参数" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "文件名" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "模型类型" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "用户无权为此模式创建或编辑附件" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" -msgstr "" +msgstr "用户没有权限为此模型创建或编辑参数" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "选择列表已锁定" @@ -2445,1128 +2461,1157 @@ msgstr "选择列表已锁定" msgid "No group" msgstr "无分组" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "网站 URL 已配置为锁定" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "需要重启" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "设置已更改,需要服务器重启" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "等待迁移" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "待处理的数据库迁移数" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "活动的警告代码" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "活跃警告代码的字典" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "实例ID" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "此 InvenTree 实例的唯一标识符" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "公告 ID" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "在服务器状态信息中公开实例ID(未认证状态下)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "服务器实例名称" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "服务器实例的字符串描述符" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "使用实例名称" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "在标题栏中使用实例名称" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "限制显示 `关于` 信息" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "只向超级管理员显示关于信息" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "公司名称" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "内部公司名称" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "基本 URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "服务器实例的基准 URL" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "默认货币" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "系统价格计算使用的基准货币" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "支持币种" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "支持的货币代码列表" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "货币更新间隔时间" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "检查更新的频率(设置为零以禁用)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "天" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "币种更新插件" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "使用货币更新插件" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "从URL下载" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "允许从外部 URL 下载远程图片和文件" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "下载大小限制" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "远程图片的最大允许下载大小" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "用于从 URL 下载的 User-agent" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "允许覆盖用于从外部 URL 下载图片和文件的 user-agent(留空为默认值)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "严格的 URL 验证" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "验证 URL 时需要 schema 规范" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "更新检查间隔" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "检查更新的频率(设置为零以禁用)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "自动备份" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "启用数据库和媒体文件的自动备份" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "自动备份间隔" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "指定自动备份之间的间隔天数" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "任务删除间隔" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "后台任务结果将在指定天数后删除" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "错误日志删除间隔" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "错误日志将在指定天数后被删除" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "通知删除间隔" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "用户通知将在指定天数后被删除" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "邮件自动清理周期" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "邮件将在指定天数后删除" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "保护邮件日志" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "防止邮件日志条目被删除" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "条形码支持" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "在网页界面启用条形码扫描器支持" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "存储条形码结果" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "存储条形码扫描结果" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "条形码扫描最大计数" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "保存的条形码扫描结果的最大数量" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "条形码扫描延迟设置" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "条形码输入处理延迟时间" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "启用摄像头扫码支持" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "允许通过网络摄像头扫描条形码" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "显示条形码数据" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "在浏览器中将条形码数据显示为文本" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "条形码生成插件" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "用于内部条形码数据生成的插件" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "零件修订" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "启用零件修订字段" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "仅限装配修订版本" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "仅允许对装配零件进行修订" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "允许从装配中删除" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "允许删除已在装配中使用的零件" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "IPN(内部零件号)正则规则" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "用于匹配IPN(内部零件号)格式的正则表达式" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "允许重复的 IPN(内部零件号)" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "允许多个零件共享相同的 IPN(内部零件号)" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "允许编辑 IPN(内部零件号)" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "允许编辑零件时更改IPN(内部零件号)" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "复制零件物料清单数据" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "复制零件时默认复制物料清单数据" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "复制零件参数数据" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "复制零件时默认复制参数数据" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "复制零件测试数据" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "复制零件时默认复制测试数据" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "复制类别参数模板" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "创建零件时复制类别参数模板" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "零件默认为模板" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "默认情况下,元件可由其他零件组装而成" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "组件" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "默认情况下,零件可用作子部件" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "可购买" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "默认情况下可购买零件" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "可销售" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "零件默认为可销售" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "默认情况下可跟踪零件" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "虚拟的" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "默认情况下,零件是虚拟的" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "显示关联零件" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "显示零件的关联零件" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "允许创建初始库存" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "允许在添加新零件时创建初始库存数据" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "允许创建供应商数据" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "允许在添加新零件时创建初始供应商数据" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "零件名称显示格式" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "显示零件名称的格式" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "零件类别默认图标" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "零件类别默认图标 (空表示没有图标)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "最小定价小数位数" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "呈现定价数据时显示的最小小数位数" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "最大定价小数位数" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "呈现定价数据时显示的最大小数位数" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "使用供应商定价" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "将供应商的批发价纳入整体价格计算" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "采购历史价优先" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "当存在历史采购订单价格时,将忽略供应商的批发价" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "使用库存项定价" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "使用手动输入的库存数据进行定价计算" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "库存项目定价时间" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "从定价计算中排除超过此天数的库存项目" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "使用变体定价" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "将产品变体的特殊定价纳入整体价格计算" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "仅限活跃变体" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "仅使用活跃变体零件计算变体价格" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "自动更新定价" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "当内部数据变化时自动更新零件价格" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "价格重建间隔" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "零件价格自动更新前的天数" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "内部价格" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "为零件启用内部核算价格功能" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "内部价格优先" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "若存在内部价格,将覆盖BOM价格区间计算结果" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "启用标签打印功能" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "启用从网络界面打印标签" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "标签图片 DPI" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "生成图像文件以供标签打印插件使用时的 DPI 分辨率" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "启用报告" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "启用报告生成" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "调试模式" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "以调试模式生成报告(HTML 输出)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "日志错误报告" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "记录生成报告时出现的错误" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "页面大小" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "PDF 报告默认页面大小" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "强制参数单位" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "如果提供了单位,参数值必须与指定的单位匹配" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "全局唯一序列号" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "库存项的序列号必须全局唯一" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "删除已耗尽的库存" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "设置库存耗尽时的默认行为" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "批号模板" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "为库存项生成默认批号的模板" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "库存过期" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "启用库存过期功能" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "销售过期库存" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "允许销售过期库存" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "库存临期预警天数" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "库存项过期前被标记为\"临期\"的天数" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "允许使用过期库存" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "允许在生产中使用已过期的库存" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "库存所有权管控" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "启用对库存地点和库存物品的归属权管理" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "库存地点默认图标" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "库存地点默认图标 (空表示没有图标)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "显示已安装的库存项" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "在库存列表中显示已被安装到设备中的库存项" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "在安装项目时检查物料清单" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "已安装的库存项目必须存在于上级零件的物料清单中" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "允许零库存调拨" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "允许对当前库存量为零的物品执行库位间调拨操作" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "生产订单参考模式" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "生成生产订单参考字段所需的模式" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "要求负责人" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "必须为每个订单分配一个负责人" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "需要活动零件" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "防止为非活动零件创建生产订单" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "需要锁定零件" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "防止为未锁定的零件创建生产订单" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "需要有效的物料清单" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "除非物料清单已验证,否则禁止创建生产订单" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "需要关闭子订单" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "在所有子订单关闭之前,阻止生产订单的完成" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "外部生产订单" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "启用外部生产订单功能" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "阻止直到测试通过" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "在所有必要的测试通过之前,阻止产出完成" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "启用订单退货" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "在用户界面中启用订单退货功能" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "退货订单参考模式" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "生成退货订单参考字段所需的模式" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "编辑已完成的退货订单" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "允许编辑已完成的退货订单" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "销售订单参考模式" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "生成销售订单参考字段所需参照模式" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "销售订单默认配送方式" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "启用创建销售订单的默认配送功能" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "编辑已完成的销售订单" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "允许在订单配送或完成后编辑销售订单" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "货件需核对" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "只有所有物品均经核对,才能确认发货完成" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "标记该订单为已完成?" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "标记为已发货的销售订单将自动完成,绕过“已发货”状态" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "采购订单参考模式" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "生成采购订单参考字段所需的模式" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "编辑已完成的采购订单" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "允许在采购订单已配送或完成后编辑订单" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "货币转换" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "收货时将物料价值折算为基准货币" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "自动完成采购订单" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "当收到所有行项目时,自动将采购订单标记为完成" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "忘记启用密码" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "在登录页面上启用忘记密码功能" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "启用注册" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "在登录页面为用户启用自行注册功能" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "启用SSO登录" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "在登录页面启用单点登录(SSO)功能" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "启用SSO注册" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "允许用户通过登录页面的SSO系统注册账号" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "启用SSO组同步" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "启用后,将自动同步InvenTree用户组与身份提供商(IdP)提供的用户组" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "SSO组属性键" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "身份提供商(IdP)返回的组信息声明属性名称" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "SSO组映射关系" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "将SSO用户组映射到本地InvenTree用户组的对应关系表。如果本地组不存在,系统会自动创建对应的用户组。" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "移除非SSO来源的用户组" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "当用户组未被身份提供商(IdP)支持时,是否移除该用户组。禁用此选项可能导致安全风险" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "必须提供邮箱" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "用户注册时必须提供邮箱" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "自动填充SSO用户信息" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "自动从SSO账户数据中填充用户详细信息" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "发两次邮件" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "注册时询问用户他们的电子邮件两次" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "两次输入密码" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "当注册时请用户输入密码两次" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "域名白名单" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "限制注册到某些域名 (逗号分隔,以 @ 开头)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "注册默认分组" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "新用户注册时被分配的默认用户组。 如果启用了SSO组同步功能,当无法从身份提供商(IdP)分配组时才会应用此分组。" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "强制启用多因素安全认证" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "用户必须使用多因素安全认证。" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "启用此设置将要求所有用户设置多元素认证。所有会话将立即断开连接。" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "启动时检查插件" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "启动时检查全部插件是否已安装 - 在容器环境中启用" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "检查插件更新" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "启用定期检查已安装插件的更新" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "启用统一资源定位符集成" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "启用插件以添加统一资源定位符路由" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "启用导航集成" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "启用插件以集成到导航中" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "启用应用集成" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "启用插件添加应用" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "启用调度集成" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "启用插件来运行预定任务" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "启用事件集成" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "启用插件响应内部事件" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "启用界面集成" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "启用插件集成到用户界面" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "启用邮件集成" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "启用插件来处理发送/接收邮件" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "启用项目编码" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "启用项目编码来跟踪项目" -#: common/setting/system.py:1083 -msgid "Enable Stock History" -msgstr "启用库存历史" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" +msgstr "启用盘点" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "启用历史库存水平及价值记录功能" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "排除外部地点" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" -msgstr "在库存历史统计中排除外部库位的库存项" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "自动盘点周期" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" -msgstr "自动记录库存历史的间隔天数" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" +msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "删除旧的库存历史记录" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" +msgstr "" -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "删除超过指定天数的库存历史记录" +#: common/setting/system.py:1135 +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "库存历史删除间隔" +#: common/setting/system.py:1141 +msgid "Stocktake Deletion Interval" +msgstr "" -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "库存历史记录将在指定天数后删除" +#: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 msgid "Display Users full names" msgstr "显示用户全名" -#: common/setting/system.py:1124 +#: common/setting/system.py:1168 msgid "Display Users full names instead of usernames" msgstr "显示用户全名而不是用户名" -#: common/setting/system.py:1129 +#: common/setting/system.py:1173 msgid "Display User Profiles" msgstr "显示用户配置" -#: common/setting/system.py:1130 +#: common/setting/system.py:1174 msgid "Display Users Profiles on their profile page" msgstr "在用户个人资料页展示其档案信息" -#: common/setting/system.py:1135 +#: common/setting/system.py:1179 msgid "Enable Test Station Data" msgstr "启用测试站数据" -#: common/setting/system.py:1136 +#: common/setting/system.py:1180 msgid "Enable test station data collection for test results" msgstr "启用测试站数据收集以获取测试结果" -#: common/setting/system.py:1141 +#: common/setting/system.py:1185 msgid "Enable Machine Ping" msgstr "启用设备状态检测" -#: common/setting/system.py:1143 +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "启用定期 Ping 检测,确认注册设备的运行状态" @@ -3596,11 +3641,11 @@ msgstr "在浏览器中显示PDF报告,而不是作为文件下载" #: common/setting/user.py:45 msgid "Barcode Scanner in Form Fields" -msgstr "" +msgstr "表格字段中的条形码扫描器" #: common/setting/user.py:46 msgid "Allow barcode scanner input in form fields" -msgstr "" +msgstr "允许条形码扫描器输入表单字段" #: common/setting/user.py:51 msgid "Search Parts" @@ -3870,7 +3915,7 @@ msgstr "为用户保存上次使用的打印设备" #: common/validators.py:38 msgid "All models" -msgstr "" +msgstr "全部型号" #: common/validators.py:63 msgid "No attachment model type provided" @@ -3913,366 +3958,370 @@ msgstr "零件已激活" msgid "Manufacturer is Active" msgstr "制造商处于活动状态" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "供应商零件处于激活状态" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "内部零件已激活" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "供应商已激活" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "制造商" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "公司" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "有库存" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "公司" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "公司简介" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "公司简介" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "网站" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "公司网站" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "电话号码" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "联系电话" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "联系人电子邮箱地址" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "联系人" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "联络点" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "外部公司信息链接" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "这家公司是否激活?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "是客户" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "你是否向该公司出售商品?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "是否为供应商" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "你从这家公司买东西吗?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "是制造商吗" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "这家公司生产零件吗?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "此公司使用的默认货币" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "税号" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "公司税号" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "地址" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "地址" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "选择公司" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "地址标题" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "描述地址条目的标题" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "主要地址" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "设置主要地址" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "第1行" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "地址行1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "第2行" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "地址行2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "邮政编码" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "城市/地区" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "邮政编码城市/地区" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "省/市/自治区" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "省、自治区或直辖市" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "国家/地区" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "地址所在国家" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "快递运单" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "运输快递注意事项" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "内部装运通知单" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "内部使用的装运通知单" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "链接地址信息 (外部)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "制造商零件" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "基础零件" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "选择零件" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "选择制造商" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "制造商零件编号" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "制造商零件编号" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "外部制造商零件链接的URL" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "制造商零件说明" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "包装单位必须与基础零件单位兼容" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "包装单位必须大于零" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "链接的制造商零件必须引用相同的基础零件" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "供应商" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "选择供应商" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "供应商库存管理单位" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "此供应商零件是否处于活动状态?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "选择制造商零件" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "外部供应商零件链接的URL" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "供应商零件说明" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "基本费用" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低费用(例如库存费)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "打包" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "零件打包" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "包装数量" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "单包供应的总数量。为单个项目留空。" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "多个" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "订购多个" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "供应商提供的数量" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "可用性已更新" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "上次更新可用性数据的日期" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "供应商批发价" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "返回主地址的字符串表示形式。此属性为向后兼容而保留。" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "此供应商使用的默认货币" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "公司名称" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "有库存" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "批发价" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "数据导出过程中发生错误" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "数据导出插件返回的数据格式不正确" @@ -4320,119 +4369,119 @@ msgstr "放置" msgid "Invalid status code" msgstr "无效状态码" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "数据文件" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "要导入的数据文件" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "列" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "本次导入会话的目标模型类型" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "导入状态" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "字段默认值" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "字段覆盖" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "字段筛选器" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "更新现有记录" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "若启用,现有记录将被新数据更新" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "某些必填字段尚未映射" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "ID" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "记录的现有数据库标识符" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "列已映射到数据库字段" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "字段已映射到数据列" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "列映射必须链接到有效的导入会话" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "数据文件中不存在列" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "目标模型中不存在字段" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "所选字段为只读" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "导入会话" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "字段" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "列" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "行索引" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "原始行数据" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "错误" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "有效" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "更新现有记录需要提供ID。" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "没有找到与提供的ID相关的记录" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "提供的ID格式无效" @@ -4532,7 +4581,7 @@ msgstr "每个标签要打印的份数" msgid "Connected" msgstr "已连接" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "未知" @@ -4660,105 +4709,117 @@ msgstr "最大进度" msgid "Maximum value for progress type, required if type=progress" msgstr "进度类型的最大值。当 type=progress 时为必填项" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "订单参考" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "未完成" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "有项目编码" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "创建人" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "创建时间早于" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "创建时间晚于" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "有开始日期" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "开始日期早于" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "开始日期晚于" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "有目标日期" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "目标日期早于" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "目标日期晚于" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "更新时间早于" + +#: order/api.py:233 +msgid "Updated After" +msgstr "更新时间晚于" + +#: order/api.py:284 msgid "Has Pricing" msgstr "有定价" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "完成时间早于" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "完成时间晚于" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "外部生产订单" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "订单" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "订单完成" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "内部零件" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "订单待定" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "已完成" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "有配送" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "采购订单" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4766,8 +4827,8 @@ msgstr "采购订单" msgid "Sales Order" msgstr "销售订单" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4783,722 +4844,742 @@ msgstr "总价格" msgid "Total price for this order" msgstr "此订单的总价" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "订单货币" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "此订单的货币 (留空以使用公司默认值)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "该订单已锁定,不可修改" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "联系人与所选公司不匹配" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "开始日期必须早于目标日期" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" msgstr "地址与所选公司不匹配" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "订单描述 (可选)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "为此订单选择项目编码" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "链接到外部页面" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "开始日期" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "本订单的预定开始日期" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "预计日期" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "订单交付的预期日期。订单将在此日期后过期。" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "签发日期" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "订单发出日期" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "更新时间" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "负责此订单的用户或组" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "此订单的联系人" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "此订单的公司地址" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "订单参考" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "狀態" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "采购订单状态" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "订购物品的公司" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "供应商参考" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "供应商订单参考代码" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "接收人" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "订单完成日期" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "目的地" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "接收物品的目标" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "零件供应商必须与采购订单供应商匹配" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "行项目与采购订单不匹配" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "行项目缺少关联零件" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "数量必须是正数" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "客户" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "出售物品的公司" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "销售订单状态" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "客户参考 " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "客户订单参考代码" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "发货日期" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "发货人" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "订单已完成" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "订单已取消" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "只有未结订单才能标记为已完成" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "由于发货不完整,订单无法完成" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "由于缺货,订单无法完成" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "订单无法完成,因为行项目不完整" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "订单已锁定,不可修改" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "项目数量" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "行项目参考" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "行项目注释" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "此行项目的目标日期 (留空以使用订单中的目标日期)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "行项目描述 (可选)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "此行的附加上下文" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "单位价格" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "采购订单行项目" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "供应商零件必须与供应商匹配" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "生产订单必须标记为外部" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "生产订单仅可关联至装配零件" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "生产订单零件必须与行项目零件一致" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "供应商零件" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "已接收" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "收到的物品数量" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "采购价格" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "每单位的采购价格" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "外部生产订单需由此行项目履行" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "采购订单附加行" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "销售订单行项目" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "只有可销售的零件才能分配给销售订单" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "售出价格" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "单位售出价格" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "已配送" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "发货数量" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "销售订单发货" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" msgstr "收货地址必须与该客户的资料一致" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" msgstr "本次发货的收货地址" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "发货日期" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "送达日期" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "装运交货日期" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "审核人" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "检查此装运的用户" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "配送" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "配送单号" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "跟踪单号" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "配送跟踪信息" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "发票编号" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "相关发票的参考号" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "货物已发出" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "发货没有分配库存项目" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "货件必须先经核对,方可标记为完成" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "销售订单加行" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "销售订单分配" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "库存项目尚未分配" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "无法将库存项目分配给具有不同零件的行" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "无法将库存分配给没有零件的生产线" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "分配数量不能超过库存数量" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "分配的数量必须大于零" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化库存项目的数量必须为1" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "销售订单与发货不匹配" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "发货与销售订单不匹配" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "行" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "销售订单发货参考" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "项目" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "选择要分配的库存项目" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "输入库存分配数量" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "退货订单参考" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "退回物品的公司" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "退货订单状态" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "退货订单行项目" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "必须指定库存项" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "退回数量超过库存数量" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "退回数量必须大于零" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "序列化库存项的数量无效" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "选择要从客户处退回的商品" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "接收日期" -#: order/models.py:3025 -msgid "The date this this return item was received" +#: order/models.py:3041 +msgid "The date this return item was received" msgstr "收到此退货的日期" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "结果" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "该行项目的结果" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "与此行项目的退货或维修相关的成本" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "退货订单附加行" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "订单ID" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "要复制的订单ID" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "复制行" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "从原始订单复制行项目" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "复制额外行" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "从原始订单复制额外的行项目" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "复制参数" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "行项目" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "已完成行项目" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "复制订单" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "指定复制此订单的选项" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "订单ID不正确" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "供应商名称" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "订单不能取消" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "允许关闭行项目不完整的订单" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "订单中的行项目不完整" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "订单未打开" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "自动定价" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根据供应商零件数据自动计算采购价格" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "购买价格货币" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "合并项目" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "将具有相同零件、目的地和目标日期的项目合并到一个行项目中" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "库存量单位" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "内部零件编号" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "内部零件名称" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "必须指定供应商零件" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "必须指定采购订单" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "供应商必须匹配采购订单" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "采购订单必须与供应商匹配" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "行项目" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "为收到的物品选择目的地位置" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "输入入库项目的批号" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有效期至" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "输入入库库存项的有效期" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "输入入库库存项目的序列号" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "覆盖传入库存项目的包装资料" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "传入库存项目的附加说明" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "条形码" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "扫描条形码" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "条形码已被使用" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "必须提供行项目" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "必须指定目标位置" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "提供的条形码值必须是唯一的" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "配送" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "已分配的行" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "售出价格货币" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "已分配的项目" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "未提供装运详细信息" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "行项目与此订单不关联" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "数量必须为正" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "输入要分配的序列号" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "货物已发出" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "发货与此订单无关" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "未找到以下序列号的匹配项" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "以下序列号不可用" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "退货订单行项目" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "行项目与退货订单不匹配" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "行项目已收到" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "只能根据正在进行的订单接收物品" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "退货数量" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "行价格货币" @@ -5534,1174 +5615,1226 @@ msgstr "退款" msgid "Reject" msgstr "拒绝" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "逾期采购订单" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "采购订单 {po} 已逾期" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "逾期销售订单" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "销售订单 {so} 已逾期" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "逾期退货订单" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "退货订单 {ro} 现已逾期" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "已加星标" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "按星标类别筛选" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "深度" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "按类别深度筛选" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "顶级" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "按顶级类别筛选" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "级联" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "在筛选结果中包含子类别" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "父类" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "按父类别筛选" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "排除指定类别下的子类别" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "有结果" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "是变体" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "是修订版本" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "有修订版本" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "物料清单合规" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "级联分类" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "如果为真,则包含给定分类下的所有子分类中的项目" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "按数字分类ID或字面值 \"null\" 进行筛选" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "装配零件已启用" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "装配零件可追踪" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "装配部份是可测试的" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "元器件已激活" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "组件部份是可测试的" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "有可用库存" + +#: part/api.py:1370 msgid "Uses" msgstr "使用" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "零件类别" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "零件类别" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "默认位置" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "此类别零件的默认库存地点" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "结构性" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "零件可能无法直接分配到结构类别,但可以分配到子类别。" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "默认关键字" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "此类别零件的默认关键字" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "图标" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "图标(可选)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "您不能使这个零件类别结构化,因为有些零件已经分配给了它!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "零件类别参数模板" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "默认值" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "默认参数值" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "零件" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" -msgstr "" +msgstr "无法删除已锁定零件的参数" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" -msgstr "" +msgstr "无法修改已锁定零件的参数" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "无法删除这个零件,因为它已被锁定" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "无法删除这个零件,因为它仍然处于活动状态" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "无法删除这个零件,因为它被使用在了装配中" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "零件 \"{self}\" 不能用在 \"{parent}\" 的物料清单 (递归)" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "零件 \"{parent}\" 被使用在了 \"{self}\" 的物料清单 (递归)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "内部零件号必须匹配正则表达式 {pattern}" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "零件不能是对自身的修订" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "无法对已经是修订版本的零件进行修订" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "必须指定修订代码" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "修订仅对装配零件允许" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "无法对模版零件进行修订" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "上级零件必须指向相同的模版" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "该序列号库存项己存在" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "在零件设置中不允许重复的内部零件号" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "重复的零件修订版本已经存在。" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "有这个名字,内部零件号,和修订版本的零件已经存在" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "零件不能分配到结构性零件类别!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "零件名称" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "是模板" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "这个零件是一个模版零件吗?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "这个零件是另一零件的变体吗?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "变体" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "零件描述(可选)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "关键词" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索结果可见性的零件关键字" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "零件类别" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "内部零件号 IPN" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "零件修订版本或版本号" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "版本" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "这零件是另一零件的修订版本吗?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "修订版本" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "该物品通常存放在哪里?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "默认供应商" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "默认供应商零件" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "默认到期" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "此零件库存项的过期时间 (天)" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "最低库存" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "允许的最小库存量" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "此零件的计量单位" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "这个零件可由其他零件加工而成吗?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "这个零件可用于创建其他零件吗?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "此零件是否有唯一物品的追踪功能" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "这一部件能否记录到测试结果?" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "这个零件可从外部供应商购买吗?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "此零件可以销售给客户吗?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "这个零件是否已激活?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "无法编辑锁定的零件" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "这是一个虚拟零件,例如一个软件产品或许可证吗?" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "物料清单已验证" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "该零件的物料清单是否通过验证?" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "物料清单校验和" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "保存的物料清单校验和" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "物料清单检查人" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "物料清单检查日期" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "此零件的负责人" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "出售多个" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "用于缓存定价计算的货币" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "最低物料清单成本" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "元件的最低成本" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "物料清单的最高成本" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "元件的最高成本" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "最低购买成本" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "最高历史购买成本" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "最大购买成本" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "最高历史购买成本" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "最低内部价格" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "基于内部批发价的最低成本" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "最大内部价格" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "基于内部批发价的最高成本" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "供应商最低价格" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "外部供应商零件的最低价格" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "供应商最高价格" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "来自外部供应商的商零件的最高价格" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "最小变体成本" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "计算出的变体零件的最低成本" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "最大变体成本" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "计算出的变体零件的最大成本" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "最低成本" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "覆盖最低成本" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "最高成本" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "覆盖最大成本" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "计算总最低成本" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "计算总最大成本" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "最低售出价格" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "基于批发价的最低售出价格" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "最高售出价格" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "基于批发价的最大售出价格" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "最低销售成本" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "历史最低售出价格" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "最高销售成本" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "历史最高售出价格" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "用于盘点的零件" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "物品数量" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "盘点时的个别库存条目数" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "盘点时可用库存总额" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "日期" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "进行盘点的日期" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "最低库存成本" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "现有存库存最低成本估算" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "最高库存成本" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "目前库存最高成本估算" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "零件售出价格折扣" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "零件测试模板" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "模板名称无效 - 必须包含至少一个字母或者数字" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "测试模板只能为可拆分的部件创建" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "零件已存在具有相同主键的测试模板" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "测试名" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "输入测试的名称" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "测试主键" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "简化测试主键" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "测试说明" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "输入测试的描述" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "此测试是否已启用?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "必须的" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "需要此测试才能通过吗?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "需要值" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "添加测试结果时是否需要一个值?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "需要附件" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "添加测试结果时是否需要文件附件?" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "此测试的有效选择 (逗号分隔)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "物料清单项目不能被修改 - 装配已锁定" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "物料清单项目不能修改 - 变体装配已锁定" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "选择父零件" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "子零件" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "选择要用于物料清单的零件" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "此物料清单项目的数量" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "此物料清单项目是可选的" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "这个物料清单项目是耗材 (它没有在生产订单中被追踪)" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "设置数量" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "为补偿生产准备损耗所需的额外数量" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "损耗" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "生产预估损耗率(百分比,0-100)" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "舍入倍数" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "将所需生产数量向上舍入至该值的最接近倍数" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "物料清单项目引用" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "物料清单项目注释" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "校验和" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "物料清单行校验和" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "已验证" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "此物料清单项目已验证" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "获取继承的" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "此物料清单项目是由物料清单继承的变体零件" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "变体零件的库存项可以用于此物料清单项目" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "可追踪零件的数量必须是整数" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "必须指定子零件" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "物料清单项目替代品" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "替代品零件不能与主零件相同" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "上级物料清单项目" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "替代品零件" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "零件 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "零件2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "选择相关的零件" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "此关系的注释" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "零件关系不能在零件和自身之间创建" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "复制关系已经存在" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "上级类别" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "上级零件类别" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "子类别" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "结果" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "根据该模板记录的结果数量" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "购买此库存项的货币" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "文件不是一个图片" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "原始零件" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "选择要复制的原始零件" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "复制图片" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "从原零件复制图片" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "复制物料清单" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "从原始零件复制材料清单" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "复制参数" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "从原始零件复制参数数据" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "复制备注" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "从原始零件复制备注" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "复制测试" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "从原始零件复制测试模板" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "初始化库存数量" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始库存数量。如果数量为零,则不添加任何库存。" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "初始化库存地点" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的库存地点" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "选择供应商(或为空以跳过)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "选择制造商(或为空)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "制造商零件号" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "所选公司不是一个有效的供应商" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "所选公司不是一个有效的制造商" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "与此制造商零件编号 (MPN) 的相匹配的制造商零件已存在" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "匹配此库存单位 (SKU) 的供应商零件已存在" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "类别名称" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "正在生产" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "目前正在生产的零件数量" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件计划待产数量" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "库存项" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "修订" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "供应商" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "库存总量" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "未分配的库存" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "变体库存" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "重复零件" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "从另一个零件复制初始数据" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "初始库存" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "创建具有初始库存数量的零件" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "供应商信息" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供应商信息" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "复制类别参数" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "从选择的零件复制参数模版" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "现有的图片" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "现有零件图片的文件名" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "图片不存在" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "验证整个物料清单" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "可以创建" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "生产订单必填项" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "分配到生产订单" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "销售订单必填项" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "分配到销售订单" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "内部零件号" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "零件描述" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "生成报告" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "最低价格" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "覆盖已计算的最低价格值" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "最低价格货币" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "最高价格" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "覆盖已计算的最高价格值" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "最高价格货币" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "更新" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "更新这个零件的价格" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "无法将所提供的货币转换为 {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "最低价格不能高于最高价格。" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "最高价格不能低于最低价格" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "选择父装配" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "选择零部件" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "选择要复制物料清单的零件" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "移除现有数据" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "复制前删除现有的物料清单项目" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "包含继承的" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "包含从模板零件继承的物料清单项目" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "跳过无效行" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "启用此选项以跳过无效行" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "复制替代品零件" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "复制物料清单项目时复制替代品零件" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "低库存通知" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "可用的 {part.name}库存已经跌到设置的最低值" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "到期库存通知" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "您有1个库存项即将到期" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "您有{item_count}个库存项即将到期" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "永久有效" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "已过期 {abs(days_diff)} 天" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "今天到期" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "{days_until_expiry}天" @@ -6734,108 +6867,108 @@ msgstr "未指定操作" msgid "No matching action found" msgstr "未找到指定操作" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "未找到匹配条形码数据" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "找到匹配条形码数据" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "不支持模型" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "找不到模型实例" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "条形码匹配现有项目" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "没有找到匹配的零件数据" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "没有找到匹配的供应商零件" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "找到多个匹配的供应商零件" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "没有找到匹配条形码数据的插件" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "匹配的供应商零件" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "项目已被接收" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "没有匹配供应商条形码的插件" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "找到多个匹配的行项目" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "未找到匹配的行项目" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "未提供销售订单" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "条形码与现有的库存项不匹配" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "库存项与行项目不匹配" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "可用库存不足" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "库存项已分配到销售订单" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "没有足够的信息" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "找到匹配的项目" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "供应商零件与行项目不匹配" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "行项目已完成" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "需要更多信息以接收行项目" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "已收到采购订单行项目" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "接收行项目失败" @@ -6974,7 +7107,7 @@ msgstr "提供条形码本地支持" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7072,111 +7205,111 @@ msgstr "补发追溯订单" msgid "Automatically issue orders that are backdated" msgstr "自动补发追溯订单" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "等级" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "导出的层级数 - 设置为零以导出所有物料清单层级" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "总数量" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "在物料清单中包含每个零件的总数量" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "库存数据" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "包括零件库存数据" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "定价数据" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "包括零件定价数据" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "供应商数据" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "包括供应商数据" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "制造商数据" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "包含制造商数据" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "替代品数据" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "包含替代零件数据" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "参数数据" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "包含零件参数数据" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "多层级物料清单导出器" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "支持多层物料清单导出功能" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "物料清单层级" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "替代品 {n}" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "供应商 {n}" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "供应商 {n} SKU" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "供应商 {n} MPN" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "制造商 {n}" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "制造商 {n} MPN" @@ -7191,19 +7324,19 @@ msgstr "支持从InvenTree导出数据" #: plugin/builtin/exporter/parameter_exporter.py:16 msgid "Exclude Inactive" -msgstr "" +msgstr "排除未激活的" #: plugin/builtin/exporter/parameter_exporter.py:17 msgid "Exclude parameters which are inactive" -msgstr "" +msgstr "排除未激活的参数" #: plugin/builtin/exporter/parameter_exporter.py:29 msgid "Parameter Exporter" -msgstr "" +msgstr "参数导出" #: plugin/builtin/exporter/parameter_exporter.py:30 msgid "Exporter for model parameter data" -msgstr "" +msgstr "模型参数数据导出器" #: plugin/builtin/exporter/stocktake_exporter.py:25 msgid "Include External Stock" @@ -7278,7 +7411,7 @@ msgid "Integrated Slack notification methods" msgstr "已集成Slack通知方法" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" +msgid "Slack incoming webhook URL" msgstr "Slack传入Webhook url" #: plugin/builtin/integration/core_notifications.py:132 @@ -7356,11 +7489,11 @@ msgstr "InvenTree 设备标签打印机" msgid "Provides support for printing using a machine" msgstr "提供使用设备打印的支持" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "最近使用" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "选项" @@ -7538,7 +7671,7 @@ msgid "Key of plugin" msgstr "插件的键" #: plugin/models.py:55 -msgid "PluginName of the plugin" +msgid "Name of the plugin" msgstr "插件名称" #: plugin/models.py:62 plugin/serializers.py:119 @@ -7573,21 +7706,21 @@ msgstr "软件包插件" msgid "Plugin" msgstr "插件" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "未找到作者" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "插件 '{p}' 与当前 InvenTree 版本{v} 不兼容" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "插件所需最低版本 {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "插件所需最高版本 {v}" @@ -7765,7 +7898,7 @@ msgid "Installation not confirmed" msgstr "安装尚未确认" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" +msgid "Either packagename or URL must be provided" msgstr "必须提供软件包名称或者URL" #: plugin/serializers.py:188 @@ -8074,7 +8207,7 @@ msgstr "总计" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "序列号" @@ -8099,7 +8232,7 @@ msgstr "库存项测试报告" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "已安装的项目" @@ -8132,495 +8265,519 @@ msgstr "无结果 (必填)" msgid "No result" msgstr "没有结果" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "资产文件不存在" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "找不到图片文件" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "parpart_image 标签需要一个零件实例" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "公司_图片标签需要一个公司实例" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "按位置深度筛选" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "按顶级位置筛选" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "在筛选结果中包含子地点" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "上级地点" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "按上级位置筛选" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "零件名称 (不区分大小写)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "零件名称包含 (不区分大小写)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "零件名称 (正则表达式)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "内部零件号 (不区分大小写)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "内部零件号 (不区分大小写)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "内部零件号 (正则表达式)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "最低库存" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "最大库存" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "状态代码" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "外部地点" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "被生产订单消耗" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "安装于其他库存项中" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "零件树" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "更新时间早于" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "更新时间晚于" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "盘点时间早于" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "盘点时间晚于" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "过期日期前" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "过期日期后" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "过期" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "提供库存项的主键(PK)以排除该项及其所有子项" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "级联位置" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "若为真,则包含给定位置的所有子位置中的项目" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "按数字位置ID或字母“null”筛选" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "请先输入数量" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "必须提供有效的零件" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "给定的供应商零件不存在" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "供应商零件有定义的包装大小,但 use_pack_size 标志未设置" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "不能为不可跟踪的零件提供序列号" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "包含已安装项" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "如果为真,则包含给定库存项下已安装组件的测试结果" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" msgstr "按数字库存项ID进行筛选" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" msgstr "ID 为 {id} 的库存项不存在" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "包含零件变体" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "日期晚于" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "日期早于" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "库存地点类型" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "库存地点类型" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "为所有没有图标的位置设置默认图标(可选)" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "库存地点" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "库存地点" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "所有者" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "选择所有者" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "库存项可能不直接位于结构库存地点,但可能位于其子地点。" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "外部" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "这是一个外部库存地点" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "位置类型" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "该位置的库存地点类型" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "您不能将此库存地点设置为结构性,因为某些库存项已经位于它!" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "{field} 不存在" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "必须指定零件" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "库存项不能存放在结构性库存地点!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "无法为虚拟零件创建库存项" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "零件类型 ('{self.supplier_part.part}') 必须为 {self.part}" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "有序列号的项目的数量必须是1" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "如果数量大于1,则不能设置序列号" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "项目不能属于其自身" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "如果is_building=True,则项必须具有构建引用" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "构建引用未指向同一零件对象" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "父级库存项" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "基础零件" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "为此库存项目选择匹配的供应商零件" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "这个库存物品在哪里?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "包装此库存物品存储在" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "安装于" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "此项目是否安装在另一个项目中?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "此项目的序列号" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "此库存项的批号" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "库存数量" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "源代码构建" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "为此库存项目构建" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "消费者" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "构建消耗此库存项的生产订单" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "采购订单来源" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "此库存商品的采购订单" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "目的地销售订单" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "库存物品的到期日。在此日期之后,库存将被视为过期" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "耗尽时删除" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "当库存耗尽时删除此库存项" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "购买时一个单位的价格" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "转换为零件" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "数量超过可用库存" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "零件未设置为可跟踪" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "数量必须是整数" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "数量不得超过现有库存量 ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "必须以列表形式提供序列号" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "数量不匹配序列号" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" msgstr "无法将库存分配到结构位置" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "测试模板不存在" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "库存项已分配到销售订单" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "库存项已安装在另一个项目中" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "库存项包含其他项目" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "库存项已分配给客户" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "库存项目前正在生产" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "序列化的库存不能合并" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "复制库存项" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "库存项必须指相同零件" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "库存项必须是同一供应商的零件" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "库存状态码必须匹配" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "库存项不能移动,因为它没有库存" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "库存项跟踪" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "条目注释" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "库存项测试结果" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "必须为此测试提供值" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "测试附件必须上传" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "此测试的值无效" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "测试结果" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "测试输出值" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "测验结果附件" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "测试备注" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "测试站" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "进行测试的测试站的标识符" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "已开始" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "测试开始的时间戳" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "已完成" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "测试结束的时间戳" @@ -8664,246 +8821,246 @@ msgstr "选择要生成序列号的零件" msgid "Quantity of serial numbers to generate" msgstr "要生成的序列号的数量" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "此结果的测试模板" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" msgstr "未找到适用于此零件的匹配测试" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "必须提供模板 ID 或测试名称" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "测试完成时间不能早于测试开始时间" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "父项" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "父库存项" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "添加时使用包装尺寸:定义的数量是包装的数量" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "包装规格" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "输入新项目的序列号" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "供应商零件编号" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "已过期" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "子项目" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "跟踪项目" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "此库存商品的购买价格,单位或包装" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "输入要序列化的库存项目数量" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "未提供库存项" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "数量不得超过现有库存量 ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "目标库存位置" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "此零件不能分配序列号" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "序列号已存在" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "选择要安装的库存项目" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "安装数量" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "输入要安装的项目数量" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "添加交易记录 (可选)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "安装数量必须至少为1" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "库存项不可用" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "所选零件不在物料清单中" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "安装数量不得超过可用数量" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "已卸载项目的目标位置" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "选择要将库存项目转换为的零件" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "所选零件不是有效的转换选项" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "无法转换已分配供应商零件的库存项" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "库存项状态代码" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "选择要更改状态的库存项目" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "未选择库存商品" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "子位置" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "上级库存地点" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "零件必须可销售" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "物料已分配到销售订单" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "项目被分配到生产订单中" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "客户分配库存项目" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "所选公司不是客户" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "库存分配说明" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "必须提供库存物品清单" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "库存合并说明" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "允许不匹配的供应商" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "允许合并具有不同供应商零件的库存项目" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "允许不匹配的状态" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "允许合并具有不同状态代码的库存项目" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "必须提供至少两件库存物品" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "无更改" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "库存项主键值" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "库存项无现货" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "库存项已有现货" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "数量不得为负" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "库存交易记录" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "合并至现有库存" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "若可行,将退回项目合并至现有库存项" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "下一个序列号" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "上一个序列号" @@ -8961,7 +9118,7 @@ msgstr "已手动删除库存" #: stock/status_codes.py:56 msgid "Serialized stock items" -msgstr "显示已序列化的库存物品" +msgstr "已序列化的库存物品" #: stock/status_codes.py:58 msgid "Returned to stock" @@ -9385,83 +9542,83 @@ msgstr "销售订单" msgid "Return Orders" msgstr "退货订单" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "用户名" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "名" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "用户的名字(不包括姓氏)" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "姓" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "用户的姓氏" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "用户的电子邮件地址" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "职员" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "此用户是否拥有员工权限" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "超级用户" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "此用户是否为超级用户" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "此用户帐户是否已激活" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "只有超级用户可以调整此字段" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "密码" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "用户密码" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "覆盖警告" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "覆盖有关密码规则的警告" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "你没有权限创建用户" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "您的账户已创建。" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "请使用密码重置功能登录" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "欢迎使用 InvenTree" diff --git a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po index 8d082882ef..ab9cc0a734 100644 --- a/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po +++ b/src/backend/InvenTree/locale/zh_Hant/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: inventree\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-12-07 07:33+0000\n" -"PO-Revision-Date: 2025-12-07 07:36\n" +"POT-Creation-Date: 2026-03-21 12:48+0000\n" +"PO-Revision-Date: 2026-03-21 12:51\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -17,67 +17,59 @@ msgstr "" "X-Crowdin-File: /src/backend/InvenTree/locale/en/LC_MESSAGES/django.po\n" "X-Crowdin-File-ID: 250\n" -#: InvenTree/api.py:358 +#: InvenTree/api.py:365 msgid "API endpoint not found" msgstr "未找到 API 端點" -#: InvenTree/api.py:435 -msgid "List of items or filters must be provided for bulk operation" -msgstr "批次操作必須提供項目列表或篩選條件" +#: InvenTree/api.py:438 +msgid "List of items must be provided for bulk operation" +msgstr "" -#: InvenTree/api.py:442 +#: InvenTree/api.py:445 msgid "Items must be provided as a list" msgstr "項目必須以列表形式提供" -#: InvenTree/api.py:450 +#: InvenTree/api.py:453 msgid "Invalid items list provided" msgstr "提供了無效的單位" -#: InvenTree/api.py:456 -msgid "Filters must be provided as a dict" -msgstr "篩選條件必須以字典 (dict) 格式提供" - -#: InvenTree/api.py:463 -msgid "Invalid filters provided" -msgstr "提供了無效的過濾器" - -#: InvenTree/api.py:468 +#: InvenTree/api.py:458 msgid "All filter must only be used with true" msgstr "all 篩選器只能在值為 true 時使用" -#: InvenTree/api.py:473 +#: InvenTree/api.py:463 msgid "No items match the provided criteria" msgstr "沒有項目符合所提供的條件" -#: InvenTree/api.py:497 +#: InvenTree/api.py:487 msgid "No data provided" msgstr "未提供資料" -#: InvenTree/api.py:513 +#: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "此欄位須唯一值。" -#: InvenTree/api.py:803 +#: InvenTree/api.py:805 msgid "User does not have permission to view this model" msgstr "用户沒有權限查閲當前模型。" -#: InvenTree/auth_overrides.py:56 +#: InvenTree/auth_overrides.py:58 msgid "Email (again)" msgstr "電子郵件 (重複)" -#: InvenTree/auth_overrides.py:60 +#: InvenTree/auth_overrides.py:62 msgid "Email address confirmation" msgstr "郵箱地址已確認" -#: InvenTree/auth_overrides.py:83 +#: InvenTree/auth_overrides.py:85 msgid "You must type the same email each time." msgstr "您必須每次輸入相同的電子郵件。" -#: InvenTree/auth_overrides.py:125 InvenTree/auth_overrides.py:132 +#: InvenTree/auth_overrides.py:132 InvenTree/auth_overrides.py:139 msgid "The provided primary email address is not valid." msgstr "提供的主電子郵件地址無效。" -#: InvenTree/auth_overrides.py:138 +#: InvenTree/auth_overrides.py:145 msgid "The provided email domain is not approved." msgstr "提供的郵箱域名未被批准。" @@ -96,7 +88,7 @@ msgid "Could not convert {original} to {unit}" msgstr "不能將 {original} 轉換到 {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 -#: InvenTree/helpers.py:597 order/models.py:721 order/models.py:1016 +#: InvenTree/helpers.py:610 order/models.py:734 order/models.py:1029 msgid "Invalid quantity provided" msgstr "提供的數量無效" @@ -112,13 +104,13 @@ msgstr "輸入日期" msgid "Invalid decimal value" msgstr "無效的十進位數值" -#: InvenTree/fields.py:218 InvenTree/models.py:1228 build/serializers.py:517 -#: build/serializers.py:588 build/serializers.py:1796 company/models.py:811 -#: order/models.py:1781 +#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:497 +#: build/serializers.py:568 build/serializers.py:1765 company/models.py:827 +#: order/models.py:1796 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2865 stock/models.py:2989 stock/serializers.py:717 -#: stock/serializers.py:893 stock/serializers.py:1035 stock/serializers.py:1336 -#: stock/serializers.py:1425 stock/serializers.py:1624 +#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:723 +#: stock/serializers.py:899 stock/serializers.py:1041 stock/serializers.py:1369 +#: stock/serializers.py:1458 stock/serializers.py:1657 msgid "Notes" msgstr "備註" @@ -131,75 +123,75 @@ msgstr "值' {name}' 未出現在模式格式中" msgid "Provided value does not match required pattern: " msgstr "提供的值與所需模式不匹配:" -#: InvenTree/helpers.py:601 +#: InvenTree/helpers.py:614 msgid "Cannot serialize more than 1000 items at once" msgstr "一次不能序列化超過 1000 個項目" -#: InvenTree/helpers.py:607 +#: InvenTree/helpers.py:620 msgid "Empty serial number string" msgstr "序號為空白" -#: InvenTree/helpers.py:636 +#: InvenTree/helpers.py:649 msgid "Duplicate serial" msgstr "複製序列號" -#: InvenTree/helpers.py:668 InvenTree/helpers.py:711 InvenTree/helpers.py:729 -#: InvenTree/helpers.py:736 InvenTree/helpers.py:755 +#: InvenTree/helpers.py:681 InvenTree/helpers.py:724 InvenTree/helpers.py:742 +#: InvenTree/helpers.py:749 InvenTree/helpers.py:768 #, python-brace-format msgid "Invalid group: {group}" msgstr "無效的群組:{group}" -#: InvenTree/helpers.py:699 +#: InvenTree/helpers.py:712 #, python-brace-format msgid "Group range {group} exceeds allowed quantity ({expected_quantity})" msgstr "組範圍 {group} 超出了允許的數量 ({expected_quantity})" -#: InvenTree/helpers.py:765 +#: InvenTree/helpers.py:778 msgid "No serial numbers found" msgstr "未找到序列號" -#: InvenTree/helpers.py:772 +#: InvenTree/helpers.py:785 #, python-brace-format msgid "Number of unique serial numbers ({n}) must match quantity ({q})" msgstr "唯一序列號數量 ({n}) 必須與數量 ({q}) 相符" -#: InvenTree/helpers.py:902 +#: InvenTree/helpers.py:915 msgid "Remove HTML tags from this value" msgstr "從這個值中刪除 HTML 標籤" -#: InvenTree/helpers.py:981 +#: InvenTree/helpers.py:994 msgid "Data contains prohibited markdown content" msgstr "資料包含被禁止的 Markdown 內容" -#: InvenTree/helpers_model.py:134 +#: InvenTree/helpers_model.py:139 msgid "Connection error" msgstr "連接錯誤" -#: InvenTree/helpers_model.py:139 InvenTree/helpers_model.py:146 +#: InvenTree/helpers_model.py:144 InvenTree/helpers_model.py:151 msgid "Server responded with invalid status code" msgstr "服務器響應狀態碼無效" -#: InvenTree/helpers_model.py:142 +#: InvenTree/helpers_model.py:147 msgid "Exception occurred" msgstr "發生異常" -#: InvenTree/helpers_model.py:152 +#: InvenTree/helpers_model.py:157 msgid "Server responded with invalid Content-Length value" msgstr "服務器響應的內容長度值無效" -#: InvenTree/helpers_model.py:155 +#: InvenTree/helpers_model.py:160 msgid "Image size is too large" msgstr "圖片尺寸過大" -#: InvenTree/helpers_model.py:167 +#: InvenTree/helpers_model.py:172 msgid "Image download exceeded maximum size" msgstr "圖片下載超出最大尺寸" -#: InvenTree/helpers_model.py:172 +#: InvenTree/helpers_model.py:177 msgid "Remote server returned empty response" msgstr "遠程服務器返回了空響應" -#: InvenTree/helpers_model.py:180 +#: InvenTree/helpers_model.py:185 msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一個有效的圖片文件" @@ -207,11 +199,11 @@ msgstr "提供的 URL 不是一個有效的圖片文件" msgid "Log in to the app" msgstr "登入此應用程式" -#: InvenTree/magic_login.py:41 company/models.py:173 users/serializers.py:198 +#: InvenTree/magic_login.py:41 company/models.py:175 users/serializers.py:201 msgid "Email" msgstr "電子郵件" -#: InvenTree/middleware.py:177 +#: InvenTree/middleware.py:178 msgid "You must enable two-factor authentication before doing anything else." msgstr "在進行任何其他操作前,必須先啟用雙因素驗證。" @@ -255,135 +247,126 @@ msgstr "參考欄位並須符合格式" msgid "Reference number is too large" msgstr "參考編號過大" -#: InvenTree/models.py:896 +#: InvenTree/models.py:901 msgid "Invalid choice" msgstr "無效的選項" -#: InvenTree/models.py:1017 common/models.py:1414 common/models.py:1841 -#: common/models.py:2102 common/models.py:2227 common/models.py:2494 -#: common/serializers.py:539 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1127 plugin/models.py:54 -#: report/models.py:216 stock/models.py:84 +#: InvenTree/models.py:1022 common/models.py:1431 common/models.py:1858 +#: common/models.py:2119 common/models.py:2244 common/models.py:2513 +#: common/serializers.py:638 generic/states/serializers.py:20 +#: machine/models.py:25 part/models.py:1107 plugin/models.py:54 +#: report/models.py:216 stock/models.py:86 msgid "Name" msgstr "名稱" -#: InvenTree/models.py:1023 build/models.py:253 common/models.py:175 -#: common/models.py:2234 common/models.py:2347 common/models.py:2509 -#: company/models.py:545 company/models.py:802 order/models.py:443 -#: order/models.py:1826 part/models.py:1150 report/models.py:222 +#: InvenTree/models.py:1028 build/models.py:265 common/models.py:177 +#: common/models.py:2251 common/models.py:2364 common/models.py:2528 +#: company/models.py:558 company/models.py:818 order/models.py:447 +#: order/models.py:1841 part/models.py:1130 report/models.py:222 #: report/models.py:815 report/models.py:841 #: report/templates/report/inventree_build_order_report.html:117 -#: stock/models.py:90 +#: stock/models.py:92 msgid "Description" msgstr "描述" -#: InvenTree/models.py:1024 stock/models.py:91 +#: InvenTree/models.py:1029 stock/models.py:93 msgid "Description (optional)" msgstr "描述(選填)" -#: InvenTree/models.py:1039 common/models.py:2815 +#: InvenTree/models.py:1044 common/models.py:2834 msgid "Path" msgstr "路徑" -#: InvenTree/models.py:1144 +#: InvenTree/models.py:1149 msgid "Duplicate names cannot exist under the same parent" msgstr "同一個上層元件下不能有重複的名字" -#: InvenTree/models.py:1228 +#: InvenTree/models.py:1233 msgid "Markdown notes (optional)" msgstr "Markdown 註記(選填)" -#: InvenTree/models.py:1259 +#: InvenTree/models.py:1264 msgid "Barcode Data" msgstr "條碼資料" -#: InvenTree/models.py:1260 +#: InvenTree/models.py:1265 msgid "Third party barcode data" msgstr "第三方條碼資料" -#: InvenTree/models.py:1266 +#: InvenTree/models.py:1271 msgid "Barcode Hash" msgstr "條碼雜湊值" -#: InvenTree/models.py:1267 +#: InvenTree/models.py:1272 msgid "Unique hash of barcode data" msgstr "條碼資料的唯一雜湊值" -#: InvenTree/models.py:1348 +#: InvenTree/models.py:1353 msgid "Existing barcode found" msgstr "發現現有條碼" -#: InvenTree/models.py:1430 -msgid "Task Failure" -msgstr "任務失敗" - -#: InvenTree/models.py:1431 -#, python-brace-format -msgid "Background worker task '{f}' failed after {n} attempts" -msgstr "背景工作任務「{f}」在嘗試 {n} 次後失敗" - -#: InvenTree/models.py:1458 +#: InvenTree/models.py:1453 msgid "Server Error" msgstr "伺服器錯誤" -#: InvenTree/models.py:1459 +#: InvenTree/models.py:1454 msgid "An error has been logged by the server." msgstr "伺服器紀錄了一個錯誤。" -#: InvenTree/models.py:1501 common/models.py:1752 +#: InvenTree/models.py:1496 common/models.py:1769 #: report/templates/report/inventree_bill_of_materials_report.html:126 #: report/templates/report/inventree_bill_of_materials_report.html:148 #: report/templates/report/inventree_return_order_report.html:35 msgid "Image" msgstr "圖像" -#: InvenTree/serializers.py:255 part/models.py:4196 +#: InvenTree/serializers.py:327 part/models.py:4174 msgid "Must be a valid number" msgstr "必須是有效的數字" -#: InvenTree/serializers.py:297 company/models.py:215 part/models.py:3349 +#: InvenTree/serializers.py:369 company/models.py:217 part/models.py:3313 msgid "Currency" msgstr "貨幣" -#: InvenTree/serializers.py:300 part/serializers.py:1250 +#: InvenTree/serializers.py:372 part/serializers.py:1355 msgid "Select currency from available options" msgstr "從可用選項中選擇貨幣" -#: InvenTree/serializers.py:654 +#: InvenTree/serializers.py:726 msgid "This field may not be null." -msgstr "" +msgstr "此欄位不可為空白。" -#: InvenTree/serializers.py:660 +#: InvenTree/serializers.py:732 msgid "Invalid value" msgstr "無效值" -#: InvenTree/serializers.py:697 +#: InvenTree/serializers.py:769 msgid "Remote Image" msgstr "遠程圖片" -#: InvenTree/serializers.py:698 +#: InvenTree/serializers.py:770 msgid "URL of remote image file" msgstr "遠程圖片文件的 URL" -#: InvenTree/serializers.py:716 +#: InvenTree/serializers.py:788 msgid "Downloading images from remote URL is not enabled" msgstr "未啓用從遠程 URL下載圖片" -#: InvenTree/serializers.py:723 +#: InvenTree/serializers.py:795 msgid "Failed to download image from remote URL" msgstr "從遠程URL下載圖像失敗" -#: InvenTree/serializers.py:806 +#: InvenTree/serializers.py:878 msgid "Invalid content type format" -msgstr "" +msgstr "不合規的內容類型格式" -#: InvenTree/serializers.py:809 +#: InvenTree/serializers.py:881 msgid "Content type not found" -msgstr "" +msgstr "內容類型未發現" -#: InvenTree/serializers.py:815 +#: InvenTree/serializers.py:887 msgid "Content type does not match required mixin class" -msgstr "" +msgstr "內容類型與所需的 mixin 類別不符" #: InvenTree/setting/locales.py:20 msgid "Arabic" @@ -537,11 +520,11 @@ msgstr "中文 (簡體)" msgid "Chinese (Traditional)" msgstr "中文 (繁體)" -#: InvenTree/tasks.py:576 +#: InvenTree/tasks.py:620 msgid "Update Available" msgstr "有可用更新" -#: InvenTree/tasks.py:577 +#: InvenTree/tasks.py:621 msgid "An update for InvenTree is available" msgstr "有新的 InvenTree 更新可用" @@ -553,30 +536,30 @@ msgstr "無效的物理單位" msgid "Not a valid currency code" msgstr "無效的貨幣代碼" -#: build/api.py:54 order/api.py:116 order/api.py:275 order/api.py:1378 -#: order/serializers.py:133 +#: build/api.py:55 order/api.py:113 order/api.py:280 order/api.py:1379 +#: order/serializers.py:123 msgid "Order Status" msgstr "訂單狀態" -#: build/api.py:80 build/models.py:265 +#: build/api.py:81 build/models.py:277 msgid "Parent Build" msgstr "上層生產工單" -#: build/api.py:84 build/api.py:837 order/api.py:553 order/api.py:776 -#: order/api.py:1179 order/api.py:1454 stock/api.py:573 +#: build/api.py:85 build/api.py:904 order/api.py:557 order/api.py:780 +#: order/api.py:1180 order/api.py:1481 stock/api.py:572 msgid "Include Variants" msgstr "包含變體" -#: build/api.py:100 build/api.py:472 build/api.py:851 build/models.py:271 -#: build/serializers.py:1233 build/serializers.py:1364 -#: build/serializers.py:1435 company/models.py:1021 company/serializers.py:490 -#: order/api.py:303 order/api.py:307 order/api.py:934 order/api.py:1192 -#: order/api.py:1195 order/models.py:1942 order/models.py:2109 -#: order/models.py:2110 part/api.py:1160 part/api.py:1163 part/api.py:1314 -#: part/models.py:550 part/models.py:3360 part/models.py:3503 -#: part/models.py:3561 part/models.py:3582 part/models.py:3604 -#: part/models.py:3743 part/models.py:3993 part/models.py:4412 -#: part/serializers.py:1801 +#: build/api.py:101 build/api.py:461 build/api.py:918 build/models.py:283 +#: build/serializers.py:1205 build/serializers.py:1376 +#: build/serializers.py:1462 company/models.py:1037 company/serializers.py:435 +#: order/api.py:308 order/api.py:312 order/api.py:937 order/api.py:1193 +#: order/api.py:1196 order/models.py:1959 order/models.py:2127 +#: order/models.py:2128 part/api.py:1132 part/api.py:1135 part/api.py:1348 +#: part/models.py:527 part/models.py:3324 part/models.py:3467 +#: part/models.py:3525 part/models.py:3546 part/models.py:3568 +#: part/models.py:3709 part/models.py:3971 part/models.py:4390 +#: part/serializers.py:1304 part/serializers.py:1926 #: report/templates/report/inventree_bill_of_materials_report.html:110 #: report/templates/report/inventree_bill_of_materials_report.html:137 #: report/templates/report/inventree_build_order_report.html:109 @@ -585,9 +568,9 @@ msgstr "包含變體" #: report/templates/report/inventree_sales_order_report.html:27 #: report/templates/report/inventree_sales_order_shipment_report.html:28 #: report/templates/report/inventree_stock_location_report.html:102 -#: stock/api.py:586 stock/serializers.py:120 stock/serializers.py:172 -#: stock/serializers.py:408 stock/serializers.py:594 stock/serializers.py:926 -#: templates/email/build_order_completed.html:17 +#: stock/api.py:585 stock/api.py:1529 stock/serializers.py:120 +#: stock/serializers.py:172 stock/serializers.py:410 stock/serializers.py:593 +#: stock/serializers.py:932 templates/email/build_order_completed.html:17 #: templates/email/build_order_required_stock.html:17 #: templates/email/low_stock_notification.html:15 #: templates/email/overdue_build_order.html:16 @@ -596,192 +579,197 @@ msgstr "包含變體" msgid "Part" msgstr "零件" -#: build/api.py:120 build/api.py:123 build/serializers.py:1446 part/api.py:975 -#: part/api.py:1325 part/models.py:435 part/models.py:1168 part/models.py:3632 -#: part/serializers.py:1617 stock/api.py:869 +#: build/api.py:121 build/api.py:124 build/serializers.py:1475 part/api.py:967 +#: part/api.py:1359 part/models.py:412 part/models.py:1148 part/models.py:3596 +#: part/serializers.py:1314 part/serializers.py:1742 stock/api.py:868 msgid "Category" msgstr "類別" -#: build/api.py:131 build/api.py:135 +#: build/api.py:132 build/api.py:136 msgid "Ancestor Build" msgstr "可測試部分" -#: build/api.py:152 order/api.py:134 +#: build/api.py:153 order/api.py:131 msgid "Assigned to me" msgstr "分配給我" -#: build/api.py:167 +#: build/api.py:168 msgid "Assigned To" msgstr "負責人" -#: build/api.py:202 +#: build/api.py:203 msgid "Created before" msgstr "建立於之前" -#: build/api.py:206 +#: build/api.py:207 msgid "Created after" msgstr "建立於之後" -#: build/api.py:210 +#: build/api.py:211 msgid "Has start date" msgstr "有開始日期" -#: build/api.py:218 +#: build/api.py:219 msgid "Start date before" msgstr "開始日期早於" -#: build/api.py:222 +#: build/api.py:223 msgid "Start date after" msgstr "開始日期晚於" -#: build/api.py:226 +#: build/api.py:227 msgid "Has target date" msgstr "有目標日期" -#: build/api.py:234 +#: build/api.py:235 msgid "Target date before" msgstr "目標日期早於" -#: build/api.py:238 +#: build/api.py:239 msgid "Target date after" msgstr "目標日期晚於" -#: build/api.py:242 +#: build/api.py:243 msgid "Completed before" msgstr "完成於之前" -#: build/api.py:246 +#: build/api.py:247 msgid "Completed after" msgstr "完成於之後" -#: build/api.py:249 order/api.py:231 +#: build/api.py:250 order/api.py:236 msgid "Min Date" msgstr "最小日期" -#: build/api.py:272 order/api.py:250 +#: build/api.py:273 order/api.py:255 msgid "Max Date" msgstr "最大日期" -#: build/api.py:297 build/api.py:300 part/api.py:212 stock/api.py:961 +#: build/api.py:298 build/api.py:301 part/api.py:197 stock/api.py:960 msgid "Exclude Tree" msgstr "排除樹" -#: build/api.py:411 +#: build/api.py:400 msgid "Build must be cancelled before it can be deleted" msgstr "工單必須被取消才能被刪除" -#: build/api.py:455 build/serializers.py:1382 part/models.py:4027 +#: build/api.py:444 build/serializers.py:1406 part/models.py:4005 msgid "Consumable" msgstr "耗材" -#: build/api.py:458 build/serializers.py:1385 part/models.py:4021 +#: build/api.py:447 build/serializers.py:1409 part/models.py:3999 msgid "Optional" msgstr "非必須項目" -#: build/api.py:461 build/serializers.py:1423 common/setting/system.py:456 -#: part/models.py:1290 part/serializers.py:1579 part/serializers.py:1590 -#: stock/api.py:639 +#: build/api.py:450 build/serializers.py:1449 common/setting/system.py:470 +#: part/models.py:1253 part/serializers.py:1696 part/serializers.py:1715 +#: stock/api.py:638 msgid "Assembly" msgstr "裝配" -#: build/api.py:464 +#: build/api.py:453 msgid "Tracked" msgstr "追蹤中" -#: build/api.py:467 build/serializers.py:1388 part/models.py:1308 +#: build/api.py:456 build/serializers.py:1412 part/models.py:1271 msgid "Testable" msgstr "可測試" -#: build/api.py:477 order/api.py:998 order/api.py:1368 +#: build/api.py:466 order/api.py:1001 order/api.py:1369 msgid "Order Outstanding" msgstr "訂單未完成" -#: build/api.py:487 build/serializers.py:1472 order/api.py:957 +#: build/api.py:476 build/serializers.py:1502 order/api.py:960 msgid "Allocated" msgstr "已分配" -#: build/api.py:496 build/models.py:1673 build/serializers.py:1401 +#: build/api.py:485 build/models.py:1786 build/serializers.py:1425 msgid "Consumed" msgstr "已消耗" -#: build/api.py:505 company/models.py:866 company/serializers.py:467 +#: build/api.py:494 company/models.py:882 company/serializers.py:414 #: templates/email/build_order_required_stock.html:19 #: templates/email/low_stock_notification.html:17 #: templates/email/part_event_notification.html:18 msgid "Available" msgstr "可用數量" -#: build/api.py:529 build/serializers.py:1474 company/serializers.py:464 -#: order/serializers.py:1295 part/serializers.py:844 part/serializers.py:1171 -#: part/serializers.py:1626 +#: build/api.py:518 build/serializers.py:1504 company/serializers.py:411 +#: order/serializers.py:1282 part/serializers.py:849 part/serializers.py:1170 +#: part/serializers.py:1751 msgid "On Order" msgstr "已訂購" -#: build/api.py:874 build/models.py:118 order/models.py:1975 +#: build/api.py:671 +msgid "Build not found" +msgstr "" + +#: build/api.py:941 build/models.py:120 order/models.py:1992 #: report/templates/report/inventree_build_order_report.html:105 #: stock/serializers.py:93 templates/email/build_order_completed.html:16 #: templates/email/overdue_build_order.html:15 msgid "Build Order" msgstr "生產工單" -#: build/api.py:888 build/api.py:892 build/serializers.py:380 -#: build/serializers.py:505 build/serializers.py:575 build/serializers.py:1259 -#: build/serializers.py:1264 order/api.py:1239 order/api.py:1244 -#: order/serializers.py:844 order/serializers.py:984 order/serializers.py:2059 -#: stock/api.py:987 stock/serializers.py:111 stock/serializers.py:601 -#: stock/serializers.py:710 stock/serializers.py:888 stock/serializers.py:1418 -#: stock/serializers.py:1739 stock/serializers.py:1788 -#: templates/email/stale_stock_notification.html:18 users/models.py:549 +#: build/api.py:955 build/api.py:959 build/serializers.py:360 +#: build/serializers.py:485 build/serializers.py:555 build/serializers.py:1253 +#: build/serializers.py:1258 order/api.py:1240 order/api.py:1245 +#: order/serializers.py:802 order/serializers.py:942 order/serializers.py:2023 +#: part/serializers.py:1324 stock/api.py:986 stock/serializers.py:111 +#: stock/serializers.py:600 stock/serializers.py:716 stock/serializers.py:894 +#: stock/serializers.py:1451 stock/serializers.py:1772 +#: stock/serializers.py:1821 templates/email/stale_stock_notification.html:18 +#: users/models.py:549 msgid "Location" msgstr "地點" -#: build/api.py:900 +#: build/api.py:967 part/serializers.py:1349 msgid "Output" -msgstr "" +msgstr "產出" -#: build/api.py:902 +#: build/api.py:969 msgid "Filter by output stock item ID. Use 'null' to find uninstalled build items." msgstr "" -#: build/models.py:119 users/ruleset.py:31 +#: build/models.py:121 users/ruleset.py:31 msgid "Build Orders" msgstr "生產工單" -#: build/models.py:169 +#: build/models.py:181 msgid "Assembly BOM has not been validated" msgstr "裝配物料清單尚未驗證" -#: build/models.py:176 +#: build/models.py:188 msgid "Build order cannot be created for an inactive part" msgstr "無法為未激活的零件創建生產訂單" -#: build/models.py:183 +#: build/models.py:195 msgid "Build order cannot be created for an unlocked part" msgstr "無法為已解鎖的零件創建生產訂單" -#: build/models.py:201 +#: build/models.py:213 msgid "Build orders can only be externally fulfilled for purchaseable parts" msgstr "只有可採購的零件,生產工單才可進行外部履行" -#: build/models.py:208 order/models.py:370 +#: build/models.py:220 order/models.py:373 msgid "Responsible user or group must be specified" msgstr "必須指定負責的用户或組" -#: build/models.py:213 +#: build/models.py:225 msgid "Build order part cannot be changed" msgstr "無法更改生產工單" -#: build/models.py:218 order/models.py:383 +#: build/models.py:230 order/models.py:386 msgid "Target date must be after start date" msgstr "目標日期必須晚於開始日期" -#: build/models.py:246 +#: build/models.py:258 msgid "Build Order Reference" msgstr "生產工單代號" -#: build/models.py:247 build/serializers.py:1379 order/models.py:615 -#: order/models.py:1312 order/models.py:1774 order/models.py:2713 -#: part/models.py:4067 +#: build/models.py:259 build/serializers.py:1403 order/models.py:628 +#: order/models.py:1327 order/models.py:1789 order/models.py:2724 +#: part/models.py:4045 #: report/templates/report/inventree_bill_of_materials_report.html:139 #: report/templates/report/inventree_purchase_order_report.html:35 #: report/templates/report/inventree_return_order_report.html:26 @@ -789,230 +777,234 @@ msgstr "生產工單代號" msgid "Reference" msgstr "參考代號" -#: build/models.py:256 +#: build/models.py:268 msgid "Brief description of the build (optional)" msgstr "關於生產工單的簡單説明(選填)" -#: build/models.py:266 -msgid "BuildOrder to which this build is allocated" -msgstr "這張生產工單對應的上層生產工單" +#: build/models.py:278 +msgid "Build Order to which this build is allocated" +msgstr "" -#: build/models.py:275 +#: build/models.py:287 msgid "Select part to build" msgstr "選擇要生產的零件" -#: build/models.py:280 +#: build/models.py:292 msgid "Sales Order Reference" msgstr "銷售訂單代號" -#: build/models.py:285 -msgid "SalesOrder to which this build is allocated" -msgstr "這張生產工單對應的銷售訂單" +#: build/models.py:297 +msgid "Sales Order to which this build is allocated" +msgstr "" -#: build/models.py:290 build/serializers.py:1105 +#: build/models.py:302 build/serializers.py:1085 msgid "Source Location" msgstr "來源倉儲地點" -#: build/models.py:296 +#: build/models.py:308 msgid "Select location to take stock from for this build (leave blank to take from any stock location)" msgstr "選擇領取料件的倉儲地點(留白表示可以從任何地點領取)" -#: build/models.py:302 +#: build/models.py:314 msgid "External Build" msgstr "外部生產" -#: build/models.py:303 +#: build/models.py:315 msgid "This build order is fulfilled externally" msgstr "此生產工單由外部履行" -#: build/models.py:308 +#: build/models.py:320 msgid "Destination Location" msgstr "目標倉儲地點" -#: build/models.py:313 +#: build/models.py:325 msgid "Select location where the completed items will be stored" msgstr "選擇已完成項目庫存地點" -#: build/models.py:317 +#: build/models.py:329 msgid "Build Quantity" msgstr "生產數量" -#: build/models.py:320 +#: build/models.py:332 msgid "Number of stock items to build" msgstr "要生產的項目數量" -#: build/models.py:324 +#: build/models.py:336 msgid "Completed items" msgstr "已完成項目" -#: build/models.py:326 +#: build/models.py:338 msgid "Number of stock items which have been completed" msgstr "已經完成的庫存品數量" -#: build/models.py:330 +#: build/models.py:342 msgid "Build Status" msgstr "生產狀態" -#: build/models.py:335 +#: build/models.py:347 msgid "Build status code" msgstr "生產狀態代碼" -#: build/models.py:344 build/serializers.py:367 order/serializers.py:860 -#: stock/models.py:1100 stock/serializers.py:85 stock/serializers.py:1591 +#: build/models.py:356 build/serializers.py:347 order/serializers.py:818 +#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1624 msgid "Batch Code" msgstr "批號" -#: build/models.py:348 build/serializers.py:368 +#: build/models.py:360 build/serializers.py:348 msgid "Batch code for this build output" msgstr "此產出的批號" -#: build/models.py:352 order/models.py:480 order/serializers.py:193 -#: part/models.py:1371 +#: build/models.py:364 order/models.py:484 order/serializers.py:166 +#: part/models.py:1334 msgid "Creation Date" msgstr "建立日期" -#: build/models.py:358 +#: build/models.py:370 msgid "Build start date" msgstr "生產開始日期" -#: build/models.py:359 +#: build/models.py:371 msgid "Scheduled start date for this build order" msgstr "預計此生產工單的開始日期" -#: build/models.py:365 +#: build/models.py:377 msgid "Target completion date" msgstr "目標完成日期" -#: build/models.py:367 +#: build/models.py:379 msgid "Target date for build completion. Build will be overdue after this date." msgstr "生產的預計完成日期。若超過此日期則工單會逾期。" -#: build/models.py:372 order/models.py:668 order/models.py:2752 +#: build/models.py:384 order/models.py:681 order/models.py:2763 msgid "Completion Date" msgstr "完成日期" -#: build/models.py:380 +#: build/models.py:392 msgid "completed by" msgstr "完成者" -#: build/models.py:389 +#: build/models.py:401 msgid "Issued by" msgstr "發布者" -#: build/models.py:390 +#: build/models.py:402 msgid "User who issued this build order" msgstr "發布此生產工單的使用者" -#: build/models.py:399 common/models.py:184 order/api.py:184 -#: order/models.py:505 part/models.py:1388 +#: build/models.py:411 common/models.py:186 order/api.py:181 +#: order/models.py:516 part/models.py:1351 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "負責人" -#: build/models.py:400 +#: build/models.py:412 msgid "User or group responsible for this build order" msgstr "負責此生產工單的使用者或羣組" -#: build/models.py:405 stock/models.py:1093 +#: build/models.py:417 stock/models.py:1100 msgid "External Link" msgstr "外部連結" -#: build/models.py:407 common/models.py:1990 part/models.py:1202 -#: stock/models.py:1095 +#: build/models.py:419 common/models.py:2007 part/models.py:1182 +#: stock/models.py:1102 msgid "Link to external URL" msgstr "外部URL連結" -#: build/models.py:412 +#: build/models.py:424 msgid "Build Priority" msgstr "製造優先度" -#: build/models.py:415 +#: build/models.py:427 msgid "Priority of this build order" msgstr "此生產工單的優先程度" -#: build/models.py:423 common/models.py:154 common/models.py:168 -#: order/api.py:170 order/models.py:452 order/models.py:1806 +#: build/models.py:435 common/models.py:156 common/models.py:170 +#: order/api.py:167 order/models.py:456 order/models.py:1821 msgid "Project Code" msgstr "專案代碼" -#: build/models.py:424 +#: build/models.py:436 msgid "Project code for this build order" msgstr "此生產工單隸屬的專案代碼" -#: build/models.py:677 +#: build/models.py:689 msgid "Cannot complete build order with open child builds" msgstr "無法完成仍有未結束子工單的生產工單" -#: build/models.py:682 +#: build/models.py:694 msgid "Cannot complete build order with incomplete outputs" msgstr "無法完成有未完成產出的生產工單" -#: build/models.py:701 build/models.py:831 +#: build/models.py:713 build/models.py:843 msgid "Failed to offload task to complete build allocations" msgstr "未能卸載任務以完成生產分配" -#: build/models.py:724 +#: build/models.py:736 #, python-brace-format msgid "Build order {build} has been completed" msgstr "生產工單 {build} 已經完成" -#: build/models.py:730 +#: build/models.py:742 msgid "A build order has been completed" msgstr "一張生產工單已經完成" -#: build/models.py:912 build/serializers.py:415 +#: build/models.py:924 build/serializers.py:395 msgid "Serial numbers must be provided for trackable parts" msgstr "對於可跟蹤的零件,必須提供序列號" -#: build/models.py:1043 build/models.py:1130 +#: build/models.py:1016 build/models.py:1103 msgid "No build output specified" msgstr "未指定產出" -#: build/models.py:1046 +#: build/models.py:1019 msgid "Build output is already completed" msgstr "產出已完成" -#: build/models.py:1049 +#: build/models.py:1022 msgid "Build output does not match Build Order" msgstr "產出與生產訂單不匹配" -#: build/models.py:1137 build/models.py:1235 build/serializers.py:293 -#: build/serializers.py:343 build/serializers.py:973 build/serializers.py:1747 -#: order/models.py:718 order/serializers.py:669 order/serializers.py:855 -#: part/serializers.py:1573 stock/models.py:940 stock/models.py:1430 -#: stock/models.py:1878 stock/serializers.py:688 stock/serializers.py:1580 +#: build/models.py:1110 build/models.py:1216 build/serializers.py:273 +#: build/serializers.py:323 build/serializers.py:953 build/serializers.py:1716 +#: order/models.py:731 order/serializers.py:613 order/serializers.py:813 +#: part/serializers.py:1689 stock/models.py:947 stock/models.py:1437 +#: stock/models.py:1902 stock/serializers.py:694 stock/serializers.py:1613 msgid "Quantity must be greater than zero" msgstr "數量必須大於零" -#: build/models.py:1141 build/models.py:1240 build/serializers.py:298 +#: build/models.py:1114 build/models.py:1221 build/serializers.py:278 msgid "Quantity cannot be greater than the output quantity" msgstr "數量不能大於輸出數量" -#: build/models.py:1215 build/serializers.py:614 +#: build/models.py:1189 build/serializers.py:594 msgid "Build output has not passed all required tests" msgstr "此產出尚未通過所有必要測試" -#: build/models.py:1218 build/serializers.py:609 +#: build/models.py:1192 build/serializers.py:589 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "產出 {serial} 未通過所有必要測試" -#: build/models.py:1230 +#: build/models.py:1203 +msgid "Allocated stock items are still in production" +msgstr "" + +#: build/models.py:1211 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1628 +#: build/models.py:1740 msgid "Build Order Line Item" msgstr "生產訂單行項目" -#: build/models.py:1652 +#: build/models.py:1765 msgid "Build object" msgstr "生產對象" -#: build/models.py:1664 build/models.py:1975 build/serializers.py:279 -#: build/serializers.py:328 build/serializers.py:1400 common/models.py:1344 -#: order/models.py:1757 order/models.py:2598 order/serializers.py:1710 -#: order/serializers.py:2141 part/models.py:3517 part/models.py:4015 +#: build/models.py:1777 build/models.py:2102 build/serializers.py:259 +#: build/serializers.py:308 build/serializers.py:1424 common/models.py:1361 +#: order/models.py:1772 order/models.py:2607 order/serializers.py:1675 +#: order/serializers.py:2112 part/models.py:3481 part/models.py:3993 #: report/templates/report/inventree_bill_of_materials_report.html:138 #: report/templates/report/inventree_build_order_report.html:113 #: report/templates/report/inventree_purchase_order_report.html:36 @@ -1024,433 +1016,445 @@ msgstr "生產對象" #: report/templates/report/inventree_stock_report_merge.html:113 #: report/templates/report/inventree_test_report.html:90 #: report/templates/report/inventree_test_report.html:169 -#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:676 +#: stock/serializers.py:136 stock/serializers.py:180 stock/serializers.py:682 #: templates/email/build_order_completed.html:18 #: templates/email/stale_stock_notification.html:19 msgid "Quantity" msgstr "數量" -#: build/models.py:1665 +#: build/models.py:1778 msgid "Required quantity for build order" msgstr "生產工單所需數量" -#: build/models.py:1674 +#: build/models.py:1787 msgid "Quantity of consumed stock" msgstr "已消耗庫存數量" -#: build/models.py:1773 +#: build/models.py:1888 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生產項必須指定產出,因為主零件已經被標記為可追蹤的" -#: build/models.py:1784 +#: build/models.py:1951 +msgid "Selected stock item does not match BOM line" +msgstr "選擇的庫存品項和BOM的項目不符" + +#: build/models.py:1970 +msgid "Allocated quantity must be greater than zero" +msgstr "" + +#: build/models.py:1976 +msgid "Quantity must be 1 for serialized stock" +msgstr "有序號的品項數量必須為1" + +#: build/models.py:1986 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配的數量({q})不能超過可用的庫存數量({a})" -#: build/models.py:1805 order/models.py:2547 +#: build/models.py:2003 order/models.py:2556 msgid "Stock item is over-allocated" msgstr "庫存品項超額分配" -#: build/models.py:1810 order/models.py:2550 -msgid "Allocation quantity must be greater than zero" -msgstr "分配的數量必須大於零" - -#: build/models.py:1816 -msgid "Quantity must be 1 for serialized stock" -msgstr "有序號的品項數量必須為1" - -#: build/models.py:1876 -msgid "Selected stock item does not match BOM line" -msgstr "選擇的庫存品項和BOM的項目不符" - -#: build/models.py:1914 -msgid "Allocated quantity exceeds available stock quantity" -msgstr "分配數量超過可用庫存" - -#: build/models.py:1965 build/serializers.py:956 build/serializers.py:1248 -#: order/serializers.py:1547 order/serializers.py:1568 +#: build/models.py:2092 build/serializers.py:936 build/serializers.py:1221 +#: order/serializers.py:1512 order/serializers.py:1533 #: report/templates/report/inventree_sales_order_shipment_report.html:29 -#: stock/api.py:1404 stock/models.py:456 stock/serializers.py:102 -#: stock/serializers.py:800 stock/serializers.py:1274 stock/serializers.py:1386 +#: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 +#: stock/serializers.py:806 stock/serializers.py:1307 stock/serializers.py:1419 msgid "Stock Item" msgstr "庫存品項" -#: build/models.py:1966 +#: build/models.py:2093 msgid "Source stock item" msgstr "來源庫存項目" -#: build/models.py:1976 +#: build/models.py:2103 msgid "Stock quantity to allocate to build" msgstr "要分配的庫存數量" -#: build/models.py:1985 +#: build/models.py:2112 msgid "Install into" msgstr "安裝到" -#: build/models.py:1986 +#: build/models.py:2113 msgid "Destination stock item" msgstr "目的庫存品項" -#: build/serializers.py:120 +#: build/serializers.py:115 msgid "Build Level" msgstr "構建等級" -#: build/serializers.py:136 +#: build/serializers.py:128 part/serializers.py:1256 msgid "Part Name" msgstr "零件名稱" -#: build/serializers.py:161 -msgid "Project Code Label" -msgstr "項目編碼標籤" - -#: build/serializers.py:227 build/serializers.py:982 +#: build/serializers.py:207 build/serializers.py:962 msgid "Build Output" msgstr "產出" -#: build/serializers.py:239 +#: build/serializers.py:219 msgid "Build output does not match the parent build" msgstr "產出與之前的生產不匹配" -#: build/serializers.py:243 +#: build/serializers.py:223 msgid "Output part does not match BuildOrder part" msgstr "產出零件與生產訂單零件不匹配" -#: build/serializers.py:247 +#: build/serializers.py:227 msgid "This build output has already been completed" msgstr "此產出已經完成" -#: build/serializers.py:261 +#: build/serializers.py:241 msgid "This build output is not fully allocated" msgstr "此產出尚未完全分配" -#: build/serializers.py:280 build/serializers.py:329 +#: build/serializers.py:260 build/serializers.py:309 msgid "Enter quantity for build output" msgstr "輸入產出數量" -#: build/serializers.py:351 +#: build/serializers.py:331 msgid "Integer quantity required for trackable parts" msgstr "可追蹤的零件數量必須為整數" -#: build/serializers.py:357 +#: build/serializers.py:337 msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因為BOM包含可追蹤的零件,所以數量必須為整數" -#: build/serializers.py:374 order/serializers.py:876 order/serializers.py:1714 -#: stock/serializers.py:699 +#: build/serializers.py:354 order/serializers.py:834 order/serializers.py:1679 +#: stock/serializers.py:705 msgid "Serial Numbers" msgstr "序號" -#: build/serializers.py:375 +#: build/serializers.py:355 msgid "Enter serial numbers for build outputs" msgstr "輸出產出的序列號" -#: build/serializers.py:381 +#: build/serializers.py:361 msgid "Stock location for build output" msgstr "生產輸出的庫存地點" -#: build/serializers.py:396 +#: build/serializers.py:376 msgid "Auto Allocate Serial Numbers" msgstr "自動分配序號" -#: build/serializers.py:398 +#: build/serializers.py:378 msgid "Automatically allocate required items with matching serial numbers" msgstr "自動為需要項目分配對應的序號" -#: build/serializers.py:431 order/serializers.py:962 stock/api.py:1183 -#: stock/models.py:1901 +#: build/serializers.py:411 order/serializers.py:920 stock/api.py:1186 +#: stock/models.py:1925 msgid "The following serial numbers already exist or are invalid" msgstr "序號已存在或無效" -#: build/serializers.py:473 build/serializers.py:529 build/serializers.py:621 +#: build/serializers.py:453 build/serializers.py:509 build/serializers.py:601 msgid "A list of build outputs must be provided" msgstr "必須提供產出清單" -#: build/serializers.py:506 +#: build/serializers.py:486 msgid "Stock location for scrapped outputs" msgstr "廢品產出的庫存位置" -#: build/serializers.py:512 +#: build/serializers.py:492 msgid "Discard Allocations" msgstr "放棄分配" -#: build/serializers.py:513 +#: build/serializers.py:493 msgid "Discard any stock allocations for scrapped outputs" msgstr "取消對廢品產出的任何庫存分配" -#: build/serializers.py:518 +#: build/serializers.py:498 msgid "Reason for scrapping build output(s)" msgstr "廢品產出的原因" -#: build/serializers.py:576 +#: build/serializers.py:556 msgid "Location for completed build outputs" msgstr "已完成刪除的庫存地點" -#: build/serializers.py:584 +#: build/serializers.py:564 msgid "Accept Incomplete Allocation" msgstr "接受不完整的分配" -#: build/serializers.py:585 +#: build/serializers.py:565 msgid "Complete outputs if stock has not been fully allocated" msgstr "如果庫存尚未全部分配,則完成產出" -#: build/serializers.py:710 +#: build/serializers.py:690 msgid "Consume Allocated Stock" msgstr "消費已分配的庫存" -#: build/serializers.py:711 +#: build/serializers.py:691 msgid "Consume any stock which has already been allocated to this build" msgstr "消耗已分配給此生產的任何庫存" -#: build/serializers.py:717 +#: build/serializers.py:697 msgid "Remove Incomplete Outputs" msgstr "移除未完成的產出" -#: build/serializers.py:718 +#: build/serializers.py:698 msgid "Delete any build outputs which have not been completed" msgstr "刪除所有未完成的產出" -#: build/serializers.py:745 +#: build/serializers.py:725 msgid "Not permitted" msgstr "不允許" -#: build/serializers.py:746 +#: build/serializers.py:726 msgid "Accept as consumed by this build order" msgstr "接受作為此生產訂單的消費" -#: build/serializers.py:747 +#: build/serializers.py:727 msgid "Deallocate before completing this build order" msgstr "完成此生產訂單前取消分配" -#: build/serializers.py:774 +#: build/serializers.py:754 msgid "Overallocated Stock" msgstr "超出分配的庫存" -#: build/serializers.py:777 +#: build/serializers.py:757 msgid "How do you want to handle extra stock items assigned to the build order" msgstr "如何處理分配給生產訂單的額外庫存項" -#: build/serializers.py:788 +#: build/serializers.py:768 msgid "Some stock items have been overallocated" msgstr "有庫存項目已被過度分配" -#: build/serializers.py:793 +#: build/serializers.py:773 msgid "Accept Unallocated" msgstr "接受未分配" -#: build/serializers.py:795 +#: build/serializers.py:775 msgid "Accept that stock items have not been fully allocated to this build order" msgstr "接受庫存項未被完全分配至生產訂單" -#: build/serializers.py:806 +#: build/serializers.py:786 msgid "Required stock has not been fully allocated" msgstr "所需庫存尚未完全分配" -#: build/serializers.py:811 order/serializers.py:535 order/serializers.py:1615 +#: build/serializers.py:791 order/serializers.py:489 order/serializers.py:1580 msgid "Accept Incomplete" msgstr "接受不完整" -#: build/serializers.py:813 +#: build/serializers.py:793 msgid "Accept that the required number of build outputs have not been completed" msgstr "允許所需數量的產出未完成" -#: build/serializers.py:824 +#: build/serializers.py:804 msgid "Required build quantity has not been completed" msgstr "未完成所需生產數量" -#: build/serializers.py:836 +#: build/serializers.py:816 msgid "Build order has open child build orders" msgstr "生產訂單有打開的子生產訂單" -#: build/serializers.py:839 +#: build/serializers.py:819 msgid "Build order must be in production state" msgstr "生產訂單必須處於生產狀態" -#: build/serializers.py:842 +#: build/serializers.py:822 msgid "Build order has incomplete outputs" msgstr "生產訂單有未完成的產出" -#: build/serializers.py:881 +#: build/serializers.py:861 msgid "Build Line" msgstr "生產行" -#: build/serializers.py:889 +#: build/serializers.py:869 msgid "Build output" msgstr "產出" -#: build/serializers.py:897 +#: build/serializers.py:877 msgid "Build output must point to the same build" msgstr "生產產出必須指向相同的生產" -#: build/serializers.py:928 +#: build/serializers.py:908 msgid "Build Line Item" msgstr "生產行項目" -#: build/serializers.py:946 +#: build/serializers.py:926 msgid "bom_item.part must point to the same part as the build order" msgstr "bom_item.part 必須與生產訂單零件相同" -#: build/serializers.py:962 stock/serializers.py:1287 +#: build/serializers.py:942 stock/serializers.py:1320 msgid "Item must be in stock" msgstr "商品必須有庫存" -#: build/serializers.py:1005 order/serializers.py:1601 +#: build/serializers.py:985 order/serializers.py:1566 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" -#: build/serializers.py:1011 +#: build/serializers.py:991 msgid "Build output must be specified for allocation of tracked parts" msgstr "對於被追蹤的零件的分配,必須指定生產產出" -#: build/serializers.py:1019 +#: build/serializers.py:999 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "對於未被追蹤的零件,無法指定生產產出" -#: build/serializers.py:1043 order/serializers.py:1874 +#: build/serializers.py:1023 order/serializers.py:1839 msgid "Allocation items must be provided" msgstr "必須提供分配項目" -#: build/serializers.py:1107 +#: build/serializers.py:1087 msgid "Stock location where parts are to be sourced (leave blank to take from any location)" msgstr "零件來源的庫存地點(留空則可來源於任何庫存地點)" -#: build/serializers.py:1116 +#: build/serializers.py:1096 msgid "Exclude Location" msgstr "排除位置" -#: build/serializers.py:1117 +#: build/serializers.py:1097 msgid "Exclude stock items from this selected location" msgstr "從該選定的庫存地點排除庫存項" -#: build/serializers.py:1122 +#: build/serializers.py:1102 msgid "Interchangeable Stock" msgstr "可互換庫存" -#: build/serializers.py:1123 +#: build/serializers.py:1103 msgid "Stock items in multiple locations can be used interchangeably" msgstr "在多個位置的庫存項目可以互換使用" -#: build/serializers.py:1128 +#: build/serializers.py:1108 msgid "Substitute Stock" msgstr "替代品庫存" -#: build/serializers.py:1129 +#: build/serializers.py:1109 msgid "Allow allocation of substitute parts" msgstr "允許分配可替換的零件" -#: build/serializers.py:1134 +#: build/serializers.py:1114 msgid "Optional Items" msgstr "可選項目" -#: build/serializers.py:1135 +#: build/serializers.py:1115 msgid "Allocate optional BOM items to build order" msgstr "分配可選的物料清單給生產訂單" -#: build/serializers.py:1156 -msgid "Failed to start auto-allocation task" -msgstr "啓動自動分配任務失敗" +#: build/serializers.py:1121 +msgid "All Items" +msgstr "全部品項" -#: build/serializers.py:1208 +#: build/serializers.py:1122 +msgid "Untracked Items" +msgstr "" + +#: build/serializers.py:1123 +msgid "Tracked Items" +msgstr "" + +#: build/serializers.py:1125 +msgid "Item Type" +msgstr "品項類型" + +#: build/serializers.py:1126 +msgid "Select item type to auto-allocate" +msgstr "" + +#: build/serializers.py:1180 msgid "BOM Reference" msgstr "物料清單參考" -#: build/serializers.py:1214 +#: build/serializers.py:1186 msgid "BOM Part ID" msgstr "物料清單零件識別號碼" -#: build/serializers.py:1221 +#: build/serializers.py:1193 msgid "BOM Part Name" msgstr "物料清單零件名稱" -#: build/serializers.py:1274 build/serializers.py:1457 +#: build/serializers.py:1242 +msgid "Install Into" +msgstr "安裝至" + +#: build/serializers.py:1269 build/serializers.py:1487 msgid "Build" msgstr "生產" -#: build/serializers.py:1284 company/models.py:639 order/api.py:316 -#: order/api.py:321 order/api.py:549 order/serializers.py:661 -#: stock/models.py:1036 stock/serializers.py:579 +#: build/serializers.py:1288 company/models.py:638 order/api.py:321 +#: order/api.py:326 order/api.py:553 order/serializers.py:605 +#: stock/models.py:1043 stock/serializers.py:573 msgid "Supplier Part" msgstr "供應商零件" -#: build/serializers.py:1292 stock/serializers.py:620 +#: build/serializers.py:1304 stock/serializers.py:626 msgid "Allocated Quantity" msgstr "已分配數量" -#: build/serializers.py:1359 +#: build/serializers.py:1371 msgid "Build Reference" msgstr "構建參考" -#: build/serializers.py:1369 +#: build/serializers.py:1381 msgid "Part Category Name" msgstr "零件類別名稱" -#: build/serializers.py:1391 common/setting/system.py:480 part/models.py:1302 +#: build/serializers.py:1415 common/setting/system.py:494 part/models.py:1265 msgid "Trackable" msgstr "可追蹤" -#: build/serializers.py:1394 +#: build/serializers.py:1418 msgid "Inherited" msgstr "已繼承的" -#: build/serializers.py:1397 part/models.py:4100 +#: build/serializers.py:1421 part/models.py:4078 msgid "Allow Variants" msgstr "允許變體" -#: build/serializers.py:1403 build/serializers.py:1408 part/models.py:3833 -#: part/models.py:4404 stock/api.py:882 +#: build/serializers.py:1427 build/serializers.py:1432 part/models.py:3799 +#: part/models.py:4382 stock/api.py:881 msgid "BOM Item" msgstr "物料清單項" -#: build/serializers.py:1475 order/serializers.py:1296 part/serializers.py:1175 -#: part/serializers.py:1630 +#: build/serializers.py:1505 order/serializers.py:1283 part/serializers.py:1174 +#: part/serializers.py:1755 msgid "In Production" msgstr "生產中" -#: build/serializers.py:1477 part/serializers.py:835 part/serializers.py:1179 +#: build/serializers.py:1507 part/serializers.py:840 part/serializers.py:1178 msgid "Scheduled to Build" msgstr "排程生產中" -#: build/serializers.py:1480 part/serializers.py:872 +#: build/serializers.py:1510 part/serializers.py:873 msgid "External Stock" msgstr "外部庫存" -#: build/serializers.py:1481 part/serializers.py:1165 part/serializers.py:1673 +#: build/serializers.py:1511 part/serializers.py:1164 part/serializers.py:1798 msgid "Available Stock" msgstr "可用庫存" -#: build/serializers.py:1483 +#: build/serializers.py:1513 msgid "Available Substitute Stock" msgstr "可用的替代品庫存" -#: build/serializers.py:1486 +#: build/serializers.py:1516 msgid "Available Variant Stock" msgstr "可用的變體庫存" -#: build/serializers.py:1760 +#: build/serializers.py:1729 msgid "Consumed quantity exceeds allocated quantity" msgstr "消耗數量超過已分配數量" -#: build/serializers.py:1797 +#: build/serializers.py:1766 msgid "Optional notes for the stock consumption" msgstr "庫存耗用的可選備註" -#: build/serializers.py:1814 +#: build/serializers.py:1783 msgid "Build item must point to the correct build order" msgstr "生產項必須指向正確的生產工單" -#: build/serializers.py:1819 +#: build/serializers.py:1788 msgid "Duplicate build item allocation" msgstr "重複的生產項分配" -#: build/serializers.py:1837 +#: build/serializers.py:1806 msgid "Build line must point to the correct build order" msgstr "生產行必須指向正確的生產工單" -#: build/serializers.py:1842 +#: build/serializers.py:1811 msgid "Duplicate build line allocation" msgstr "重複的生產行分配" -#: build/serializers.py:1854 +#: build/serializers.py:1823 msgid "At least one item or line must be provided" msgstr "至少必須提供一個項目或一行" @@ -1474,67 +1478,71 @@ msgstr "被掛起" msgid "Cancelled" msgstr "已取消" -#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:552 +#: build/status_codes.py:15 generic/states/tests.py:23 importer/models.py:580 #: importer/status_codes.py:27 order/status_codes.py:15 #: order/status_codes.py:52 order/status_codes.py:83 msgid "Complete" msgstr "完成" -#: build/tasks.py:231 +#: build/tasks.py:218 msgid "Stock required for build order" msgstr "生產訂單所需庫存" -#: build/tasks.py:241 +#: build/tasks.py:228 #, python-brace-format msgid "Build order {build} requires additional stock" msgstr "生產工單 {build} 需要額外庫存" -#: build/tasks.py:265 +#: build/tasks.py:252 msgid "Overdue Build Order" msgstr "逾期的生產訂單" -#: build/tasks.py:270 +#: build/tasks.py:257 #, python-brace-format msgid "Build order {bo} is now overdue" msgstr "生產訂單 {bo} 現已逾期" -#: common/api.py:701 +#: common/api.py:723 msgid "Is Link" msgstr "是否鏈接" -#: common/api.py:709 +#: common/api.py:731 msgid "Is File" msgstr "是否為文件" -#: common/api.py:756 +#: common/api.py:778 msgid "User does not have permission to delete these attachments" msgstr "用户沒有權限刪除此附件" -#: common/api.py:769 +#: common/api.py:791 msgid "User does not have permission to delete this attachment" msgstr "用户沒有權限刪除此附件" -#: common/currency.py:130 +#: common/currency.py:135 msgid "Invalid currency code" msgstr "無效的貨幣代碼" -#: common/currency.py:132 +#: common/currency.py:137 msgid "Duplicate currency code" msgstr "重複的貨幣代碼" -#: common/currency.py:137 +#: common/currency.py:142 msgid "No valid currency codes provided" msgstr "未提供有效的貨幣代碼" -#: common/currency.py:154 +#: common/currency.py:159 msgid "No plugin" msgstr "暫無插件" -#: common/models.py:105 common/models.py:130 common/models.py:3150 +#: common/filters.py:351 +msgid "Project Code Label" +msgstr "項目編碼標籤" + +#: common/models.py:105 common/models.py:130 common/models.py:3169 msgid "Updated" msgstr "已是最新" -#: common/models.py:106 common/models.py:131 +#: common/models.py:106 common/models.py:131 order/models.py:507 msgid "Timestamp of last update" msgstr "最後更新時間戳" @@ -1546,778 +1554,778 @@ msgstr "更新者" msgid "User who last updated this object" msgstr "最後更新此物件的使用者" -#: common/models.py:169 +#: common/models.py:171 msgid "Unique project code" msgstr "唯一項目編碼" -#: common/models.py:176 +#: common/models.py:178 msgid "Project description" msgstr "項目描述" -#: common/models.py:185 +#: common/models.py:187 msgid "User or group responsible for this project" msgstr "負責此項目的用户或羣組" -#: common/models.py:775 common/models.py:1276 common/models.py:1314 +#: common/models.py:777 common/models.py:1293 common/models.py:1331 msgid "Settings key" msgstr "設定鍵值" -#: common/models.py:779 +#: common/models.py:781 msgid "Settings value" msgstr "設定值" -#: common/models.py:834 +#: common/models.py:836 msgid "Chosen value is not a valid option" msgstr "所選值不是一個有效的選項" -#: common/models.py:850 +#: common/models.py:852 msgid "Value must be a boolean value" msgstr "該值必須是布爾值" -#: common/models.py:858 +#: common/models.py:860 msgid "Value must be an integer value" msgstr "該值必須為整數" -#: common/models.py:866 +#: common/models.py:868 msgid "Value must be a valid number" msgstr "值必須為有效數字" -#: common/models.py:891 +#: common/models.py:893 msgid "Value does not pass validation checks" msgstr "值未通過驗證檢查" -#: common/models.py:913 +#: common/models.py:915 msgid "Key string must be unique" msgstr "鍵字符串必須是唯一的" -#: common/models.py:1322 common/models.py:1323 common/models.py:1427 -#: common/models.py:1428 common/models.py:1673 common/models.py:1674 -#: common/models.py:2006 common/models.py:2007 common/models.py:2803 -#: importer/models.py:100 part/models.py:3611 part/models.py:3639 +#: common/models.py:1339 common/models.py:1340 common/models.py:1444 +#: common/models.py:1445 common/models.py:1690 common/models.py:1691 +#: common/models.py:2023 common/models.py:2024 common/models.py:2822 +#: importer/models.py:101 part/models.py:3575 part/models.py:3603 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 #: users/models.py:501 msgid "User" msgstr "使用者" -#: common/models.py:1345 +#: common/models.py:1362 msgid "Price break quantity" msgstr "批發價數量" -#: common/models.py:1352 company/serializers.py:349 order/models.py:1843 -#: order/models.py:3044 +#: common/models.py:1369 company/serializers.py:316 order/models.py:1858 +#: order/models.py:3060 msgid "Price" msgstr "價格" -#: common/models.py:1353 +#: common/models.py:1370 msgid "Unit price at specified quantity" msgstr "指定數量的單位價格" -#: common/models.py:1404 common/models.py:1589 +#: common/models.py:1421 common/models.py:1606 msgid "Endpoint" msgstr "端點" -#: common/models.py:1405 +#: common/models.py:1422 msgid "Endpoint at which this webhook is received" msgstr "接收此網絡鈎子的端點" -#: common/models.py:1415 +#: common/models.py:1432 msgid "Name for this webhook" msgstr "此網絡鈎子的名稱" -#: common/models.py:1419 common/models.py:2247 common/models.py:2354 -#: company/models.py:192 company/models.py:776 machine/models.py:40 -#: part/models.py:1325 plugin/models.py:69 stock/api.py:642 users/models.py:195 -#: users/models.py:554 users/serializers.py:314 +#: common/models.py:1436 common/models.py:2264 common/models.py:2371 +#: company/models.py:194 company/models.py:786 machine/models.py:40 +#: part/models.py:1288 plugin/models.py:69 stock/api.py:641 users/models.py:195 +#: users/models.py:554 users/serializers.py:319 msgid "Active" msgstr "激活" -#: common/models.py:1419 +#: common/models.py:1436 msgid "Is this webhook active" msgstr "網絡鈎子是否已啓用" -#: common/models.py:1435 users/models.py:172 +#: common/models.py:1452 users/models.py:172 msgid "Token" msgstr "令牌" -#: common/models.py:1436 +#: common/models.py:1453 msgid "Token for access" msgstr "訪問令牌" -#: common/models.py:1444 +#: common/models.py:1461 msgid "Secret" msgstr "密鑰" -#: common/models.py:1445 +#: common/models.py:1462 msgid "Shared secret for HMAC" msgstr "HMAC共享密鑰" -#: common/models.py:1553 common/models.py:3040 +#: common/models.py:1570 common/models.py:3059 msgid "Message ID" msgstr "消息ID" -#: common/models.py:1554 common/models.py:3030 +#: common/models.py:1571 common/models.py:3049 msgid "Unique identifier for this message" msgstr "此郵件的唯一標識符" -#: common/models.py:1562 +#: common/models.py:1579 msgid "Host" msgstr "主機" -#: common/models.py:1563 +#: common/models.py:1580 msgid "Host from which this message was received" msgstr "接收此消息的主機" -#: common/models.py:1571 +#: common/models.py:1588 msgid "Header" msgstr "標題" -#: common/models.py:1572 +#: common/models.py:1589 msgid "Header of this message" msgstr "此消息的標題" -#: common/models.py:1579 +#: common/models.py:1596 msgid "Body" msgstr "正文" -#: common/models.py:1580 +#: common/models.py:1597 msgid "Body of this message" msgstr "此消息的正文" -#: common/models.py:1590 +#: common/models.py:1607 msgid "Endpoint on which this message was received" msgstr "接收此消息的終點" -#: common/models.py:1595 +#: common/models.py:1612 msgid "Worked on" msgstr "工作於" -#: common/models.py:1596 +#: common/models.py:1613 msgid "Was the work on this message finished?" msgstr "這條消息的工作完成了嗎?" -#: common/models.py:1722 +#: common/models.py:1739 msgid "Id" msgstr "標識" -#: common/models.py:1724 +#: common/models.py:1741 msgid "Title" msgstr "標題" -#: common/models.py:1726 common/models.py:1989 company/models.py:186 -#: company/models.py:468 company/models.py:536 company/models.py:793 -#: order/models.py:458 order/models.py:1787 order/models.py:2344 -#: part/models.py:1201 +#: common/models.py:1743 common/models.py:2006 company/models.py:188 +#: company/models.py:479 company/models.py:549 company/models.py:809 +#: order/models.py:462 order/models.py:1802 order/models.py:2362 +#: part/models.py:1181 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "連結" -#: common/models.py:1728 +#: common/models.py:1745 msgid "Published" msgstr "已發佈" -#: common/models.py:1730 +#: common/models.py:1747 msgid "Author" msgstr "作者" -#: common/models.py:1732 +#: common/models.py:1749 msgid "Summary" msgstr "摘要" -#: common/models.py:1735 common/models.py:3007 +#: common/models.py:1752 common/models.py:3026 msgid "Read" msgstr "閲讀" -#: common/models.py:1735 +#: common/models.py:1752 msgid "Was this news item read?" msgstr "這條新聞被閲讀了嗎?" -#: common/models.py:1752 +#: common/models.py:1769 msgid "Image file" msgstr "圖像文件" -#: common/models.py:1764 +#: common/models.py:1781 msgid "Target model type for this image" msgstr "此圖像的目標模型類型" -#: common/models.py:1768 +#: common/models.py:1785 msgid "Target model ID for this image" msgstr "此圖像的目標型號ID" -#: common/models.py:1790 +#: common/models.py:1807 msgid "Custom Unit" msgstr "自定義單位" -#: common/models.py:1808 +#: common/models.py:1825 msgid "Unit symbol must be unique" msgstr "單位符號必須唯一" -#: common/models.py:1823 +#: common/models.py:1840 msgid "Unit name must be a valid identifier" msgstr "單位名稱必須是有效的標識符" -#: common/models.py:1842 +#: common/models.py:1859 msgid "Unit name" msgstr "單位名稱" -#: common/models.py:1849 +#: common/models.py:1866 msgid "Symbol" msgstr "符號" -#: common/models.py:1850 +#: common/models.py:1867 msgid "Optional unit symbol" msgstr "可選單位符號" -#: common/models.py:1856 +#: common/models.py:1873 msgid "Definition" msgstr "定義" -#: common/models.py:1857 +#: common/models.py:1874 msgid "Unit definition" msgstr "單位定義" -#: common/models.py:1917 common/models.py:1980 stock/models.py:2984 -#: stock/serializers.py:247 +#: common/models.py:1934 common/models.py:1997 stock/models.py:3073 +#: stock/serializers.py:249 msgid "Attachment" msgstr "附件" -#: common/models.py:1934 +#: common/models.py:1951 msgid "Missing file" msgstr "缺少檔案" -#: common/models.py:1935 +#: common/models.py:1952 msgid "Missing external link" msgstr "缺少外部連結" -#: common/models.py:1972 common/models.py:2488 +#: common/models.py:1989 common/models.py:2507 msgid "Model type" msgstr "模型類型" -#: common/models.py:1973 +#: common/models.py:1990 msgid "Target model type for image" msgstr "圖像的目標模型類型" -#: common/models.py:1981 +#: common/models.py:1998 msgid "Select file to attach" msgstr "選擇附件" -#: common/models.py:1997 +#: common/models.py:2014 msgid "Comment" msgstr "註解" -#: common/models.py:1998 +#: common/models.py:2015 msgid "Attachment comment" msgstr "附件評論" -#: common/models.py:2014 +#: common/models.py:2031 msgid "Upload date" msgstr "上傳日期" -#: common/models.py:2015 +#: common/models.py:2032 msgid "Date the file was uploaded" msgstr "上傳文件的日期" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size" msgstr "文件大小" -#: common/models.py:2019 +#: common/models.py:2036 msgid "File size in bytes" msgstr "文件大小,以字節為單位" -#: common/models.py:2057 common/serializers.py:688 +#: common/models.py:2074 common/serializers.py:787 msgid "Invalid model type specified for attachment" msgstr "為附件指定的模型類型無效" -#: common/models.py:2078 +#: common/models.py:2095 msgid "Custom State" msgstr "自定狀態" -#: common/models.py:2079 +#: common/models.py:2096 msgid "Custom States" msgstr "定製狀態" -#: common/models.py:2084 +#: common/models.py:2101 msgid "Reference Status Set" msgstr "參考狀態設定" -#: common/models.py:2085 +#: common/models.py:2102 msgid "Status set that is extended with this custom state" msgstr "使用此自定義狀態擴展狀態的狀態集" -#: common/models.py:2089 generic/states/serializers.py:18 +#: common/models.py:2106 generic/states/serializers.py:18 msgid "Logical Key" msgstr "邏輯密鑰" -#: common/models.py:2091 +#: common/models.py:2108 msgid "State logical key that is equal to this custom state in business logic" msgstr "等同於商業邏輯中自定義狀態的狀態邏輯鍵" -#: common/models.py:2096 common/models.py:2335 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:2976 +#: common/models.py:2113 common/models.py:2352 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 msgid "Value" msgstr "值" -#: common/models.py:2097 +#: common/models.py:2114 msgid "Numerical value that will be saved in the models database" msgstr "將儲存於模型資料庫中的數值" -#: common/models.py:2103 +#: common/models.py:2120 msgid "Name of the state" msgstr "狀態名" -#: common/models.py:2112 common/models.py:2341 generic/states/serializers.py:22 +#: common/models.py:2129 common/models.py:2358 generic/states/serializers.py:22 msgid "Label" msgstr "標籤" -#: common/models.py:2113 +#: common/models.py:2130 msgid "Label that will be displayed in the frontend" msgstr "在前端顯示的標籤" -#: common/models.py:2120 generic/states/serializers.py:24 +#: common/models.py:2137 generic/states/serializers.py:24 msgid "Color" msgstr "顏色" -#: common/models.py:2121 +#: common/models.py:2138 msgid "Color that will be displayed in the frontend" msgstr "將在前端顯示顏色" -#: common/models.py:2129 +#: common/models.py:2146 msgid "Model" msgstr "模式" -#: common/models.py:2130 +#: common/models.py:2147 msgid "Model this state is associated with" msgstr "該狀態關聯的模型" -#: common/models.py:2145 +#: common/models.py:2162 msgid "Model must be selected" msgstr "必須選定模型" -#: common/models.py:2148 +#: common/models.py:2165 msgid "Key must be selected" msgstr "必須選取密鑰" -#: common/models.py:2151 +#: common/models.py:2168 msgid "Logical key must be selected" msgstr "必須選中邏輯密鑰" -#: common/models.py:2155 +#: common/models.py:2172 msgid "Key must be different from logical key" msgstr "密鑰必須不同於邏輯密鑰" -#: common/models.py:2162 +#: common/models.py:2179 msgid "Valid reference status class must be provided" msgstr "必須提供有效參考狀態類別" -#: common/models.py:2168 +#: common/models.py:2185 msgid "Key must be different from the logical keys of the reference status" msgstr "密鑰必須不同於參考狀態的邏輯密鑰" -#: common/models.py:2175 +#: common/models.py:2192 msgid "Logical key must be in the logical keys of the reference status" msgstr "邏輯密鑰必須在參考狀態的邏輯鍵中" -#: common/models.py:2182 +#: common/models.py:2199 msgid "Name must be different from the names of the reference status" msgstr "名稱必須不同於參考狀態的名稱" -#: common/models.py:2222 common/models.py:2329 common/models.py:2533 +#: common/models.py:2239 common/models.py:2346 common/models.py:2552 msgid "Selection List" msgstr "選擇列表" -#: common/models.py:2223 +#: common/models.py:2240 msgid "Selection Lists" msgstr "選擇列表" -#: common/models.py:2228 +#: common/models.py:2245 msgid "Name of the selection list" msgstr "選擇列表名稱" -#: common/models.py:2235 +#: common/models.py:2252 msgid "Description of the selection list" msgstr "選擇列表描述" -#: common/models.py:2241 part/models.py:1330 +#: common/models.py:2258 part/models.py:1293 msgid "Locked" msgstr "已鎖定" -#: common/models.py:2242 +#: common/models.py:2259 msgid "Is this selection list locked?" msgstr "此選擇列表是否已鎖定?" -#: common/models.py:2248 +#: common/models.py:2265 msgid "Can this selection list be used?" msgstr "此選擇列表是否可使用?" -#: common/models.py:2256 +#: common/models.py:2273 msgid "Source Plugin" msgstr "來源模組" -#: common/models.py:2257 +#: common/models.py:2274 msgid "Plugin which provides the selection list" msgstr "提供此選擇列表的模組" -#: common/models.py:2262 +#: common/models.py:2279 msgid "Source String" msgstr "來源字串" -#: common/models.py:2263 +#: common/models.py:2280 msgid "Optional string identifying the source used for this list" msgstr "用於標示此列表來源的可選字串" -#: common/models.py:2272 +#: common/models.py:2289 msgid "Default Entry" msgstr "預設項目" -#: common/models.py:2273 +#: common/models.py:2290 msgid "Default entry for this selection list" msgstr "此選擇列表的預設項目" -#: common/models.py:2278 common/models.py:3145 +#: common/models.py:2295 common/models.py:3164 msgid "Created" msgstr "已創建" -#: common/models.py:2279 +#: common/models.py:2296 msgid "Date and time that the selection list was created" msgstr "選擇列表建立的日期與時間" -#: common/models.py:2284 +#: common/models.py:2301 msgid "Last Updated" msgstr "最近更新" -#: common/models.py:2285 +#: common/models.py:2302 msgid "Date and time that the selection list was last updated" msgstr "選擇列表最近更新的日期與時間" -#: common/models.py:2319 +#: common/models.py:2336 msgid "Selection List Entry" msgstr "選擇列表項目" -#: common/models.py:2320 +#: common/models.py:2337 msgid "Selection List Entries" msgstr "選擇列表項目" -#: common/models.py:2330 +#: common/models.py:2347 msgid "Selection list to which this entry belongs" msgstr "該項目所屬的選擇列表" -#: common/models.py:2336 +#: common/models.py:2353 msgid "Value of the selection list entry" msgstr "選擇列表項目的值" -#: common/models.py:2342 +#: common/models.py:2359 msgid "Label for the selection list entry" msgstr "選擇列表項目的標籤" -#: common/models.py:2348 +#: common/models.py:2365 msgid "Description of the selection list entry" msgstr "選擇列表項目的描述" -#: common/models.py:2355 +#: common/models.py:2372 msgid "Is this selection list entry active?" msgstr "此選擇列表項目是否啟用?" -#: common/models.py:2387 +#: common/models.py:2406 msgid "Parameter Template" msgstr "參數模板" -#: common/models.py:2388 +#: common/models.py:2407 msgid "Parameter Templates" msgstr "" -#: common/models.py:2425 +#: common/models.py:2444 msgid "Checkbox parameters cannot have units" msgstr "勾選框參數不能有單位" -#: common/models.py:2430 +#: common/models.py:2449 msgid "Checkbox parameters cannot have choices" msgstr "複選框參數不能有選項" -#: common/models.py:2450 part/models.py:3707 +#: common/models.py:2469 part/models.py:3673 msgid "Choices must be unique" msgstr "選擇必須是唯一的" -#: common/models.py:2467 +#: common/models.py:2486 msgid "Parameter template name must be unique" msgstr "參數模板名稱必須是唯一的" -#: common/models.py:2489 +#: common/models.py:2508 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2495 +#: common/models.py:2514 msgid "Parameter Name" msgstr "參數名稱" -#: common/models.py:2501 part/models.py:1283 +#: common/models.py:2520 part/models.py:1246 msgid "Units" msgstr "單位" -#: common/models.py:2502 +#: common/models.py:2521 msgid "Physical units for this parameter" msgstr "此參數的物理單位" -#: common/models.py:2510 +#: common/models.py:2529 msgid "Parameter description" msgstr "參數説明" -#: common/models.py:2516 +#: common/models.py:2535 msgid "Checkbox" msgstr "勾選框" -#: common/models.py:2517 +#: common/models.py:2536 msgid "Is this parameter a checkbox?" msgstr "此參數是否為勾選框?" -#: common/models.py:2522 part/models.py:3794 +#: common/models.py:2541 part/models.py:3760 msgid "Choices" msgstr "選項" -#: common/models.py:2523 +#: common/models.py:2542 msgid "Valid choices for this parameter (comma-separated)" msgstr "此參數的有效選擇 (逗號分隔)" -#: common/models.py:2534 +#: common/models.py:2553 msgid "Selection list for this parameter" msgstr "此參數的選擇清單" -#: common/models.py:2539 part/models.py:3769 report/models.py:287 +#: common/models.py:2558 part/models.py:3735 report/models.py:287 msgid "Enabled" msgstr "已啓用" -#: common/models.py:2540 +#: common/models.py:2559 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2581 +#: common/models.py:2600 msgid "Parameter" -msgstr "" +msgstr "參數" -#: common/models.py:2582 +#: common/models.py:2601 msgid "Parameters" -msgstr "" +msgstr "參數集" -#: common/models.py:2628 +#: common/models.py:2647 msgid "Invalid choice for parameter value" msgstr "無效的參數值選擇" -#: common/models.py:2698 common/serializers.py:783 +#: common/models.py:2717 common/serializers.py:882 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2734 +#: common/models.py:2753 msgid "Model ID" msgstr "" -#: common/models.py:2735 +#: common/models.py:2754 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2744 common/setting/system.py:450 report/models.py:373 +#: common/models.py:2763 common/setting/system.py:464 report/models.py:373 #: report/models.py:669 report/serializers.py:94 report/serializers.py:135 -#: stock/serializers.py:234 +#: stock/serializers.py:235 msgid "Template" msgstr "模板" -#: common/models.py:2745 +#: common/models.py:2764 msgid "Parameter template" msgstr "" -#: common/models.py:2750 common/models.py:2792 importer/models.py:546 +#: common/models.py:2769 common/models.py:2811 importer/models.py:574 msgid "Data" msgstr "數據" -#: common/models.py:2751 +#: common/models.py:2770 msgid "Parameter Value" msgstr "參數值" -#: common/models.py:2760 company/models.py:810 order/serializers.py:894 -#: order/serializers.py:2064 part/models.py:4075 part/models.py:4444 +#: common/models.py:2779 company/models.py:826 order/serializers.py:852 +#: order/serializers.py:2028 part/models.py:4053 part/models.py:4422 #: report/templates/report/inventree_bill_of_materials_report.html:140 #: report/templates/report/inventree_purchase_order_report.html:39 #: report/templates/report/inventree_return_order_report.html:27 #: report/templates/report/inventree_sales_order_report.html:32 #: report/templates/report/inventree_stock_location_report.html:105 -#: stock/serializers.py:813 +#: stock/serializers.py:819 msgid "Note" msgstr "備註" -#: common/models.py:2761 stock/serializers.py:718 +#: common/models.py:2780 stock/serializers.py:724 msgid "Optional note field" msgstr "可選註釋字段" -#: common/models.py:2788 +#: common/models.py:2807 msgid "Barcode Scan" msgstr "掃描條碼" -#: common/models.py:2793 +#: common/models.py:2812 msgid "Barcode data" msgstr "條碼數據" -#: common/models.py:2804 +#: common/models.py:2823 msgid "User who scanned the barcode" msgstr "掃描條碼" -#: common/models.py:2809 importer/models.py:69 +#: common/models.py:2828 importer/models.py:70 msgid "Timestamp" msgstr "時間戳" -#: common/models.py:2810 +#: common/models.py:2829 msgid "Date and time of the barcode scan" msgstr "掃描條碼的日期和時間" -#: common/models.py:2816 +#: common/models.py:2835 msgid "URL endpoint which processed the barcode" msgstr "處理條碼的 URL 終點" -#: common/models.py:2823 order/models.py:1833 plugin/serializers.py:93 +#: common/models.py:2842 order/models.py:1848 plugin/serializers.py:93 msgid "Context" msgstr "上下文" -#: common/models.py:2824 +#: common/models.py:2843 msgid "Context data for the barcode scan" msgstr "掃描條碼的上下文數據" -#: common/models.py:2831 +#: common/models.py:2850 msgid "Response" msgstr "響應" -#: common/models.py:2832 +#: common/models.py:2851 msgid "Response data from the barcode scan" msgstr "掃描條碼的響應數據" -#: common/models.py:2838 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:2970 +#: common/models.py:2857 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3059 msgid "Result" msgstr "結果" -#: common/models.py:2839 +#: common/models.py:2858 msgid "Was the barcode scan successful?" msgstr "條碼掃描成功嗎?" -#: common/models.py:2921 +#: common/models.py:2940 msgid "An error occurred" msgstr "發生錯誤" -#: common/models.py:2942 +#: common/models.py:2961 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "INVE-E8:已保護電子郵件日誌刪除。請將 INVENTREE_PROTECT_EMAIL_LOG 設為 False 以允許刪除。" -#: common/models.py:2989 +#: common/models.py:3008 msgid "Email Message" msgstr "電子郵件訊息" -#: common/models.py:2990 +#: common/models.py:3009 msgid "Email Messages" msgstr "電子郵件訊息" -#: common/models.py:2997 +#: common/models.py:3016 msgid "Announced" msgstr "已公告" -#: common/models.py:2999 +#: common/models.py:3018 msgid "Sent" msgstr "已發送" -#: common/models.py:3000 +#: common/models.py:3019 msgid "Failed" msgstr "失敗" -#: common/models.py:3003 +#: common/models.py:3022 msgid "Delivered" msgstr "已送達" -#: common/models.py:3011 +#: common/models.py:3030 msgid "Confirmed" msgstr "已確認" -#: common/models.py:3017 +#: common/models.py:3036 msgid "Inbound" msgstr "入站" -#: common/models.py:3018 +#: common/models.py:3037 msgid "Outbound" msgstr "出站" -#: common/models.py:3023 +#: common/models.py:3042 msgid "No Reply" msgstr "不回覆" -#: common/models.py:3024 +#: common/models.py:3043 msgid "Track Delivery" msgstr "追蹤投遞" -#: common/models.py:3025 +#: common/models.py:3044 msgid "Track Read" msgstr "追蹤已讀" -#: common/models.py:3026 +#: common/models.py:3045 msgid "Track Click" msgstr "追蹤點擊" -#: common/models.py:3029 common/models.py:3132 +#: common/models.py:3048 common/models.py:3151 msgid "Global ID" msgstr "全域 ID" -#: common/models.py:3042 +#: common/models.py:3061 msgid "Identifier for this message (might be supplied by external system)" msgstr "此訊息的識別碼(可能由外部系統提供)" -#: common/models.py:3049 +#: common/models.py:3068 msgid "Thread ID" msgstr "討論串 ID" -#: common/models.py:3051 +#: common/models.py:3070 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "此訊息討論串的識別碼(可能由外部系統提供)" -#: common/models.py:3060 +#: common/models.py:3079 msgid "Thread" msgstr "討論串" -#: common/models.py:3061 +#: common/models.py:3080 msgid "Linked thread for this message" msgstr "此訊息所連結的討論串" -#: common/models.py:3077 +#: common/models.py:3096 msgid "Priority" -msgstr "" +msgstr "優先序" -#: common/models.py:3119 +#: common/models.py:3138 msgid "Email Thread" msgstr "電子郵件討論串" -#: common/models.py:3120 +#: common/models.py:3139 msgid "Email Threads" msgstr "電子郵件討論串" -#: common/models.py:3126 generic/states/serializers.py:16 +#: common/models.py:3145 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "鍵" -#: common/models.py:3129 +#: common/models.py:3148 msgid "Unique key for this thread (used to identify the thread)" msgstr "此討論串的唯一鍵(用於辨識)" -#: common/models.py:3133 +#: common/models.py:3152 msgid "Unique identifier for this thread" msgstr "此討論串的唯一識別碼" -#: common/models.py:3140 +#: common/models.py:3159 msgid "Started Internal" msgstr "內部建立" -#: common/models.py:3141 +#: common/models.py:3160 msgid "Was this thread started internally?" msgstr "此討論串是否為內部建立?" -#: common/models.py:3146 +#: common/models.py:3165 msgid "Date and time that the thread was created" msgstr "討論串建立的日期時間" -#: common/models.py:3151 +#: common/models.py:3170 msgid "Date and time that the thread was last updated" msgstr "討論串最後更新的日期時間" @@ -2339,7 +2347,7 @@ msgstr "{verbose_name} 已取消" msgid "A order that is assigned to you was canceled" msgstr "分配給您的訂單已取消" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:600 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:604 msgid "Items Received" msgstr "收到的物品" @@ -2351,93 +2359,101 @@ msgstr "已根據採購訂單收到物品" msgid "Items have been received against a return order" msgstr "已收到退貨訂單中的物品" -#: common/serializers.py:149 +#: common/serializers.py:125 +msgid "Indicates if changing this setting requires confirmation" +msgstr "" + +#: common/serializers.py:139 +msgid "This setting requires confirmation before changing. Please confirm the change." +msgstr "" + +#: common/serializers.py:172 msgid "Indicates if the setting is overridden by an environment variable" msgstr "表示此設定是否被環境變數覆蓋" -#: common/serializers.py:151 +#: common/serializers.py:174 msgid "Override" msgstr "覆蓋" -#: common/serializers.py:502 +#: common/serializers.py:601 msgid "Is Running" msgstr "正在運行" -#: common/serializers.py:508 +#: common/serializers.py:607 msgid "Pending Tasks" msgstr "等待完成的任務" -#: common/serializers.py:514 +#: common/serializers.py:613 msgid "Scheduled Tasks" msgstr "預定的任務" -#: common/serializers.py:520 +#: common/serializers.py:619 msgid "Failed Tasks" msgstr "失敗的任務" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Task ID" msgstr "任務ID" -#: common/serializers.py:535 +#: common/serializers.py:634 msgid "Unique task ID" msgstr "唯一任務ID" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock" msgstr "鎖定" -#: common/serializers.py:537 +#: common/serializers.py:636 msgid "Lock time" msgstr "鎖定時間" -#: common/serializers.py:539 +#: common/serializers.py:638 msgid "Task name" msgstr "任務名稱" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function" msgstr "功能" -#: common/serializers.py:541 +#: common/serializers.py:640 msgid "Function name" msgstr "功能名稱" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Arguments" msgstr "參數" -#: common/serializers.py:543 +#: common/serializers.py:642 msgid "Task arguments" msgstr "任務參數" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Keyword Arguments" msgstr "關鍵字參數" -#: common/serializers.py:546 +#: common/serializers.py:645 msgid "Task keyword arguments" msgstr "任務關鍵詞參數" -#: common/serializers.py:656 +#: common/serializers.py:755 msgid "Filename" msgstr "檔案名稱" -#: common/serializers.py:663 common/serializers.py:730 -#: common/serializers.py:805 importer/models.py:89 report/api.py:41 +#: common/serializers.py:762 common/serializers.py:829 +#: common/serializers.py:904 importer/models.py:90 report/api.py:41 #: report/models.py:293 report/serializers.py:52 msgid "Model Type" msgstr "模型類型" -#: common/serializers.py:691 +#: common/serializers.py:790 msgid "User does not have permission to create or edit attachments for this model" msgstr "用户無權為此模式創建或編輯附件" -#: common/serializers.py:786 +#: common/serializers.py:885 msgid "User does not have permission to create or edit parameters for this model" msgstr "" -#: common/serializers.py:850 common/serializers.py:953 +#: common/serializers.py:955 common/serializers.py:1058 msgid "Selection list is locked" msgstr "選擇列表已鎖定" @@ -2445,1128 +2461,1157 @@ msgstr "選擇列表已鎖定" msgid "No group" msgstr "無分組" -#: common/setting/system.py:155 +#: common/setting/system.py:169 msgid "Site URL is locked by configuration" msgstr "網站 URL 已配置為鎖定" -#: common/setting/system.py:172 +#: common/setting/system.py:186 msgid "Restart required" msgstr "需要重啓" -#: common/setting/system.py:173 +#: common/setting/system.py:187 msgid "A setting has been changed which requires a server restart" msgstr "設置已更改,需要服務器重啓" -#: common/setting/system.py:179 +#: common/setting/system.py:193 msgid "Pending migrations" msgstr "等待遷移" -#: common/setting/system.py:180 +#: common/setting/system.py:194 msgid "Number of pending database migrations" msgstr "待處理的數據庫遷移數" -#: common/setting/system.py:185 +#: common/setting/system.py:199 msgid "Active warning codes" msgstr "啟用中的警告碼" -#: common/setting/system.py:186 +#: common/setting/system.py:200 msgid "A dict of active warning codes" msgstr "啟用中警告碼的字典" -#: common/setting/system.py:192 +#: common/setting/system.py:206 msgid "Instance ID" msgstr "實例 ID" -#: common/setting/system.py:193 +#: common/setting/system.py:207 msgid "Unique identifier for this InvenTree instance" msgstr "此 InvenTree 實例的唯一識別碼" -#: common/setting/system.py:198 +#: common/setting/system.py:212 msgid "Announce ID" msgstr "公告 ID" -#: common/setting/system.py:200 +#: common/setting/system.py:214 msgid "Announce the instance ID of the server in the server status info (unauthenticated)" msgstr "在伺服器狀態資訊中公告此伺服器的實例 ID(未驗證也可見)" -#: common/setting/system.py:206 +#: common/setting/system.py:220 msgid "Server Instance Name" msgstr "服務器實例名稱" -#: common/setting/system.py:208 +#: common/setting/system.py:222 msgid "String descriptor for the server instance" msgstr "服務器實例的字符串描述符" -#: common/setting/system.py:212 +#: common/setting/system.py:226 msgid "Use instance name" msgstr "使用實例名稱" -#: common/setting/system.py:213 +#: common/setting/system.py:227 msgid "Use the instance name in the title-bar" msgstr "在標題欄中使用實例名稱" -#: common/setting/system.py:218 +#: common/setting/system.py:232 msgid "Restrict showing `about`" msgstr "限制顯示 `關於` 信息" -#: common/setting/system.py:219 +#: common/setting/system.py:233 msgid "Show the `about` modal only to superusers" msgstr "只向超級管理員顯示關於信息" -#: common/setting/system.py:224 company/models.py:145 company/models.py:146 +#: common/setting/system.py:238 company/models.py:147 company/models.py:148 msgid "Company name" msgstr "公司名稱" -#: common/setting/system.py:225 +#: common/setting/system.py:239 msgid "Internal company name" msgstr "內部公司名稱" -#: common/setting/system.py:229 +#: common/setting/system.py:243 msgid "Base URL" msgstr "基本 URL" -#: common/setting/system.py:230 +#: common/setting/system.py:244 msgid "Base URL for server instance" msgstr "服務器實例的基準 URL" -#: common/setting/system.py:236 +#: common/setting/system.py:250 msgid "Default Currency" msgstr "默認貨幣單位" -#: common/setting/system.py:237 +#: common/setting/system.py:251 msgid "Select base currency for pricing calculations" msgstr "選擇價格計算的默認貨幣" -#: common/setting/system.py:243 +#: common/setting/system.py:257 msgid "Supported Currencies" msgstr "支持幣種" -#: common/setting/system.py:244 +#: common/setting/system.py:258 msgid "List of supported currency codes" msgstr "支持的貨幣代碼列表" -#: common/setting/system.py:250 +#: common/setting/system.py:264 msgid "Currency Update Interval" msgstr "貨幣更新間隔時間" -#: common/setting/system.py:251 +#: common/setting/system.py:265 msgid "How often to update exchange rates (set to zero to disable)" msgstr "檢查更新的頻率(設置為零以禁用)" -#: common/setting/system.py:253 common/setting/system.py:293 -#: common/setting/system.py:306 common/setting/system.py:314 -#: common/setting/system.py:321 common/setting/system.py:330 -#: common/setting/system.py:339 common/setting/system.py:580 -#: common/setting/system.py:608 common/setting/system.py:707 -#: common/setting/system.py:1103 common/setting/system.py:1119 +#: common/setting/system.py:267 common/setting/system.py:307 +#: common/setting/system.py:320 common/setting/system.py:328 +#: common/setting/system.py:335 common/setting/system.py:344 +#: common/setting/system.py:353 common/setting/system.py:594 +#: common/setting/system.py:622 common/setting/system.py:729 +#: common/setting/system.py:1130 common/setting/system.py:1146 +#: common/setting/system.py:1163 msgid "days" msgstr "天" -#: common/setting/system.py:257 +#: common/setting/system.py:271 msgid "Currency Update Plugin" msgstr "幣種更新插件" -#: common/setting/system.py:258 +#: common/setting/system.py:272 msgid "Currency update plugin to use" msgstr "使用貨幣更新插件" -#: common/setting/system.py:263 +#: common/setting/system.py:277 msgid "Download from URL" msgstr "從URL下載" -#: common/setting/system.py:264 +#: common/setting/system.py:278 msgid "Allow download of remote images and files from external URL" msgstr "允許從外部 URL 下載遠程圖片和文件" -#: common/setting/system.py:269 +#: common/setting/system.py:283 msgid "Download Size Limit" msgstr "下載大小限制" -#: common/setting/system.py:270 +#: common/setting/system.py:284 msgid "Maximum allowable download size for remote image" msgstr "遠程圖片的最大允許下載大小" -#: common/setting/system.py:276 +#: common/setting/system.py:290 msgid "User-agent used to download from URL" msgstr "用於從 URL 下載的 User-agent" -#: common/setting/system.py:278 +#: common/setting/system.py:292 msgid "Allow to override the user-agent used to download images and files from external URL (leave blank for the default)" msgstr "允許覆蓋用於從外部 URL 下載圖片和文件的 user-agent(留空為默認值)" -#: common/setting/system.py:283 +#: common/setting/system.py:297 msgid "Strict URL Validation" msgstr "嚴格的 URL 驗證" -#: common/setting/system.py:284 +#: common/setting/system.py:298 msgid "Require schema specification when validating URLs" msgstr "驗證 URL 時需要 schema 規範" -#: common/setting/system.py:289 +#: common/setting/system.py:303 msgid "Update Check Interval" msgstr "更新檢查間隔" -#: common/setting/system.py:290 +#: common/setting/system.py:304 msgid "How often to check for updates (set to zero to disable)" msgstr "檢查更新的頻率(設置為零以禁用)" -#: common/setting/system.py:296 +#: common/setting/system.py:310 msgid "Automatic Backup" msgstr "自動備份" -#: common/setting/system.py:297 +#: common/setting/system.py:311 msgid "Enable automatic backup of database and media files" msgstr "啟動資料庫和媒體文件自動備份" -#: common/setting/system.py:302 +#: common/setting/system.py:316 msgid "Auto Backup Interval" msgstr "自動備份間隔" -#: common/setting/system.py:303 +#: common/setting/system.py:317 msgid "Specify number of days between automated backup events" msgstr "指定自動備份之間的間隔天數" -#: common/setting/system.py:309 +#: common/setting/system.py:323 msgid "Task Deletion Interval" msgstr "任務刪除間隔" -#: common/setting/system.py:311 +#: common/setting/system.py:325 msgid "Background task results will be deleted after specified number of days" msgstr "後台任務結果將在指定天數後刪除" -#: common/setting/system.py:318 +#: common/setting/system.py:332 msgid "Error Log Deletion Interval" msgstr "錯誤日誌刪除間隔" -#: common/setting/system.py:319 +#: common/setting/system.py:333 msgid "Error logs will be deleted after specified number of days" msgstr "錯誤日誌將在指定天數後被刪除" -#: common/setting/system.py:325 +#: common/setting/system.py:339 msgid "Notification Deletion Interval" msgstr "通知刪除間隔" -#: common/setting/system.py:327 +#: common/setting/system.py:341 msgid "User notifications will be deleted after specified number of days" msgstr "用户通知將在指定天數後被刪除" -#: common/setting/system.py:334 +#: common/setting/system.py:348 msgid "Email Deletion Interval" msgstr "電子郵件刪除間隔" -#: common/setting/system.py:336 +#: common/setting/system.py:350 msgid "Email messages will be deleted after specified number of days" msgstr "電子郵件訊息將在指定天數後刪除" -#: common/setting/system.py:343 +#: common/setting/system.py:357 msgid "Protect Email Log" msgstr "保護電子郵件日誌" -#: common/setting/system.py:344 +#: common/setting/system.py:358 msgid "Prevent deletion of email log entries" msgstr "防止刪除電子郵件日誌紀錄" -#: common/setting/system.py:349 +#: common/setting/system.py:363 msgid "Barcode Support" msgstr "條形碼支持" -#: common/setting/system.py:350 +#: common/setting/system.py:364 msgid "Enable barcode scanner support in the web interface" msgstr "在網頁界面啓用條形碼掃描器支持" -#: common/setting/system.py:355 +#: common/setting/system.py:369 msgid "Store Barcode Results" msgstr "存儲條碼結果" -#: common/setting/system.py:356 +#: common/setting/system.py:370 msgid "Store barcode scan results in the database" msgstr "存儲條碼掃描結果" -#: common/setting/system.py:361 +#: common/setting/system.py:375 msgid "Barcode Scans Maximum Count" msgstr "條碼掃描最大計數" -#: common/setting/system.py:362 +#: common/setting/system.py:376 msgid "Maximum number of barcode scan results to store" msgstr "存儲條碼掃描結果的最大數量" -#: common/setting/system.py:367 +#: common/setting/system.py:381 msgid "Barcode Input Delay" msgstr "條形碼掃描延遲設置" -#: common/setting/system.py:368 +#: common/setting/system.py:382 msgid "Barcode input processing delay time" msgstr "條形碼輸入處理延遲時間" -#: common/setting/system.py:374 +#: common/setting/system.py:388 msgid "Barcode Webcam Support" msgstr "條碼攝像頭支持" -#: common/setting/system.py:375 +#: common/setting/system.py:389 msgid "Allow barcode scanning via webcam in browser" msgstr "允許通過網絡攝像頭掃描條形碼" -#: common/setting/system.py:380 +#: common/setting/system.py:394 msgid "Barcode Show Data" msgstr "條形碼顯示數據" -#: common/setting/system.py:381 +#: common/setting/system.py:395 msgid "Display barcode data in browser as text" msgstr "在瀏覽器中將條形碼數據顯示為文本" -#: common/setting/system.py:386 +#: common/setting/system.py:400 msgid "Barcode Generation Plugin" msgstr "條形碼生成插件" -#: common/setting/system.py:387 +#: common/setting/system.py:401 msgid "Plugin to use for internal barcode data generation" msgstr "用於內部條形碼數據生成的插件" -#: common/setting/system.py:392 +#: common/setting/system.py:406 msgid "Part Revisions" msgstr "零件修訂" -#: common/setting/system.py:393 +#: common/setting/system.py:407 msgid "Enable revision field for Part" msgstr "啓用零件修訂字段" -#: common/setting/system.py:398 +#: common/setting/system.py:412 msgid "Assembly Revision Only" msgstr "僅限裝配修訂版本" -#: common/setting/system.py:399 +#: common/setting/system.py:413 msgid "Only allow revisions for assembly parts" msgstr "僅允許對裝配零件進行修訂" -#: common/setting/system.py:404 +#: common/setting/system.py:418 msgid "Allow Deletion from Assembly" msgstr "允許從裝配中刪除" -#: common/setting/system.py:405 +#: common/setting/system.py:419 msgid "Allow deletion of parts which are used in an assembly" msgstr "允許刪除已在裝配中使用的零件" -#: common/setting/system.py:410 +#: common/setting/system.py:424 msgid "IPN Regex" msgstr "IPN 內部零件號" -#: common/setting/system.py:411 +#: common/setting/system.py:425 msgid "Regular expression pattern for matching Part IPN" msgstr "匹配零件 IPN(內部零件號)的正則表達式模式" -#: common/setting/system.py:414 +#: common/setting/system.py:428 msgid "Allow Duplicate IPN" msgstr "允許重複的 IPN(內部零件號)" -#: common/setting/system.py:415 +#: common/setting/system.py:429 msgid "Allow multiple parts to share the same IPN" msgstr "允許多個零件共享相同的 IPN(內部零件號)" -#: common/setting/system.py:420 +#: common/setting/system.py:434 msgid "Allow Editing IPN" msgstr "允許編輯 IPN(內部零件號)" -#: common/setting/system.py:421 +#: common/setting/system.py:435 msgid "Allow changing the IPN value while editing a part" msgstr "允許編輯零件時更改內部零件號" -#: common/setting/system.py:426 +#: common/setting/system.py:440 msgid "Copy Part BOM Data" msgstr "複製零件物料清單數據" -#: common/setting/system.py:427 +#: common/setting/system.py:441 msgid "Copy BOM data by default when duplicating a part" msgstr "複製零件時默認複製物料清單數據" -#: common/setting/system.py:432 +#: common/setting/system.py:446 msgid "Copy Part Parameter Data" msgstr "複製零件參數數據" -#: common/setting/system.py:433 +#: common/setting/system.py:447 msgid "Copy parameter data by default when duplicating a part" msgstr "複製零件時默認複製參數數據" -#: common/setting/system.py:438 +#: common/setting/system.py:452 msgid "Copy Part Test Data" msgstr "複製零件測試數據" -#: common/setting/system.py:439 +#: common/setting/system.py:453 msgid "Copy test data by default when duplicating a part" msgstr "複製零件時默認複製測試數據" -#: common/setting/system.py:444 +#: common/setting/system.py:458 msgid "Copy Category Parameter Templates" msgstr "複製類別參數模板" -#: common/setting/system.py:445 +#: common/setting/system.py:459 msgid "Copy category parameter templates when creating a part" msgstr "創建零件時複製類別參數模板" -#: common/setting/system.py:451 +#: common/setting/system.py:465 msgid "Parts are templates by default" msgstr "零件默認為模板" -#: common/setting/system.py:457 +#: common/setting/system.py:471 msgid "Parts can be assembled from other components by default" msgstr "默認情況下,元件可由其他零件組裝而成" -#: common/setting/system.py:462 part/models.py:1296 part/serializers.py:1599 -#: part/serializers.py:1606 +#: common/setting/system.py:476 part/models.py:1259 part/serializers.py:1724 +#: part/serializers.py:1731 msgid "Component" msgstr "組件" -#: common/setting/system.py:463 +#: common/setting/system.py:477 msgid "Parts can be used as sub-components by default" msgstr "默認情況下,零件可用作子部件" -#: common/setting/system.py:468 part/models.py:1314 +#: common/setting/system.py:482 part/models.py:1277 msgid "Purchaseable" msgstr "可購買" -#: common/setting/system.py:469 +#: common/setting/system.py:483 msgid "Parts are purchaseable by default" msgstr "默認情況下可購買零件" -#: common/setting/system.py:474 part/models.py:1320 stock/api.py:643 +#: common/setting/system.py:488 part/models.py:1283 stock/api.py:642 msgid "Salable" msgstr "可銷售" -#: common/setting/system.py:475 +#: common/setting/system.py:489 msgid "Parts are salable by default" msgstr "零件默認為可銷售" -#: common/setting/system.py:481 +#: common/setting/system.py:495 msgid "Parts are trackable by default" msgstr "默認情況下可跟蹤零件" -#: common/setting/system.py:486 part/models.py:1336 +#: common/setting/system.py:500 part/models.py:1299 msgid "Virtual" msgstr "虛擬的" -#: common/setting/system.py:487 +#: common/setting/system.py:501 msgid "Parts are virtual by default" msgstr "默認情況下,零件是虛擬的" -#: common/setting/system.py:492 +#: common/setting/system.py:506 msgid "Show related parts" msgstr "顯示相關零件" -#: common/setting/system.py:493 +#: common/setting/system.py:507 msgid "Display related parts for a part" msgstr "顯示零件的相關零件" -#: common/setting/system.py:498 +#: common/setting/system.py:512 msgid "Initial Stock Data" msgstr "初始庫存數據" -#: common/setting/system.py:499 +#: common/setting/system.py:513 msgid "Allow creation of initial stock when adding a new part" msgstr "允許在添加新零件時創建初始庫存" -#: common/setting/system.py:504 +#: common/setting/system.py:518 msgid "Initial Supplier Data" msgstr "初始供應商數據" -#: common/setting/system.py:506 +#: common/setting/system.py:520 msgid "Allow creation of initial supplier data when adding a new part" msgstr "允許在添加新零件時創建初始供應商數據" -#: common/setting/system.py:512 +#: common/setting/system.py:526 msgid "Part Name Display Format" msgstr "零件名稱顯示格式" -#: common/setting/system.py:513 +#: common/setting/system.py:527 msgid "Format to display the part name" msgstr "顯示零件名稱的格式" -#: common/setting/system.py:519 +#: common/setting/system.py:533 msgid "Part Category Default Icon" msgstr "零件類別默認圖標" -#: common/setting/system.py:520 +#: common/setting/system.py:534 msgid "Part category default icon (empty means no icon)" msgstr "零件類別默認圖標 (空表示沒有圖標)" -#: common/setting/system.py:525 +#: common/setting/system.py:539 msgid "Minimum Pricing Decimal Places" msgstr "最小定價小數位數" -#: common/setting/system.py:527 +#: common/setting/system.py:541 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "呈現定價數據時顯示的最小小數位數" -#: common/setting/system.py:538 +#: common/setting/system.py:552 msgid "Maximum Pricing Decimal Places" msgstr "最大定價小數位數" -#: common/setting/system.py:540 +#: common/setting/system.py:554 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "呈現定價數據時顯示的最大小數位數" -#: common/setting/system.py:551 +#: common/setting/system.py:565 msgid "Use Supplier Pricing" msgstr "使用供應商定價" -#: common/setting/system.py:553 +#: common/setting/system.py:567 msgid "Include supplier price breaks in overall pricing calculations" msgstr "將供應商的價批發價納入總體定價計算中" -#: common/setting/system.py:559 +#: common/setting/system.py:573 msgid "Purchase History Override" msgstr "購買歷史記錄覆蓋" -#: common/setting/system.py:561 +#: common/setting/system.py:575 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "歷史採購訂單定價優先於供應商批發價" -#: common/setting/system.py:567 +#: common/setting/system.py:581 msgid "Use Stock Item Pricing" msgstr "使用庫存項定價" -#: common/setting/system.py:569 +#: common/setting/system.py:583 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "使用手動輸入的庫存數據進行定價計算" -#: common/setting/system.py:575 +#: common/setting/system.py:589 msgid "Stock Item Pricing Age" msgstr "庫存項目定價時間" -#: common/setting/system.py:577 +#: common/setting/system.py:591 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "從定價計算中排除超過此天數的庫存項目" -#: common/setting/system.py:584 +#: common/setting/system.py:598 msgid "Use Variant Pricing" msgstr "使用變體定價" -#: common/setting/system.py:585 +#: common/setting/system.py:599 msgid "Include variant pricing in overall pricing calculations" msgstr "在整體定價計算中包括變體定價" -#: common/setting/system.py:590 +#: common/setting/system.py:604 msgid "Active Variants Only" msgstr "僅限活躍變體" -#: common/setting/system.py:592 +#: common/setting/system.py:606 msgid "Only use active variant parts for calculating variant pricing" msgstr "僅使用活躍變體零件計算變體價格" -#: common/setting/system.py:598 +#: common/setting/system.py:612 msgid "Auto Update Pricing" msgstr "自動更新定價" -#: common/setting/system.py:600 +#: common/setting/system.py:614 msgid "Automatically update part pricing when internal data changes" msgstr "當內部資料變更時自動更新零件定價" -#: common/setting/system.py:606 +#: common/setting/system.py:620 msgid "Pricing Rebuild Interval" msgstr "價格重建間隔" -#: common/setting/system.py:607 +#: common/setting/system.py:621 msgid "Number of days before part pricing is automatically updated" msgstr "零件價格自動更新前的天數" -#: common/setting/system.py:613 +#: common/setting/system.py:627 msgid "Internal Prices" msgstr "內部價格" -#: common/setting/system.py:614 +#: common/setting/system.py:628 msgid "Enable internal prices for parts" msgstr "啓用內部零件價格" -#: common/setting/system.py:619 +#: common/setting/system.py:633 msgid "Internal Price Override" msgstr "覆蓋內部價格" -#: common/setting/system.py:621 +#: common/setting/system.py:635 msgid "If available, internal prices override price range calculations" msgstr "如果有內部價格,內部價格將覆蓋價格範圍計算" -#: common/setting/system.py:627 +#: common/setting/system.py:641 +msgid "Allow BOM Zero Quantity" +msgstr "" + +#: common/setting/system.py:643 +msgid "Accept a zero quantity for BOM item for part. Enables using setup quantity to define a quantity required per build, independent of build quantity" +msgstr "" + +#: common/setting/system.py:649 msgid "Enable label printing" msgstr "啓用標籤打印功能" -#: common/setting/system.py:628 +#: common/setting/system.py:650 msgid "Enable label printing from the web interface" msgstr "啓用從網絡界面打印標籤" -#: common/setting/system.py:633 +#: common/setting/system.py:655 msgid "Label Image DPI" msgstr "標籤圖片 DPI" -#: common/setting/system.py:635 +#: common/setting/system.py:657 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "生成圖像文件以供標籤打印插件使用時的 DPI 分辨率" -#: common/setting/system.py:641 +#: common/setting/system.py:663 msgid "Enable Reports" msgstr "啓用報告" -#: common/setting/system.py:642 +#: common/setting/system.py:664 msgid "Enable generation of reports" msgstr "啓用報告生成" -#: common/setting/system.py:647 +#: common/setting/system.py:669 msgid "Debug Mode" msgstr "調試模式" -#: common/setting/system.py:648 +#: common/setting/system.py:670 msgid "Generate reports in debug mode (HTML output)" msgstr "以調試模式生成報告(HTML 輸出)" -#: common/setting/system.py:653 +#: common/setting/system.py:675 msgid "Log Report Errors" msgstr "日誌錯誤報告" -#: common/setting/system.py:654 +#: common/setting/system.py:676 msgid "Log errors which occur when generating reports" msgstr "記錄生成報告時出現的錯誤" -#: common/setting/system.py:659 plugin/builtin/labels/label_sheet.py:29 +#: common/setting/system.py:681 plugin/builtin/labels/label_sheet.py:29 #: report/models.py:381 msgid "Page Size" msgstr "頁面大小" -#: common/setting/system.py:660 +#: common/setting/system.py:682 msgid "Default page size for PDF reports" msgstr "PDF 報告默認頁面大小" -#: common/setting/system.py:665 +#: common/setting/system.py:687 msgid "Enforce Parameter Units" msgstr "強制參數單位" -#: common/setting/system.py:667 +#: common/setting/system.py:689 msgid "If units are provided, parameter values must match the specified units" msgstr "如果提供了單位,參數值必須與指定的單位匹配" -#: common/setting/system.py:673 +#: common/setting/system.py:695 msgid "Globally Unique Serials" msgstr "全局唯一序列號" -#: common/setting/system.py:674 +#: common/setting/system.py:696 msgid "Serial numbers for stock items must be globally unique" msgstr "庫存項的序列號必須全局唯一" -#: common/setting/system.py:679 +#: common/setting/system.py:701 msgid "Delete Depleted Stock" msgstr "刪除已耗盡的庫存" -#: common/setting/system.py:680 +#: common/setting/system.py:702 msgid "Determines default behavior when a stock item is depleted" msgstr "設置庫存耗盡時的默認行為" -#: common/setting/system.py:685 +#: common/setting/system.py:707 msgid "Batch Code Template" msgstr "批號模板" -#: common/setting/system.py:686 +#: common/setting/system.py:708 msgid "Template for generating default batch codes for stock items" msgstr "為庫存項生成默認批號的模板" -#: common/setting/system.py:690 +#: common/setting/system.py:712 msgid "Stock Expiry" msgstr "庫存過期" -#: common/setting/system.py:691 +#: common/setting/system.py:713 msgid "Enable stock expiry functionality" msgstr "啓用庫存過期功能" -#: common/setting/system.py:696 +#: common/setting/system.py:718 msgid "Sell Expired Stock" msgstr "銷售過期庫存" -#: common/setting/system.py:697 +#: common/setting/system.py:719 msgid "Allow sale of expired stock" msgstr "允許銷售過期庫存" -#: common/setting/system.py:702 +#: common/setting/system.py:724 msgid "Stock Stale Time" msgstr "庫存過期時間" -#: common/setting/system.py:704 +#: common/setting/system.py:726 msgid "Number of days stock items are considered stale before expiring" msgstr "庫存項在到期前被視為過期的天數" -#: common/setting/system.py:711 +#: common/setting/system.py:733 msgid "Build Expired Stock" msgstr "生產過期庫存" -#: common/setting/system.py:712 +#: common/setting/system.py:734 msgid "Allow building with expired stock" msgstr "允許用過期的庫存生產" -#: common/setting/system.py:717 +#: common/setting/system.py:739 msgid "Stock Ownership Control" msgstr "庫存所有權控制" -#: common/setting/system.py:718 +#: common/setting/system.py:740 msgid "Enable ownership control over stock locations and items" msgstr "啓用庫存地點和項目的所有權控制" -#: common/setting/system.py:723 +#: common/setting/system.py:745 msgid "Stock Location Default Icon" msgstr "庫存地點默認圖標" -#: common/setting/system.py:724 +#: common/setting/system.py:746 msgid "Stock location default icon (empty means no icon)" msgstr "庫存地點默認圖標 (空表示沒有圖標)" -#: common/setting/system.py:729 +#: common/setting/system.py:751 msgid "Show Installed Stock Items" msgstr "顯示已安裝的庫存項" -#: common/setting/system.py:730 +#: common/setting/system.py:752 msgid "Display installed stock items in stock tables" msgstr "在庫存表中顯示已安裝的庫存項" -#: common/setting/system.py:735 +#: common/setting/system.py:757 msgid "Check BOM when installing items" msgstr "在安裝項目時檢查物料清單" -#: common/setting/system.py:737 +#: common/setting/system.py:759 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "已安裝的庫存項目必須存在於上級零件的物料清單中" -#: common/setting/system.py:743 +#: common/setting/system.py:765 msgid "Allow Out of Stock Transfer" msgstr "允許超出庫存轉移" -#: common/setting/system.py:745 +#: common/setting/system.py:767 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "允許非庫存的庫存項目在庫存位置之間轉移" -#: common/setting/system.py:751 +#: common/setting/system.py:773 msgid "Build Order Reference Pattern" msgstr "生產訂單參考模式" -#: common/setting/system.py:752 +#: common/setting/system.py:774 msgid "Required pattern for generating Build Order reference field" msgstr "生成生產訂單參考字段所需的模式" -#: common/setting/system.py:757 common/setting/system.py:817 -#: common/setting/system.py:837 common/setting/system.py:881 +#: common/setting/system.py:779 common/setting/system.py:839 +#: common/setting/system.py:859 common/setting/system.py:903 msgid "Require Responsible Owner" msgstr "要求負責人" -#: common/setting/system.py:758 common/setting/system.py:818 -#: common/setting/system.py:838 common/setting/system.py:882 +#: common/setting/system.py:780 common/setting/system.py:840 +#: common/setting/system.py:860 common/setting/system.py:904 msgid "A responsible owner must be assigned to each order" msgstr "必須為每個訂單分配一個負責人" -#: common/setting/system.py:763 +#: common/setting/system.py:785 msgid "Require Active Part" msgstr "需要活動零件" -#: common/setting/system.py:764 +#: common/setting/system.py:786 msgid "Prevent build order creation for inactive parts" msgstr "防止為非活動零件創建生產訂單" -#: common/setting/system.py:769 +#: common/setting/system.py:791 msgid "Require Locked Part" msgstr "需要鎖定零件" -#: common/setting/system.py:770 +#: common/setting/system.py:792 msgid "Prevent build order creation for unlocked parts" msgstr "防止為未鎖定的零件創建生產訂單" -#: common/setting/system.py:775 +#: common/setting/system.py:797 msgid "Require Valid BOM" msgstr "需要有效的物料清單" -#: common/setting/system.py:776 +#: common/setting/system.py:798 msgid "Prevent build order creation unless BOM has been validated" msgstr "除非物料清單已驗證,否則禁止創建生產訂單" -#: common/setting/system.py:781 +#: common/setting/system.py:803 msgid "Require Closed Child Orders" msgstr "需要關閉子訂單" -#: common/setting/system.py:783 +#: common/setting/system.py:805 msgid "Prevent build order completion until all child orders are closed" msgstr "在所有子訂單關閉之前,阻止生產訂單的完成" -#: common/setting/system.py:789 +#: common/setting/system.py:811 msgid "External Build Orders" msgstr "外部生產工單" -#: common/setting/system.py:790 +#: common/setting/system.py:812 msgid "Enable external build order functionality" msgstr "啟用外部生產工單功能" -#: common/setting/system.py:795 +#: common/setting/system.py:817 msgid "Block Until Tests Pass" msgstr "阻止直到測試通過" -#: common/setting/system.py:797 +#: common/setting/system.py:819 msgid "Prevent build outputs from being completed until all required tests pass" msgstr "在所有必要的測試通過之前,阻止產出完成" -#: common/setting/system.py:803 +#: common/setting/system.py:825 msgid "Enable Return Orders" msgstr "啓用訂單退貨" -#: common/setting/system.py:804 +#: common/setting/system.py:826 msgid "Enable return order functionality in the user interface" msgstr "在用户界面中啓用訂單退貨功能" -#: common/setting/system.py:809 +#: common/setting/system.py:831 msgid "Return Order Reference Pattern" msgstr "退貨訂單參考模式" -#: common/setting/system.py:811 +#: common/setting/system.py:833 msgid "Required pattern for generating Return Order reference field" msgstr "生成退貨訂單參考字段所需的模式" -#: common/setting/system.py:823 +#: common/setting/system.py:845 msgid "Edit Completed Return Orders" msgstr "編輯已完成的退貨訂單" -#: common/setting/system.py:825 +#: common/setting/system.py:847 msgid "Allow editing of return orders after they have been completed" msgstr "允許編輯已完成的退貨訂單" -#: common/setting/system.py:831 +#: common/setting/system.py:853 msgid "Sales Order Reference Pattern" msgstr "銷售訂單參考模式" -#: common/setting/system.py:832 +#: common/setting/system.py:854 msgid "Required pattern for generating Sales Order reference field" msgstr "生成銷售訂單參考字段所需參照模式" -#: common/setting/system.py:843 +#: common/setting/system.py:865 msgid "Sales Order Default Shipment" msgstr "銷售訂單默認配送方式" -#: common/setting/system.py:844 +#: common/setting/system.py:866 msgid "Enable creation of default shipment with sales orders" msgstr "啓用創建銷售訂單的默認配送功能" -#: common/setting/system.py:849 +#: common/setting/system.py:871 msgid "Edit Completed Sales Orders" msgstr "編輯已完成的銷售訂單" -#: common/setting/system.py:851 +#: common/setting/system.py:873 msgid "Allow editing of sales orders after they have been shipped or completed" msgstr "允許在訂單配送或完成後編輯銷售訂單" -#: common/setting/system.py:857 +#: common/setting/system.py:879 msgid "Shipment Requires Checking" msgstr "" -#: common/setting/system.py:859 +#: common/setting/system.py:881 msgid "Prevent completion of shipments until items have been checked" msgstr "" -#: common/setting/system.py:865 +#: common/setting/system.py:887 msgid "Mark Shipped Orders as Complete" msgstr "標記該訂單為已完成?" -#: common/setting/system.py:867 +#: common/setting/system.py:889 msgid "Sales orders marked as shipped will automatically be completed, bypassing the \"shipped\" status" msgstr "標記為已發貨的銷售訂單將自動完成,繞過“已發貨”狀態" -#: common/setting/system.py:873 +#: common/setting/system.py:895 msgid "Purchase Order Reference Pattern" msgstr "採購訂單參考模式" -#: common/setting/system.py:875 +#: common/setting/system.py:897 msgid "Required pattern for generating Purchase Order reference field" msgstr "生成採購訂單參考字段所需的模式" -#: common/setting/system.py:887 +#: common/setting/system.py:909 msgid "Edit Completed Purchase Orders" msgstr "編輯已完成的採購訂單" -#: common/setting/system.py:889 +#: common/setting/system.py:911 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "允許在採購訂單已配送或完成後編輯訂單" -#: common/setting/system.py:895 +#: common/setting/system.py:917 msgid "Convert Currency" msgstr "轉換幣別" -#: common/setting/system.py:896 +#: common/setting/system.py:918 msgid "Convert item value to base currency when receiving stock" msgstr "收貨時將項目價值換算為基準幣別" -#: common/setting/system.py:901 +#: common/setting/system.py:923 msgid "Auto Complete Purchase Orders" msgstr "自動完成採購訂單" -#: common/setting/system.py:903 +#: common/setting/system.py:925 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "當收到所有行項目時,自動將採購訂單標記為完成" -#: common/setting/system.py:910 +#: common/setting/system.py:932 msgid "Enable password forgot" msgstr "忘記啓用密碼" -#: common/setting/system.py:911 +#: common/setting/system.py:933 msgid "Enable password forgot function on the login pages" msgstr "在登錄頁面上啓用忘記密碼功能" -#: common/setting/system.py:916 +#: common/setting/system.py:938 msgid "Enable registration" msgstr "啓用註冊" -#: common/setting/system.py:917 +#: common/setting/system.py:939 msgid "Enable self-registration for users on the login pages" msgstr "在登錄頁面為用户啓用自行註冊功能" -#: common/setting/system.py:922 +#: common/setting/system.py:944 msgid "Enable SSO" msgstr "啓用單點登錄" -#: common/setting/system.py:923 +#: common/setting/system.py:945 msgid "Enable SSO on the login pages" msgstr "在登錄界面啓用單點登錄" -#: common/setting/system.py:928 +#: common/setting/system.py:950 msgid "Enable SSO registration" msgstr "啓用單點登錄註冊" -#: common/setting/system.py:930 +#: common/setting/system.py:952 msgid "Enable self-registration via SSO for users on the login pages" msgstr "允許登錄頁面上的用户通過 SSO 進行自我註冊" -#: common/setting/system.py:936 +#: common/setting/system.py:958 msgid "Enable SSO group sync" msgstr "啓用單點登錄羣組同步" -#: common/setting/system.py:938 +#: common/setting/system.py:960 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "啓用庫存管理系統組和由身份提供者提供的組的同步功能" -#: common/setting/system.py:944 +#: common/setting/system.py:966 msgid "SSO group key" msgstr "單點登錄系統組密鑰" -#: common/setting/system.py:945 +#: common/setting/system.py:967 msgid "The name of the groups claim attribute provided by the IdP" msgstr "由身份提供者提供的組聲明屬性名稱" -#: common/setting/system.py:950 +#: common/setting/system.py:972 msgid "SSO group map" msgstr "單點登錄系統組地圖" -#: common/setting/system.py:952 +#: common/setting/system.py:974 msgid "A mapping from SSO groups to local InvenTree groups. If the local group does not exist, it will be created." msgstr "從單點登錄系統組組到本地庫存管理系統組的映射。如果本地組不存在,它將被創建。" -#: common/setting/system.py:958 +#: common/setting/system.py:980 msgid "Remove groups outside of SSO" msgstr "移除單點登錄系統以外的羣組" -#: common/setting/system.py:960 +#: common/setting/system.py:982 msgid "Whether groups assigned to the user should be removed if they are not backend by the IdP. Disabling this setting might cause security issues" msgstr "如果分配給用户的組不是身份提供者的後端,是否應該刪除它們。禁用此設置可能會造成安全問題" -#: common/setting/system.py:966 +#: common/setting/system.py:988 msgid "Email required" msgstr "需要郵箱地址" -#: common/setting/system.py:967 +#: common/setting/system.py:989 msgid "Require user to supply mail on signup" msgstr "要求用户在註冊時提供郵件" -#: common/setting/system.py:972 +#: common/setting/system.py:994 msgid "Auto-fill SSO users" msgstr "自動填充單點登錄系統用户" -#: common/setting/system.py:973 +#: common/setting/system.py:995 msgid "Automatically fill out user-details from SSO account-data" msgstr "自動使用單點登錄系統賬户的數據填寫用户詳細信息" -#: common/setting/system.py:978 +#: common/setting/system.py:1000 msgid "Mail twice" msgstr "發兩次郵件" -#: common/setting/system.py:979 +#: common/setting/system.py:1001 msgid "On signup ask users twice for their mail" msgstr "註冊時詢問用户他們的電子郵件兩次" -#: common/setting/system.py:984 +#: common/setting/system.py:1006 msgid "Password twice" msgstr "兩次輸入密碼" -#: common/setting/system.py:985 +#: common/setting/system.py:1007 msgid "On signup ask users twice for their password" msgstr "當註冊時請用户輸入密碼兩次" -#: common/setting/system.py:990 +#: common/setting/system.py:1012 msgid "Allowed domains" msgstr "域名白名單" -#: common/setting/system.py:992 +#: common/setting/system.py:1014 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "限制註冊到某些域名 (逗號分隔,以 @ 開頭)" -#: common/setting/system.py:998 +#: common/setting/system.py:1020 msgid "Group on signup" msgstr "註冊羣組" -#: common/setting/system.py:1000 +#: common/setting/system.py:1022 msgid "Group to which new users are assigned on registration. If SSO group sync is enabled, this group is only set if no group can be assigned from the IdP." msgstr "註冊時分配給新用户的組。 如果啓用了單點登錄系統羣組同步,此羣組僅在無法從 IdP 分配任何羣組的情況下才被設置。" -#: common/setting/system.py:1006 +#: common/setting/system.py:1028 msgid "Enforce MFA" msgstr "強制啓用多因素安全認證" -#: common/setting/system.py:1007 +#: common/setting/system.py:1029 msgid "Users must use multifactor security." msgstr "用户必須使用多因素安全認證。" -#: common/setting/system.py:1012 +#: common/setting/system.py:1034 +msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." +msgstr "" + +#: common/setting/system.py:1039 msgid "Check plugins on startup" msgstr "啓動時檢查插件" -#: common/setting/system.py:1014 +#: common/setting/system.py:1041 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "啓動時檢查全部插件是否已安裝 - 在容器環境中啓用" -#: common/setting/system.py:1021 +#: common/setting/system.py:1048 msgid "Check for plugin updates" msgstr "檢查插件更新" -#: common/setting/system.py:1022 +#: common/setting/system.py:1049 msgid "Enable periodic checks for updates to installed plugins" msgstr "啓用定期檢查已安裝插件的更新" -#: common/setting/system.py:1028 +#: common/setting/system.py:1055 msgid "Enable URL integration" msgstr "啓用統一資源定位符集成" -#: common/setting/system.py:1029 +#: common/setting/system.py:1056 msgid "Enable plugins to add URL routes" msgstr "啓用插件以添加統一資源定位符路由" -#: common/setting/system.py:1035 +#: common/setting/system.py:1062 msgid "Enable navigation integration" msgstr "啓用導航集成" -#: common/setting/system.py:1036 +#: common/setting/system.py:1063 msgid "Enable plugins to integrate into navigation" msgstr "啓用插件以集成到導航中" -#: common/setting/system.py:1042 +#: common/setting/system.py:1069 msgid "Enable app integration" msgstr "啓用應用集成" -#: common/setting/system.py:1043 +#: common/setting/system.py:1070 msgid "Enable plugins to add apps" msgstr "啓用插件添加應用" -#: common/setting/system.py:1049 +#: common/setting/system.py:1076 msgid "Enable schedule integration" msgstr "啓用調度集成" -#: common/setting/system.py:1050 +#: common/setting/system.py:1077 msgid "Enable plugins to run scheduled tasks" msgstr "啓用插件來運行預定任務" -#: common/setting/system.py:1056 +#: common/setting/system.py:1083 msgid "Enable event integration" msgstr "啓用事件集成" -#: common/setting/system.py:1057 +#: common/setting/system.py:1084 msgid "Enable plugins to respond to internal events" msgstr "啓用插件響應內部事件" -#: common/setting/system.py:1063 +#: common/setting/system.py:1090 msgid "Enable interface integration" msgstr "啓用界面集成" -#: common/setting/system.py:1064 +#: common/setting/system.py:1091 msgid "Enable plugins to integrate into the user interface" msgstr "啓用插件集成到用户界面" -#: common/setting/system.py:1070 +#: common/setting/system.py:1097 msgid "Enable mail integration" msgstr "啟用郵件整合" -#: common/setting/system.py:1071 +#: common/setting/system.py:1098 msgid "Enable plugins to process outgoing/incoming mails" msgstr "允許模組處理寄出/接收郵件" -#: common/setting/system.py:1077 +#: common/setting/system.py:1104 msgid "Enable project codes" msgstr "啟用專案代碼" -#: common/setting/system.py:1078 +#: common/setting/system.py:1105 msgid "Enable project codes for tracking projects" msgstr "啟用專案代碼以追蹤專案" -#: common/setting/system.py:1083 -msgid "Enable Stock History" -msgstr "啟用庫存歷史" +#: common/setting/system.py:1110 +msgid "Enable Stocktake" +msgstr "" -#: common/setting/system.py:1085 +#: common/setting/system.py:1112 msgid "Enable functionality for recording historical stock levels and value" msgstr "啟用記錄庫存數量及價值歷史的功能" -#: common/setting/system.py:1091 +#: common/setting/system.py:1118 msgid "Exclude External Locations" msgstr "排除外部地點" -#: common/setting/system.py:1093 -msgid "Exclude stock items in external locations from stock history calculations" -msgstr "在庫存歷史統計中排除位於外部位置的庫存項目" +#: common/setting/system.py:1120 +msgid "Exclude stock items in external locations from stocktake calculations" +msgstr "" -#: common/setting/system.py:1099 +#: common/setting/system.py:1126 msgid "Automatic Stocktake Period" msgstr "自動盤點週期" -#: common/setting/system.py:1100 -msgid "Number of days between automatic stock history recording" -msgstr "自動記錄庫存歷史的間隔天數" +#: common/setting/system.py:1127 +msgid "Number of days between automatic stocktake recording" +msgstr "" -#: common/setting/system.py:1106 -msgid "Delete Old Stock History Entries" -msgstr "刪除舊庫存歷史記錄" - -#: common/setting/system.py:1108 -msgid "Delete stock history entries older than the specified number of days" -msgstr "刪除早於指定天數的庫存歷史記錄" - -#: common/setting/system.py:1114 -msgid "Stock History Deletion Interval" -msgstr "庫存歷史刪除週期" - -#: common/setting/system.py:1116 -msgid "Stock history entries will be deleted after specified number of days" -msgstr "庫存歷史記錄將於超過指定天數後刪除" - -#: common/setting/system.py:1123 -msgid "Display Users full names" -msgstr "顯示用户全名" - -#: common/setting/system.py:1124 -msgid "Display Users full names instead of usernames" -msgstr "顯示用户全名而不是用户名" - -#: common/setting/system.py:1129 -msgid "Display User Profiles" -msgstr "顯示使用者個人檔案" - -#: common/setting/system.py:1130 -msgid "Display Users Profiles on their profile page" -msgstr "在個人頁面顯示使用者檔案資訊" +#: common/setting/system.py:1133 +msgid "Delete Old Stocktake Entries" +msgstr "" #: common/setting/system.py:1135 -msgid "Enable Test Station Data" -msgstr "啓用測試站數據" - -#: common/setting/system.py:1136 -msgid "Enable test station data collection for test results" -msgstr "啓用測試站數據收集以獲取測試結果" +msgid "Delete stocktake entries older than the specified number of days" +msgstr "" #: common/setting/system.py:1141 -msgid "Enable Machine Ping" +msgid "Stocktake Deletion Interval" msgstr "" #: common/setting/system.py:1143 +msgid "Stocktake entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1150 +msgid "Delete Old Stock Tracking Entries" +msgstr "刪除舊庫存的追蹤紀錄" + +#: common/setting/system.py:1152 +msgid "Delete stock tracking entries older than the specified number of days" +msgstr "" + +#: common/setting/system.py:1158 +msgid "Stock Tracking Deletion Interval" +msgstr "" + +#: common/setting/system.py:1160 +msgid "Stock tracking entries will be deleted after specified number of days" +msgstr "" + +#: common/setting/system.py:1167 +msgid "Display Users full names" +msgstr "顯示用户全名" + +#: common/setting/system.py:1168 +msgid "Display Users full names instead of usernames" +msgstr "顯示用户全名而不是用户名" + +#: common/setting/system.py:1173 +msgid "Display User Profiles" +msgstr "顯示使用者個人檔案" + +#: common/setting/system.py:1174 +msgid "Display Users Profiles on their profile page" +msgstr "在個人頁面顯示使用者檔案資訊" + +#: common/setting/system.py:1179 +msgid "Enable Test Station Data" +msgstr "啓用測試站數據" + +#: common/setting/system.py:1180 +msgid "Enable test station data collection for test results" +msgstr "啓用測試站數據收集以獲取測試結果" + +#: common/setting/system.py:1185 +msgid "Enable Machine Ping" +msgstr "啟用設備 Ping" + +#: common/setting/system.py:1187 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3911,366 +3956,370 @@ msgstr "零件已激活" msgid "Manufacturer is Active" msgstr "製造商處於活動狀態" -#: company/api.py:246 +#: company/api.py:250 msgid "Supplier Part is Active" msgstr "供應商零件處於激活狀態" -#: company/api.py:250 +#: company/api.py:252 +msgid "Primary Supplier Part" +msgstr "" + +#: company/api.py:256 msgid "Internal Part is Active" msgstr "內部零件已激活" -#: company/api.py:255 +#: company/api.py:261 msgid "Supplier is Active" msgstr "供應商已激活" -#: company/api.py:267 company/models.py:522 company/serializers.py:502 -#: part/serializers.py:477 +#: company/api.py:273 company/models.py:535 company/serializers.py:455 +#: part/serializers.py:488 msgid "Manufacturer" msgstr "製造商" -#: company/api.py:274 company/models.py:122 company/models.py:393 -#: stock/api.py:900 +#: company/api.py:280 company/models.py:124 company/models.py:404 +#: stock/api.py:899 msgid "Company" msgstr "公司" -#: company/api.py:284 +#: company/api.py:290 msgid "Has Stock" msgstr "有庫存" -#: company/models.py:123 +#: company/models.py:125 msgid "Companies" msgstr "公司" -#: company/models.py:151 +#: company/models.py:153 msgid "Company description" msgstr "公司簡介" -#: company/models.py:152 +#: company/models.py:154 msgid "Description of the company" msgstr "公司簡介" -#: company/models.py:158 +#: company/models.py:160 msgid "Website" msgstr "網站" -#: company/models.py:159 +#: company/models.py:161 msgid "Company website URL" msgstr "公司網站" -#: company/models.py:165 +#: company/models.py:167 msgid "Phone number" msgstr "電話號碼" -#: company/models.py:167 +#: company/models.py:169 msgid "Contact phone number" msgstr "聯繫電話" -#: company/models.py:174 +#: company/models.py:176 msgid "Contact email address" msgstr "聯繫人電子郵箱地址" -#: company/models.py:179 company/models.py:297 order/models.py:514 +#: company/models.py:181 company/models.py:311 order/models.py:525 #: users/models.py:561 msgid "Contact" msgstr "聯繫人" -#: company/models.py:181 +#: company/models.py:183 msgid "Point of contact" msgstr "聯絡點" -#: company/models.py:187 +#: company/models.py:189 msgid "Link to external company information" msgstr "外部公司信息鏈接" -#: company/models.py:192 +#: company/models.py:194 msgid "Is this company active?" msgstr "這家公司是否激活?" -#: company/models.py:197 +#: company/models.py:199 msgid "Is customer" msgstr "是客户" -#: company/models.py:198 +#: company/models.py:200 msgid "Do you sell items to this company?" msgstr "你是否向該公司出售商品?" -#: company/models.py:203 +#: company/models.py:205 msgid "Is supplier" msgstr "是否為供應商" -#: company/models.py:204 +#: company/models.py:206 msgid "Do you purchase items from this company?" msgstr "你從這家公司買東西嗎?" -#: company/models.py:209 +#: company/models.py:211 msgid "Is manufacturer" msgstr "是製造商嗎" -#: company/models.py:210 +#: company/models.py:212 msgid "Does this company manufacture parts?" msgstr "這家公司生產零件嗎?" -#: company/models.py:218 +#: company/models.py:220 msgid "Default currency used for this company" msgstr "此公司使用的默認貨幣" -#: company/models.py:225 +#: company/models.py:227 msgid "Tax ID" msgstr "稅籍編號" -#: company/models.py:226 +#: company/models.py:228 msgid "Company Tax ID" msgstr "公司稅籍編號" -#: company/models.py:336 order/models.py:524 order/models.py:2289 +#: company/models.py:350 order/models.py:535 order/models.py:2307 msgid "Address" msgstr "地址" -#: company/models.py:337 +#: company/models.py:351 msgid "Addresses" msgstr "地址" -#: company/models.py:394 +#: company/models.py:405 msgid "Select company" msgstr "選擇公司" -#: company/models.py:399 +#: company/models.py:410 msgid "Address title" msgstr "地址標題" -#: company/models.py:400 +#: company/models.py:411 msgid "Title describing the address entry" msgstr "描述地址條目的標題" -#: company/models.py:406 +#: company/models.py:417 msgid "Primary address" msgstr "主要地址" -#: company/models.py:407 +#: company/models.py:418 msgid "Set as primary address" msgstr "設置主要地址" -#: company/models.py:412 +#: company/models.py:423 msgid "Line 1" msgstr "第1行" -#: company/models.py:413 +#: company/models.py:424 msgid "Address line 1" msgstr "地址行1" -#: company/models.py:419 +#: company/models.py:430 msgid "Line 2" msgstr "第2行" -#: company/models.py:420 +#: company/models.py:431 msgid "Address line 2" msgstr "地址行2" -#: company/models.py:426 company/models.py:427 +#: company/models.py:437 company/models.py:438 msgid "Postal code" msgstr "郵政編碼" -#: company/models.py:433 +#: company/models.py:444 msgid "City/Region" msgstr "城市/地區" -#: company/models.py:434 +#: company/models.py:445 msgid "Postal code city/region" msgstr "郵政編碼城市/地區" -#: company/models.py:440 +#: company/models.py:451 msgid "State/Province" msgstr "省/市/自治區" -#: company/models.py:441 +#: company/models.py:452 msgid "State or province" msgstr "省、自治區或直轄市" -#: company/models.py:447 +#: company/models.py:458 msgid "Country" msgstr "國家/地區" -#: company/models.py:448 +#: company/models.py:459 msgid "Address country" msgstr "地址所在國家" -#: company/models.py:454 +#: company/models.py:465 msgid "Courier shipping notes" msgstr "快遞運單" -#: company/models.py:455 +#: company/models.py:466 msgid "Notes for shipping courier" msgstr "運輸快遞注意事項" -#: company/models.py:461 +#: company/models.py:472 msgid "Internal shipping notes" msgstr "內部裝運通知單" -#: company/models.py:462 +#: company/models.py:473 msgid "Shipping notes for internal use" msgstr "內部使用的裝運通知單" -#: company/models.py:469 +#: company/models.py:480 msgid "Link to address information (external)" msgstr "鏈接地址信息 (外部)" -#: company/models.py:494 company/models.py:786 company/serializers.py:516 -#: stock/api.py:561 +#: company/models.py:507 company/models.py:802 company/serializers.py:475 +#: stock/api.py:560 msgid "Manufacturer Part" msgstr "製造商零件" -#: company/models.py:511 company/models.py:754 stock/models.py:1025 -#: stock/serializers.py:407 +#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: stock/serializers.py:409 msgid "Base Part" msgstr "基礎零件" -#: company/models.py:513 company/models.py:756 +#: company/models.py:526 company/models.py:766 msgid "Select part" msgstr "選擇零件" -#: company/models.py:523 +#: company/models.py:536 msgid "Select manufacturer" msgstr "選擇製造商" -#: company/models.py:529 company/serializers.py:524 order/serializers.py:745 -#: part/serializers.py:487 +#: company/models.py:542 company/serializers.py:486 order/serializers.py:703 +#: part/serializers.py:498 msgid "MPN" msgstr "製造商零件編號" -#: company/models.py:530 stock/serializers.py:572 +#: company/models.py:543 stock/serializers.py:566 msgid "Manufacturer Part Number" msgstr "製造商零件編號" -#: company/models.py:537 +#: company/models.py:550 msgid "URL for external manufacturer part link" msgstr "外部製造商零件鏈接的URL" -#: company/models.py:546 +#: company/models.py:559 msgid "Manufacturer part description" msgstr "製造商零件説明" -#: company/models.py:694 +#: company/models.py:691 msgid "Pack units must be compatible with the base part units" msgstr "包裝單位必須與基礎零件單位兼容" -#: company/models.py:701 +#: company/models.py:698 msgid "Pack units must be greater than zero" msgstr "包裝單位必須大於零" -#: company/models.py:715 +#: company/models.py:712 msgid "Linked manufacturer part must reference the same base part" msgstr "鏈接的製造商零件必須引用相同的基礎零件" -#: company/models.py:764 company/serializers.py:494 company/serializers.py:512 -#: order/models.py:640 part/serializers.py:461 +#: company/models.py:774 company/serializers.py:443 company/serializers.py:470 +#: order/models.py:653 part/serializers.py:472 #: plugin/builtin/suppliers/digikey.py:26 plugin/builtin/suppliers/lcsc.py:27 #: plugin/builtin/suppliers/mouser.py:25 plugin/builtin/suppliers/tme.py:27 -#: stock/api.py:567 templates/email/overdue_purchase_order.html:16 +#: stock/api.py:566 templates/email/overdue_purchase_order.html:16 msgid "Supplier" msgstr "供應商" -#: company/models.py:765 +#: company/models.py:775 msgid "Select supplier" msgstr "選擇供應商" -#: company/models.py:771 part/serializers.py:472 +#: company/models.py:781 part/serializers.py:483 msgid "Supplier stock keeping unit" msgstr "供應商庫存管理單位" -#: company/models.py:777 +#: company/models.py:787 msgid "Is this supplier part active?" msgstr "此供應商零件是否處於活動狀態?" -#: company/models.py:787 +#: company/models.py:792 +msgid "Primary" +msgstr "" + +#: company/models.py:793 +msgid "Is this the primary supplier part for the linked Part?" +msgstr "" + +#: company/models.py:803 msgid "Select manufacturer part" msgstr "選擇製造商零件" -#: company/models.py:794 +#: company/models.py:810 msgid "URL for external supplier part link" msgstr "外部供應商零件鏈接的URL" -#: company/models.py:803 +#: company/models.py:819 msgid "Supplier part description" msgstr "供應商零件説明" -#: company/models.py:819 part/models.py:2338 +#: company/models.py:835 part/models.py:2301 msgid "base cost" msgstr "基本費用" -#: company/models.py:820 part/models.py:2339 +#: company/models.py:836 part/models.py:2302 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低費用(例如庫存費)" -#: company/models.py:827 order/serializers.py:886 stock/models.py:1056 -#: stock/serializers.py:1606 +#: company/models.py:843 order/serializers.py:844 stock/models.py:1063 +#: stock/serializers.py:1639 msgid "Packaging" msgstr "打包" -#: company/models.py:828 +#: company/models.py:844 msgid "Part packaging" msgstr "零件打包" -#: company/models.py:833 +#: company/models.py:849 msgid "Pack Quantity" msgstr "包裝數量" -#: company/models.py:835 +#: company/models.py:851 msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "單包供應的總數量。為單個項目留空。" -#: company/models.py:854 part/models.py:2345 +#: company/models.py:870 part/models.py:2308 msgid "multiple" msgstr "多個" -#: company/models.py:855 +#: company/models.py:871 msgid "Order multiple" msgstr "訂購多個" -#: company/models.py:867 +#: company/models.py:883 msgid "Quantity available from supplier" msgstr "供應商提供的數量" -#: company/models.py:873 +#: company/models.py:889 msgid "Availability Updated" msgstr "可用性已更新" -#: company/models.py:874 +#: company/models.py:890 msgid "Date of last update of availability data" msgstr "上次更新可用性數據的日期" -#: company/models.py:1002 +#: company/models.py:1018 msgid "Supplier Price Break" msgstr "供應商批發價" -#: company/serializers.py:184 -msgid "Primary Address" -msgstr "" - -#: company/serializers.py:186 -msgid "Return the string representation for the primary address. This property exists for backwards compatibility." -msgstr "回傳主要地址的字串表示;此屬性保留以維持回溯相容。" - -#: company/serializers.py:218 +#: company/serializers.py:191 msgid "Default currency used for this supplier" msgstr "此供應商使用的默認貨幣" -#: company/serializers.py:260 +#: company/serializers.py:229 msgid "Company Name" msgstr "公司名稱" -#: company/serializers.py:460 part/serializers.py:840 stock/serializers.py:428 +#: company/serializers.py:407 part/serializers.py:845 stock/serializers.py:432 msgid "In Stock" msgstr "有庫存" -#: company/serializers.py:477 +#: company/serializers.py:424 msgid "Price Breaks" msgstr "" -#: data_exporter/mixins.py:325 data_exporter/mixins.py:403 +#: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" msgstr "資料匯出過程發生錯誤" -#: data_exporter/mixins.py:381 +#: data_exporter/mixins.py:395 msgid "Data export plugin returned incorrect data format" msgstr "資料匯出模組回傳的資料格式不正確" @@ -4318,119 +4367,119 @@ msgstr "放置" msgid "Invalid status code" msgstr "無效的狀態代碼" -#: importer/models.py:73 +#: importer/models.py:74 msgid "Data File" msgstr "數據文件" -#: importer/models.py:74 +#: importer/models.py:75 msgid "Data file to import" msgstr "要導入的數據文件" -#: importer/models.py:83 +#: importer/models.py:84 msgid "Columns" msgstr "列" -#: importer/models.py:90 +#: importer/models.py:91 msgid "Target model type for this import session" msgstr "此匯入作業的目標模型類型" -#: importer/models.py:96 +#: importer/models.py:97 msgid "Import status" msgstr "導入狀態" -#: importer/models.py:106 +#: importer/models.py:107 msgid "Field Defaults" msgstr "字段默認值" -#: importer/models.py:113 +#: importer/models.py:114 msgid "Field Overrides" msgstr "字段覆蓋" -#: importer/models.py:120 +#: importer/models.py:121 msgid "Field Filters" msgstr "字段篩選器" -#: importer/models.py:126 +#: importer/models.py:127 msgid "Update Existing Records" msgstr "更新既有紀錄" -#: importer/models.py:127 +#: importer/models.py:128 msgid "If enabled, existing records will be updated with new data" msgstr "啟用時,既有紀錄將以新資料更新" -#: importer/models.py:259 +#: importer/models.py:281 msgid "Some required fields have not been mapped" msgstr "某些必填字段尚未映射" -#: importer/models.py:366 +#: importer/models.py:388 msgid "ID" msgstr "ID" -#: importer/models.py:367 +#: importer/models.py:389 msgid "Existing database identifier for the record" msgstr "資料庫中既有紀錄的識別碼" -#: importer/models.py:430 +#: importer/models.py:452 msgid "Column is already mapped to a database field" msgstr "列已映射到數據庫字段" -#: importer/models.py:435 +#: importer/models.py:457 msgid "Field is already mapped to a data column" msgstr "字段已映射到數據列" -#: importer/models.py:444 +#: importer/models.py:466 msgid "Column mapping must be linked to a valid import session" msgstr "列映射必須鏈接到有效的導入會話" -#: importer/models.py:449 +#: importer/models.py:471 msgid "Column does not exist in the data file" msgstr "數據文件中不存在列" -#: importer/models.py:456 +#: importer/models.py:478 msgid "Field does not exist in the target model" msgstr "目標模型中不存在字段" -#: importer/models.py:460 +#: importer/models.py:482 msgid "Selected field is read-only" msgstr "所選字段為只讀" -#: importer/models.py:465 importer/models.py:536 +#: importer/models.py:487 importer/models.py:564 msgid "Import Session" msgstr "導入會話" -#: importer/models.py:469 +#: importer/models.py:491 msgid "Field" msgstr "字段" -#: importer/models.py:471 +#: importer/models.py:493 msgid "Column" msgstr "列" -#: importer/models.py:540 +#: importer/models.py:568 msgid "Row Index" msgstr "行索引" -#: importer/models.py:543 +#: importer/models.py:571 msgid "Original row data" msgstr "原始行數據" -#: importer/models.py:548 machine/models.py:111 +#: importer/models.py:576 machine/models.py:111 msgid "Errors" msgstr "錯誤" -#: importer/models.py:550 part/serializers.py:1133 +#: importer/models.py:578 part/serializers.py:1132 msgid "Valid" msgstr "有效" -#: importer/models.py:720 +#: importer/models.py:839 msgid "ID is required for updating existing records." msgstr "更新既有紀錄需要提供 ID。" -#: importer/models.py:727 +#: importer/models.py:846 msgid "No record found with the provided ID" msgstr "" -#: importer/models.py:733 +#: importer/models.py:852 msgid "Invalid ID format provided" msgstr "" @@ -4530,7 +4579,7 @@ msgstr "每個標籤要打印的份數" msgid "Connected" msgstr "已連接" -#: machine/machine_types/label_printer.py:232 order/api.py:1800 +#: machine/machine_types/label_printer.py:232 order/api.py:1839 msgid "Unknown" msgstr "未知" @@ -4648,115 +4697,127 @@ msgstr "" #: machine/serializers.py:35 msgid "Type of the property" -msgstr "" +msgstr "屬性類別" #: machine/serializers.py:40 msgid "Max Progress" -msgstr "" +msgstr "最大進度" #: machine/serializers.py:41 msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:130 +#: order/api.py:127 msgid "Order Reference" msgstr "訂單參考" -#: order/api.py:158 order/api.py:1212 +#: order/api.py:155 order/api.py:1213 msgid "Outstanding" msgstr "未完成" -#: order/api.py:174 +#: order/api.py:171 msgid "Has Project Code" msgstr "有項目編碼" -#: order/api.py:188 order/models.py:489 +#: order/api.py:185 order/models.py:493 msgid "Created By" msgstr "創建人" -#: order/api.py:192 +#: order/api.py:189 msgid "Created Before" msgstr "建立時間早於" -#: order/api.py:196 +#: order/api.py:193 msgid "Created After" msgstr "建立時間晚於" -#: order/api.py:200 +#: order/api.py:197 msgid "Has Start Date" msgstr "具有開始日期" -#: order/api.py:208 +#: order/api.py:205 msgid "Start Date Before" msgstr "開始日期早於" -#: order/api.py:212 +#: order/api.py:209 msgid "Start Date After" msgstr "開始日期晚於" -#: order/api.py:216 +#: order/api.py:213 msgid "Has Target Date" msgstr "具有目標日期" -#: order/api.py:224 +#: order/api.py:221 msgid "Target Date Before" msgstr "目標日期早於" -#: order/api.py:228 +#: order/api.py:225 msgid "Target Date After" msgstr "目標日期晚於" -#: order/api.py:279 +#: order/api.py:229 +msgid "Updated Before" +msgstr "更新之前" + +#: order/api.py:233 +msgid "Updated After" +msgstr "更新之後" + +#: order/api.py:284 msgid "Has Pricing" msgstr "有定價" -#: order/api.py:332 order/api.py:818 order/api.py:1495 +#: order/api.py:337 order/api.py:822 order/api.py:1522 msgid "Completed Before" msgstr "完成時間早於" -#: order/api.py:336 order/api.py:822 order/api.py:1499 +#: order/api.py:341 order/api.py:826 order/api.py:1526 msgid "Completed After" msgstr "完成時間晚於" -#: order/api.py:342 order/api.py:346 +#: order/api.py:347 order/api.py:351 msgid "External Build Order" msgstr "外部生產工單" -#: order/api.py:532 order/api.py:919 order/api.py:1175 order/models.py:1923 -#: order/models.py:2050 order/models.py:2100 order/models.py:2280 -#: order/models.py:2478 order/models.py:3000 order/models.py:3066 +#: order/api.py:536 order/api.py:922 order/api.py:1176 order/models.py:1940 +#: order/models.py:2066 order/models.py:2118 order/models.py:2298 +#: order/models.py:2487 order/models.py:3016 order/models.py:3082 msgid "Order" msgstr "訂單" -#: order/api.py:536 order/api.py:987 +#: order/api.py:540 order/api.py:990 msgid "Order Complete" msgstr "訂單完成" -#: order/api.py:568 order/api.py:572 order/serializers.py:756 +#: order/api.py:572 order/api.py:576 order/serializers.py:714 msgid "Internal Part" msgstr "內部零件" -#: order/api.py:590 +#: order/api.py:594 msgid "Order Pending" msgstr "訂單待定" -#: order/api.py:972 +#: order/api.py:975 msgid "Completed" msgstr "已完成" -#: order/api.py:1228 +#: order/api.py:1229 msgid "Has Shipment" msgstr "已出貨" -#: order/api.py:1794 order/models.py:553 order/models.py:1924 -#: order/models.py:2051 +#: order/api.py:1437 +msgid "Shipment not found" +msgstr "" + +#: order/api.py:1833 order/models.py:564 order/models.py:1941 +#: order/models.py:2067 #: report/templates/report/inventree_purchase_order_report.html:14 #: stock/serializers.py:129 templates/email/overdue_purchase_order.html:15 msgid "Purchase Order" msgstr "採購訂單" -#: order/api.py:1796 order/models.py:1252 order/models.py:2101 -#: order/models.py:2281 order/models.py:2479 +#: order/api.py:1835 order/models.py:1265 order/models.py:2119 +#: order/models.py:2299 order/models.py:2488 #: report/templates/report/inventree_build_order_report.html:135 #: report/templates/report/inventree_sales_order_report.html:14 #: report/templates/report/inventree_sales_order_shipment_report.html:15 @@ -4764,8 +4825,8 @@ msgstr "採購訂單" msgid "Sales Order" msgstr "銷售訂單" -#: order/api.py:1798 order/models.py:2650 order/models.py:3001 -#: order/models.py:3067 +#: order/api.py:1837 order/models.py:2659 order/models.py:3017 +#: order/models.py:3083 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4781,722 +4842,742 @@ msgstr "總價格" msgid "Total price for this order" msgstr "此訂單的總價" -#: order/models.py:96 order/serializers.py:78 +#: order/models.py:96 order/serializers.py:61 msgid "Order Currency" msgstr "訂單貨幣" -#: order/models.py:99 order/serializers.py:79 +#: order/models.py:99 order/serializers.py:62 msgid "Currency for this order (leave blank to use company default)" msgstr "此訂單的貨幣 (留空以使用公司默認值)" -#: order/models.py:325 +#: order/models.py:326 msgid "This order is locked and cannot be modified" msgstr "此訂單已鎖定,無法修改" -#: order/models.py:377 +#: order/models.py:380 msgid "Contact does not match selected company" msgstr "聯繫人與所選公司不匹配" -#: order/models.py:384 +#: order/models.py:387 msgid "Start date must be before target date" msgstr "開始日期必須早於目標日期" -#: order/models.py:391 +#: order/models.py:394 msgid "Address does not match selected company" -msgstr "" +msgstr "地址不符合選定的公司" -#: order/models.py:444 +#: order/models.py:448 msgid "Order description (optional)" msgstr "訂單描述 (可選)" -#: order/models.py:453 order/models.py:1807 +#: order/models.py:457 order/models.py:1822 msgid "Select project code for this order" msgstr "為此訂單選擇項目編碼" -#: order/models.py:459 order/models.py:1788 order/models.py:2345 +#: order/models.py:463 order/models.py:1803 order/models.py:2363 msgid "Link to external page" msgstr "鏈接到外部頁面" -#: order/models.py:466 +#: order/models.py:470 msgid "Start date" msgstr "開始日期" -#: order/models.py:467 +#: order/models.py:471 msgid "Scheduled start date for this order" msgstr "此訂單的預定開始日期" -#: order/models.py:473 order/models.py:1795 order/serializers.py:317 +#: order/models.py:477 order/models.py:1810 order/serializers.py:294 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "預計日期" -#: order/models.py:475 +#: order/models.py:479 msgid "Expected date for order delivery. Order will be overdue after this date." msgstr "訂單交付的預期日期。訂單將在此日期後過期。" -#: order/models.py:495 +#: order/models.py:499 msgid "Issue Date" msgstr "簽發日期" -#: order/models.py:496 +#: order/models.py:500 msgid "Date order was issued" msgstr "訂單發出日期" -#: order/models.py:504 +#: order/models.py:506 +msgid "Updated At" +msgstr "更新於" + +#: order/models.py:515 msgid "User or group responsible for this order" msgstr "負責此訂單的用户或組" -#: order/models.py:515 +#: order/models.py:526 msgid "Point of contact for this order" msgstr "此訂單的聯繫人" -#: order/models.py:525 +#: order/models.py:536 msgid "Company address for this order" msgstr "此訂單的公司地址" -#: order/models.py:616 order/models.py:1313 +#: order/models.py:629 order/models.py:1328 msgid "Order reference" msgstr "訂單參考" -#: order/models.py:625 order/models.py:1337 order/models.py:2738 -#: stock/serializers.py:559 stock/serializers.py:988 users/models.py:542 +#: order/models.py:638 order/models.py:1352 order/models.py:2749 +#: stock/serializers.py:553 stock/serializers.py:994 users/models.py:542 msgid "Status" msgstr "狀態" -#: order/models.py:626 +#: order/models.py:639 msgid "Purchase order status" msgstr "採購訂單狀態" -#: order/models.py:641 +#: order/models.py:654 msgid "Company from which the items are being ordered" msgstr "訂購物品的公司" -#: order/models.py:652 +#: order/models.py:665 msgid "Supplier Reference" msgstr "供應商參考" -#: order/models.py:653 +#: order/models.py:666 msgid "Supplier order reference code" msgstr "供應商訂單參考代碼" -#: order/models.py:662 +#: order/models.py:675 msgid "received by" msgstr "接收人" -#: order/models.py:669 order/models.py:2753 +#: order/models.py:682 order/models.py:2764 msgid "Date order was completed" msgstr "訂單完成日期" -#: order/models.py:678 order/models.py:1982 +#: order/models.py:691 order/models.py:1999 msgid "Destination" msgstr "目的地" -#: order/models.py:679 order/models.py:1986 +#: order/models.py:692 order/models.py:2003 msgid "Destination for received items" msgstr "收到項目的存放目的地" -#: order/models.py:725 +#: order/models.py:738 msgid "Part supplier must match PO supplier" msgstr "零件供應商必須與採購訂單供應商匹配" -#: order/models.py:995 +#: order/models.py:1008 msgid "Line item does not match purchase order" msgstr "行項目與採購訂單不匹配" -#: order/models.py:998 +#: order/models.py:1011 msgid "Line item is missing a linked part" msgstr "行項目缺少關聯零件" -#: order/models.py:1012 +#: order/models.py:1025 msgid "Quantity must be a positive number" msgstr "數量必須是正數" -#: order/models.py:1324 order/models.py:2725 stock/models.py:1078 -#: stock/models.py:1079 stock/serializers.py:1322 +#: order/models.py:1339 order/models.py:2736 stock/models.py:1085 +#: stock/models.py:1086 stock/serializers.py:1355 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "客户" -#: order/models.py:1325 +#: order/models.py:1340 msgid "Company to which the items are being sold" msgstr "出售物品的公司" -#: order/models.py:1338 +#: order/models.py:1353 msgid "Sales order status" msgstr "銷售訂單狀態" -#: order/models.py:1349 order/models.py:2745 +#: order/models.py:1364 order/models.py:2756 msgid "Customer Reference " msgstr "客户參考 " -#: order/models.py:1350 order/models.py:2746 +#: order/models.py:1365 order/models.py:2757 msgid "Customer order reference code" msgstr "客户訂單參考代碼" -#: order/models.py:1354 order/models.py:2297 +#: order/models.py:1369 order/models.py:2315 msgid "Shipment Date" msgstr "發貨日期" -#: order/models.py:1363 +#: order/models.py:1378 msgid "shipped by" msgstr "發貨人" -#: order/models.py:1414 +#: order/models.py:1429 msgid "Order is already complete" msgstr "訂單已完成" -#: order/models.py:1417 +#: order/models.py:1432 msgid "Order is already cancelled" msgstr "訂單已取消" -#: order/models.py:1421 +#: order/models.py:1436 msgid "Only an open order can be marked as complete" msgstr "只有未結訂單才能標記為已完成" -#: order/models.py:1425 +#: order/models.py:1440 msgid "Order cannot be completed as there are incomplete shipments" msgstr "由於發貨不完整,訂單無法完成" -#: order/models.py:1430 +#: order/models.py:1445 msgid "Order cannot be completed as there are incomplete allocations" msgstr "訂單無法完成,因為仍有未完成的分配" -#: order/models.py:1439 +#: order/models.py:1454 msgid "Order cannot be completed as there are incomplete line items" msgstr "訂單無法完成,因為行項目不完整" -#: order/models.py:1734 order/models.py:1750 +#: order/models.py:1749 order/models.py:1765 msgid "The order is locked and cannot be modified" msgstr "此訂單已鎖定,無法修改" -#: order/models.py:1758 +#: order/models.py:1773 msgid "Item quantity" msgstr "項目數量" -#: order/models.py:1775 +#: order/models.py:1790 msgid "Line item reference" msgstr "行項目參考" -#: order/models.py:1782 +#: order/models.py:1797 msgid "Line item notes" msgstr "行項目註釋" -#: order/models.py:1797 +#: order/models.py:1812 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "此行項目的目標日期 (留空以使用訂單中的目標日期)" -#: order/models.py:1827 +#: order/models.py:1842 msgid "Line item description (optional)" msgstr "行項目描述 (可選)" -#: order/models.py:1834 +#: order/models.py:1849 msgid "Additional context for this line" msgstr "此行的附加上下文" -#: order/models.py:1844 +#: order/models.py:1859 msgid "Unit price" msgstr "單位價格" -#: order/models.py:1863 +#: order/models.py:1878 msgid "Purchase Order Line Item" msgstr "採購訂單行項目" -#: order/models.py:1890 +#: order/models.py:1907 msgid "Supplier part must match supplier" msgstr "供應商零件必須與供應商匹配" -#: order/models.py:1895 +#: order/models.py:1912 msgid "Build order must be marked as external" msgstr "生產工單必須標記為外部" -#: order/models.py:1902 +#: order/models.py:1919 msgid "Build orders can only be linked to assembly parts" msgstr "生產工單只能連結到組裝零件" -#: order/models.py:1908 +#: order/models.py:1925 msgid "Build order part must match line item part" msgstr "生產工單的零件必須與行項目的零件一致" -#: order/models.py:1943 +#: order/models.py:1960 msgid "Supplier part" msgstr "供應商零件" -#: order/models.py:1950 +#: order/models.py:1967 msgid "Received" msgstr "已接收" -#: order/models.py:1951 +#: order/models.py:1968 msgid "Number of items received" msgstr "收到的物品數量" -#: order/models.py:1959 stock/models.py:1201 stock/serializers.py:637 +#: order/models.py:1976 stock/models.py:1208 stock/serializers.py:643 msgid "Purchase Price" msgstr "採購價格" -#: order/models.py:1960 +#: order/models.py:1977 msgid "Unit purchase price" msgstr "每單位的採購價格" -#: order/models.py:1976 +#: order/models.py:1993 msgid "External Build Order to be fulfilled by this line item" msgstr "由此行項目履行的外部生產工單" -#: order/models.py:2039 +#: order/models.py:2055 msgid "Purchase Order Extra Line" msgstr "採購訂單附加行" -#: order/models.py:2068 +#: order/models.py:2084 msgid "Sales Order Line Item" msgstr "銷售訂單行項目" -#: order/models.py:2093 +#: order/models.py:2111 msgid "Only salable parts can be assigned to a sales order" msgstr "只有可銷售的零件才能分配給銷售訂單" -#: order/models.py:2119 +#: order/models.py:2137 msgid "Sale Price" msgstr "售出價格" -#: order/models.py:2120 +#: order/models.py:2138 msgid "Unit sale price" msgstr "單位售出價格" -#: order/models.py:2129 order/status_codes.py:50 +#: order/models.py:2147 order/status_codes.py:50 msgid "Shipped" msgstr "已配送" -#: order/models.py:2130 +#: order/models.py:2148 msgid "Shipped quantity" msgstr "發貨數量" -#: order/models.py:2241 +#: order/models.py:2259 msgid "Sales Order Shipment" msgstr "銷售訂單發貨" -#: order/models.py:2254 +#: order/models.py:2272 msgid "Shipment address must match the customer" -msgstr "" +msgstr "配送地址必須跟客戶相符" -#: order/models.py:2290 +#: order/models.py:2308 msgid "Shipping address for this shipment" -msgstr "" +msgstr "配送的採購地址" -#: order/models.py:2298 +#: order/models.py:2316 msgid "Date of shipment" msgstr "發貨日期" -#: order/models.py:2304 +#: order/models.py:2322 msgid "Delivery Date" msgstr "送達日期" -#: order/models.py:2305 +#: order/models.py:2323 msgid "Date of delivery of shipment" msgstr "裝運交貨日期" -#: order/models.py:2313 +#: order/models.py:2331 msgid "Checked By" msgstr "審核人" -#: order/models.py:2314 +#: order/models.py:2332 msgid "User who checked this shipment" msgstr "檢查此裝運的用户" -#: order/models.py:2321 order/models.py:2575 order/serializers.py:1725 -#: order/serializers.py:1849 +#: order/models.py:2339 order/models.py:2584 order/serializers.py:1690 +#: order/serializers.py:1814 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "配送" -#: order/models.py:2322 +#: order/models.py:2340 msgid "Shipment number" msgstr "配送單號" -#: order/models.py:2330 +#: order/models.py:2348 msgid "Tracking Number" msgstr "跟蹤單號" -#: order/models.py:2331 +#: order/models.py:2349 msgid "Shipment tracking information" msgstr "配送跟蹤信息" -#: order/models.py:2338 +#: order/models.py:2356 msgid "Invoice Number" msgstr "發票編號" -#: order/models.py:2339 +#: order/models.py:2357 msgid "Reference number for associated invoice" msgstr "相關發票的參考號" -#: order/models.py:2378 +#: order/models.py:2396 msgid "Shipment has already been sent" msgstr "貨物已發出" -#: order/models.py:2381 +#: order/models.py:2399 msgid "Shipment has no allocated stock items" msgstr "發貨沒有分配庫存項目" -#: order/models.py:2388 +#: order/models.py:2406 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2467 +#: order/models.py:2476 msgid "Sales Order Extra Line" msgstr "銷售訂單加行" -#: order/models.py:2496 +#: order/models.py:2505 msgid "Sales Order Allocation" msgstr "銷售訂單分配" -#: order/models.py:2519 order/models.py:2521 +#: order/models.py:2528 order/models.py:2530 msgid "Stock item has not been assigned" msgstr "庫存項目尚未分配" -#: order/models.py:2528 +#: order/models.py:2537 msgid "Cannot allocate stock item to a line with a different part" msgstr "無法將庫存項目分配給具有不同零件的行" -#: order/models.py:2531 +#: order/models.py:2540 msgid "Cannot allocate stock to a line without a part" msgstr "無法將庫存分配給沒有零件的生產線" -#: order/models.py:2534 +#: order/models.py:2543 msgid "Allocation quantity cannot exceed stock quantity" msgstr "分配數量不能超過庫存數量" -#: order/models.py:2553 order/serializers.py:1595 +#: order/models.py:2559 +msgid "Allocation quantity must be greater than zero" +msgstr "分配的數量必須大於零" + +#: order/models.py:2562 order/serializers.py:1560 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化庫存項目的數量必須為1" -#: order/models.py:2556 +#: order/models.py:2565 msgid "Sales order does not match shipment" msgstr "銷售訂單與發貨不匹配" -#: order/models.py:2557 plugin/base/barcodes/api.py:642 +#: order/models.py:2566 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "發貨與銷售訂單不匹配" -#: order/models.py:2565 +#: order/models.py:2574 msgid "Line" msgstr "行" -#: order/models.py:2576 +#: order/models.py:2585 msgid "Sales order shipment reference" msgstr "銷售訂單發貨參考" -#: order/models.py:2589 order/models.py:3008 +#: order/models.py:2598 order/models.py:3024 msgid "Item" msgstr "項目" -#: order/models.py:2590 +#: order/models.py:2599 msgid "Select stock item to allocate" msgstr "選擇要分配的庫存項目" -#: order/models.py:2599 +#: order/models.py:2608 msgid "Enter stock allocation quantity" msgstr "輸入庫存分配數量" -#: order/models.py:2714 +#: order/models.py:2725 msgid "Return Order reference" msgstr "退貨訂單參考" -#: order/models.py:2726 +#: order/models.py:2737 msgid "Company from which items are being returned" msgstr "退回物品的公司" -#: order/models.py:2739 +#: order/models.py:2750 msgid "Return order status" msgstr "退貨訂單狀態" -#: order/models.py:2966 +#: order/models.py:2982 msgid "Return Order Line Item" msgstr "退貨訂單行項目" -#: order/models.py:2979 +#: order/models.py:2995 msgid "Stock item must be specified" msgstr "必須指定庫存項目" -#: order/models.py:2983 +#: order/models.py:2999 msgid "Return quantity exceeds stock quantity" msgstr "退回數量超過庫存數量" -#: order/models.py:2988 +#: order/models.py:3004 msgid "Return quantity must be greater than zero" msgstr "退回數量必須大於零" -#: order/models.py:2993 +#: order/models.py:3009 msgid "Invalid quantity for serialized stock item" msgstr "序列化庫存項目的數量無效" -#: order/models.py:3009 +#: order/models.py:3025 msgid "Select item to return from customer" msgstr "選擇要從客户處退回的商品" -#: order/models.py:3024 +#: order/models.py:3040 msgid "Received Date" msgstr "接收日期" -#: order/models.py:3025 -msgid "The date this this return item was received" -msgstr "收到此退貨的日期" +#: order/models.py:3041 +msgid "The date this return item was received" +msgstr "" -#: order/models.py:3037 +#: order/models.py:3053 msgid "Outcome" msgstr "結果" -#: order/models.py:3038 +#: order/models.py:3054 msgid "Outcome for this line item" msgstr "該行項目的結果" -#: order/models.py:3045 +#: order/models.py:3061 msgid "Cost associated with return or repair for this line item" msgstr "與此行項目的退貨或維修相關的成本" -#: order/models.py:3055 +#: order/models.py:3071 msgid "Return Order Extra Line" msgstr "退貨訂單附加行" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "Order ID" msgstr "訂單ID" -#: order/serializers.py:92 +#: order/serializers.py:75 msgid "ID of the order to duplicate" msgstr "要複製的訂單ID" -#: order/serializers.py:98 +#: order/serializers.py:81 msgid "Copy Lines" msgstr "複製行" -#: order/serializers.py:99 +#: order/serializers.py:82 msgid "Copy line items from the original order" msgstr "從原始訂單複製行項目" -#: order/serializers.py:105 +#: order/serializers.py:88 msgid "Copy Extra Lines" msgstr "複製額外行" -#: order/serializers.py:106 +#: order/serializers.py:89 msgid "Copy extra line items from the original order" msgstr "從原始訂單複製額外的行項目" -#: order/serializers.py:121 +#: order/serializers.py:95 part/serializers.py:413 +msgid "Copy Parameters" +msgstr "複製參數" + +#: order/serializers.py:96 +msgid "Copy order parameters from the original order" +msgstr "" + +#: order/serializers.py:111 #: report/templates/report/inventree_purchase_order_report.html:29 #: report/templates/report/inventree_return_order_report.html:19 #: report/templates/report/inventree_sales_order_report.html:22 msgid "Line Items" msgstr "行項目" -#: order/serializers.py:126 +#: order/serializers.py:116 msgid "Completed Lines" msgstr "已完成行項目" -#: order/serializers.py:199 +#: order/serializers.py:172 msgid "Duplicate Order" msgstr "複製訂單" -#: order/serializers.py:200 +#: order/serializers.py:173 msgid "Specify options for duplicating this order" msgstr "指定複製此訂單的選項" -#: order/serializers.py:278 +#: order/serializers.py:252 msgid "Invalid order ID" msgstr "訂單ID不正確" -#: order/serializers.py:477 +#: order/serializers.py:430 msgid "Supplier Name" msgstr "供應商名稱" -#: order/serializers.py:521 +#: order/serializers.py:475 msgid "Order cannot be cancelled" msgstr "訂單不能取消" -#: order/serializers.py:536 order/serializers.py:1616 +#: order/serializers.py:490 order/serializers.py:1581 msgid "Allow order to be closed with incomplete line items" msgstr "允許關閉行項目不完整的訂單" -#: order/serializers.py:546 order/serializers.py:1626 +#: order/serializers.py:500 order/serializers.py:1591 msgid "Order has incomplete line items" msgstr "訂單中的行項目不完整" -#: order/serializers.py:676 +#: order/serializers.py:620 msgid "Order is not open" msgstr "訂單未打開" -#: order/serializers.py:703 +#: order/serializers.py:649 msgid "Auto Pricing" msgstr "自動定價" -#: order/serializers.py:705 +#: order/serializers.py:651 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根據供應商零件數據自動計算採購價格" -#: order/serializers.py:715 +#: order/serializers.py:665 msgid "Purchase price currency" msgstr "購買價格貨幣" -#: order/serializers.py:729 +#: order/serializers.py:687 msgid "Merge Items" msgstr "合併項目" -#: order/serializers.py:731 +#: order/serializers.py:689 msgid "Merge items with the same part, destination and target date into one line item" msgstr "將具有相同零件、目的地和目標日期的項目合併到一個行項目中" -#: order/serializers.py:738 part/serializers.py:471 +#: order/serializers.py:696 part/serializers.py:482 msgid "SKU" msgstr "庫存量單位" -#: order/serializers.py:752 part/models.py:1177 part/serializers.py:337 +#: order/serializers.py:710 part/models.py:1157 part/serializers.py:348 msgid "Internal Part Number" msgstr "內部零件編號" -#: order/serializers.py:760 +#: order/serializers.py:718 msgid "Internal Part Name" msgstr "內部零件名稱" -#: order/serializers.py:776 +#: order/serializers.py:734 msgid "Supplier part must be specified" msgstr "必須指定供應商零件" -#: order/serializers.py:779 +#: order/serializers.py:737 msgid "Purchase order must be specified" msgstr "必須指定採購訂單" -#: order/serializers.py:787 +#: order/serializers.py:745 msgid "Supplier must match purchase order" msgstr "供應商必須匹配採購訂單" -#: order/serializers.py:788 +#: order/serializers.py:746 msgid "Purchase order must match supplier" msgstr "採購訂單必須與供應商匹配" -#: order/serializers.py:836 order/serializers.py:1696 +#: order/serializers.py:794 order/serializers.py:1661 msgid "Line Item" msgstr "行項目" -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2060 +#: order/serializers.py:803 order/serializers.py:943 order/serializers.py:2024 msgid "Select destination location for received items" msgstr "為收到的物品選擇目的地位置" -#: order/serializers.py:861 +#: order/serializers.py:819 msgid "Enter batch code for incoming stock items" msgstr "輸入入庫項目的批號" -#: order/serializers.py:868 stock/models.py:1160 +#: order/serializers.py:826 stock/models.py:1167 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有效期至" -#: order/serializers.py:869 +#: order/serializers.py:827 msgid "Enter expiry date for incoming stock items" msgstr "輸入入庫庫存項目的到期日" -#: order/serializers.py:877 +#: order/serializers.py:835 msgid "Enter serial numbers for incoming stock items" msgstr "輸入入庫庫存項目的序列號" -#: order/serializers.py:887 +#: order/serializers.py:845 msgid "Override packaging information for incoming stock items" msgstr "覆蓋傳入庫存項目的包裝資料" -#: order/serializers.py:895 order/serializers.py:2065 +#: order/serializers.py:853 order/serializers.py:2029 msgid "Additional note for incoming stock items" msgstr "傳入庫存項目的附加説明" -#: order/serializers.py:902 +#: order/serializers.py:860 msgid "Barcode" msgstr "條形碼" -#: order/serializers.py:903 +#: order/serializers.py:861 msgid "Scanned barcode" msgstr "掃描條形碼" -#: order/serializers.py:919 +#: order/serializers.py:877 msgid "Barcode is already in use" msgstr "條形碼已被使用" -#: order/serializers.py:1002 order/serializers.py:2084 +#: order/serializers.py:960 order/serializers.py:2048 msgid "Line items must be provided" msgstr "必須提供行項目" -#: order/serializers.py:1021 +#: order/serializers.py:979 msgid "Destination location must be specified" msgstr "必須指定目標位置" -#: order/serializers.py:1028 +#: order/serializers.py:986 msgid "Supplied barcode values must be unique" msgstr "提供的條形碼值必須是唯一的" -#: order/serializers.py:1135 +#: order/serializers.py:1107 msgid "Shipments" msgstr "配送紀錄" -#: order/serializers.py:1139 +#: order/serializers.py:1111 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1307 +#: order/serializers.py:1115 +msgid "Allocated Lines" +msgstr "" + +#: order/serializers.py:1294 msgid "Sale price currency" msgstr "售出價格貨幣" -#: order/serializers.py:1353 +#: order/serializers.py:1337 msgid "Allocated Items" msgstr "已分配項目" -#: order/serializers.py:1498 +#: order/serializers.py:1492 msgid "No shipment details provided" msgstr "未提供裝運詳細信息" -#: order/serializers.py:1559 order/serializers.py:1705 +#: order/serializers.py:1524 order/serializers.py:1670 msgid "Line item is not associated with this order" msgstr "行項目與此訂單不關聯" -#: order/serializers.py:1578 +#: order/serializers.py:1543 msgid "Quantity must be positive" msgstr "數量必須為正" -#: order/serializers.py:1715 +#: order/serializers.py:1680 msgid "Enter serial numbers to allocate" msgstr "輸入要分配的序列號" -#: order/serializers.py:1737 order/serializers.py:1857 +#: order/serializers.py:1702 order/serializers.py:1822 msgid "Shipment has already been shipped" msgstr "貨物已發出" -#: order/serializers.py:1740 order/serializers.py:1860 +#: order/serializers.py:1705 order/serializers.py:1825 msgid "Shipment is not associated with this order" msgstr "發貨與此訂單無關" -#: order/serializers.py:1795 +#: order/serializers.py:1760 msgid "No match found for the following serial numbers" msgstr "未找到以下序列號的匹配項" -#: order/serializers.py:1802 +#: order/serializers.py:1767 msgid "The following serial numbers are unavailable" msgstr "以下序列號不可用" -#: order/serializers.py:2026 +#: order/serializers.py:1990 msgid "Return order line item" msgstr "退貨訂單行項目" -#: order/serializers.py:2036 +#: order/serializers.py:2000 msgid "Line item does not match return order" msgstr "行項目與退貨訂單不匹配" -#: order/serializers.py:2039 +#: order/serializers.py:2003 msgid "Line item has already been received" msgstr "行項目已收到" -#: order/serializers.py:2076 +#: order/serializers.py:2040 msgid "Items can only be received against orders which are in progress" msgstr "只能根據正在進行的訂單接收物品" -#: order/serializers.py:2141 +#: order/serializers.py:2112 msgid "Quantity to return" msgstr "退回數量" -#: order/serializers.py:2157 +#: order/serializers.py:2129 msgid "Line price currency" msgstr "行價格貨幣" @@ -5532,1174 +5613,1226 @@ msgstr "退款" msgid "Reject" msgstr "拒絕" -#: order/tasks.py:47 +#: order/tasks.py:48 msgid "Overdue Purchase Order" msgstr "逾期採購訂單" -#: order/tasks.py:52 +#: order/tasks.py:53 #, python-brace-format msgid "Purchase order {po} is now overdue" msgstr "採購訂單 {po} 已逾期" -#: order/tasks.py:117 +#: order/tasks.py:118 msgid "Overdue Sales Order" msgstr "逾期銷售訂單" -#: order/tasks.py:122 +#: order/tasks.py:123 #, python-brace-format msgid "Sales order {so} is now overdue" msgstr "銷售訂單 {so} 已逾期" -#: order/tasks.py:184 +#: order/tasks.py:185 msgid "Overdue Return Order" msgstr "逾期退貨訂單" -#: order/tasks.py:189 +#: order/tasks.py:190 #, python-brace-format msgid "Return order {ro} is now overdue" msgstr "退貨訂單 {ro} 已逾期" -#: part/api.py:103 +#: part/api.py:88 msgid "Starred" msgstr "已加星標" -#: part/api.py:105 +#: part/api.py:90 msgid "Filter by starred categories" msgstr "按星標類別篩選" -#: part/api.py:122 stock/api.py:288 +#: part/api.py:107 stock/api.py:287 msgid "Depth" msgstr "深度" -#: part/api.py:122 +#: part/api.py:107 msgid "Filter by category depth" msgstr "按類別深度篩選" -#: part/api.py:140 stock/api.py:306 +#: part/api.py:125 stock/api.py:305 msgid "Top Level" msgstr "頂級" -#: part/api.py:142 +#: part/api.py:127 msgid "Filter by top-level categories" msgstr "按頂級類別篩選" -#: part/api.py:155 stock/api.py:321 +#: part/api.py:140 stock/api.py:320 msgid "Cascade" msgstr "級聯" -#: part/api.py:157 +#: part/api.py:142 msgid "Include sub-categories in filtered results" msgstr "在篩選結果中包含子類別" -#: part/api.py:177 +#: part/api.py:162 msgid "Parent" msgstr "父類" -#: part/api.py:179 +#: part/api.py:164 msgid "Filter by parent category" msgstr "按父類別篩選" -#: part/api.py:214 +#: part/api.py:199 msgid "Exclude sub-categories under the specified category" msgstr "排除指定類別下的子類別" -#: part/api.py:440 +#: part/api.py:424 msgid "Has Results" msgstr "有結果" -#: part/api.py:661 +#: part/api.py:653 msgid "Is Variant" msgstr "為變體" -#: part/api.py:669 +#: part/api.py:661 msgid "Is Revision" msgstr "是修訂版本" -#: part/api.py:679 +#: part/api.py:671 msgid "Has Revisions" msgstr "有修訂版本" -#: part/api.py:860 +#: part/api.py:852 msgid "BOM Valid" msgstr "物料清單合規" -#: part/api.py:969 +#: part/api.py:961 msgid "Cascade Categories" msgstr "" -#: part/api.py:970 +#: part/api.py:962 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:976 +#: part/api.py:968 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1258 +#: part/api.py:1280 +msgid "Assembly part is active" +msgstr "" + +#: part/api.py:1284 +msgid "Assembly part is trackable" +msgstr "" + +#: part/api.py:1288 msgid "Assembly part is testable" msgstr "裝配部份是可測試的" -#: part/api.py:1267 +#: part/api.py:1293 +msgid "Component part is active" +msgstr "" + +#: part/api.py:1297 +msgid "Component part is trackable" +msgstr "" + +#: part/api.py:1301 msgid "Component part is testable" msgstr "組件部份是可測試的" -#: part/api.py:1336 +#: part/api.py:1305 +msgid "Component part is an assembly" +msgstr "" + +#: part/api.py:1309 +msgid "Component part is virtual" +msgstr "" + +#: part/api.py:1313 +msgid "Has available stock" +msgstr "" + +#: part/api.py:1370 msgid "Uses" msgstr "使用" -#: part/models.py:93 part/models.py:436 +#: part/models.py:92 part/models.py:413 #: templates/email/part_event_notification.html:16 msgid "Part Category" msgstr "零件類別" -#: part/models.py:94 users/ruleset.py:27 +#: part/models.py:93 users/ruleset.py:27 msgid "Part Categories" msgstr "零件類別" -#: part/models.py:112 part/models.py:1213 +#: part/models.py:111 part/models.py:1193 msgid "Default Location" msgstr "默認位置" -#: part/models.py:113 +#: part/models.py:112 msgid "Default location for parts in this category" msgstr "此類別零件的默認庫存地點" -#: part/models.py:118 stock/models.py:216 +#: part/models.py:117 stock/models.py:204 msgid "Structural" msgstr "結構性" -#: part/models.py:120 +#: part/models.py:119 msgid "Parts may not be directly assigned to a structural category, but may be assigned to child categories." msgstr "零件可能無法直接分配到結構類別,但可以分配到子類別。" -#: part/models.py:129 +#: part/models.py:128 msgid "Default keywords" msgstr "默認關鍵字" -#: part/models.py:130 +#: part/models.py:129 msgid "Default keywords for parts in this category" msgstr "此類別零件的默認關鍵字" -#: part/models.py:137 stock/models.py:97 stock/models.py:198 +#: part/models.py:136 stock/models.py:99 stock/models.py:186 msgid "Icon" msgstr "圖標" -#: part/models.py:138 part/serializers.py:147 part/serializers.py:166 -#: stock/models.py:199 +#: part/models.py:137 part/serializers.py:158 part/serializers.py:177 +#: stock/models.py:187 msgid "Icon (optional)" msgstr "圖標(可選)" -#: part/models.py:182 +#: part/models.py:181 msgid "You cannot make this part category structural because some parts are already assigned to it!" msgstr "您不能使這個零件類別結構化,因為有些零件已經分配給了它!" -#: part/models.py:392 +#: part/models.py:369 msgid "Part Category Parameter Template" msgstr "零件類別參數模板" -#: part/models.py:448 +#: part/models.py:425 msgid "Default Value" msgstr "默認值" -#: part/models.py:449 +#: part/models.py:426 msgid "Default Parameter Value" msgstr "默認參數值" -#: part/models.py:551 part/serializers.py:118 users/ruleset.py:28 +#: part/models.py:528 part/serializers.py:120 users/ruleset.py:28 msgid "Parts" msgstr "零件" -#: part/models.py:597 +#: part/models.py:574 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:602 +#: part/models.py:579 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:613 +#: part/models.py:590 msgid "Cannot delete this part as it is locked" msgstr "無法刪除這個零件,因為它已被鎖定" -#: part/models.py:616 +#: part/models.py:593 msgid "Cannot delete this part as it is still active" msgstr "無法刪除這個零件,因為它仍然處於活動狀態" -#: part/models.py:621 +#: part/models.py:598 msgid "Cannot delete this part as it is used in an assembly" msgstr "無法刪除這個零件,因為它被使用在了裝配中" -#: part/models.py:704 part/models.py:711 +#: part/models.py:682 part/models.py:689 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "零件 \"{self}\" 不能用在 \"{parent}\" 的物料清單 (遞歸)" -#: part/models.py:723 +#: part/models.py:701 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "零件 \"{parent}\" 被使用在了 \"{self}\" 的物料清單 (遞歸)" -#: part/models.py:790 +#: part/models.py:768 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "內部零件號必須匹配正則表達式 {pattern}" -#: part/models.py:798 +#: part/models.py:776 msgid "Part cannot be a revision of itself" msgstr "零件不能是對自身的修訂" -#: part/models.py:805 +#: part/models.py:783 msgid "Cannot make a revision of a part which is already a revision" msgstr "無法對已經是修訂版本的零件進行修訂" -#: part/models.py:812 +#: part/models.py:790 msgid "Revision code must be specified" msgstr "必須指定修訂代碼" -#: part/models.py:819 +#: part/models.py:797 msgid "Revisions are only allowed for assembly parts" msgstr "修訂僅對裝配零件允許" -#: part/models.py:826 +#: part/models.py:804 msgid "Cannot make a revision of a template part" msgstr "無法對模版零件進行修訂" -#: part/models.py:832 +#: part/models.py:810 msgid "Parent part must point to the same template" msgstr "上級零件必須指向相同的模版" -#: part/models.py:929 +#: part/models.py:907 msgid "Stock item with this serial number already exists" msgstr "該序列號庫存項己存在" -#: part/models.py:1059 +#: part/models.py:1037 msgid "Duplicate IPN not allowed in part settings" msgstr "在零件設置中不允許重複的內部零件號" -#: part/models.py:1071 +#: part/models.py:1050 msgid "Duplicate part revision already exists." msgstr "重複的零件修訂版本已經存在。" -#: part/models.py:1080 +#: part/models.py:1060 msgid "Part with this Name, IPN and Revision already exists." msgstr "有這個名字,內部零件號,和修訂版本的零件已經存在" -#: part/models.py:1095 +#: part/models.py:1075 msgid "Parts cannot be assigned to structural part categories!" msgstr "零件不能分配到結構性零件類別!" -#: part/models.py:1127 +#: part/models.py:1107 msgid "Part name" msgstr "零件名稱" -#: part/models.py:1132 +#: part/models.py:1112 msgid "Is Template" msgstr "是模板" -#: part/models.py:1133 +#: part/models.py:1113 msgid "Is this part a template part?" msgstr "這個零件是一個模版零件嗎?" -#: part/models.py:1143 +#: part/models.py:1123 msgid "Is this part a variant of another part?" msgstr "這個零件是另一零件的變體嗎?" -#: part/models.py:1144 +#: part/models.py:1124 msgid "Variant Of" msgstr "變體" -#: part/models.py:1151 +#: part/models.py:1131 msgid "Part description (optional)" msgstr "零件描述(可選)" -#: part/models.py:1158 +#: part/models.py:1138 msgid "Keywords" msgstr "關鍵詞" -#: part/models.py:1159 +#: part/models.py:1139 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索結果可見性的零件關鍵字" -#: part/models.py:1169 +#: part/models.py:1149 msgid "Part category" msgstr "零件類別" -#: part/models.py:1176 part/serializers.py:814 +#: part/models.py:1156 part/serializers.py:819 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "內部零件號 IPN" -#: part/models.py:1184 +#: part/models.py:1164 msgid "Part revision or version number" msgstr "零件修訂版本或版本號" -#: part/models.py:1185 report/models.py:228 +#: part/models.py:1165 report/models.py:228 msgid "Revision" msgstr "版本" -#: part/models.py:1194 +#: part/models.py:1174 msgid "Is this part a revision of another part?" msgstr "這零件是另一零件的修訂版本嗎?" -#: part/models.py:1195 +#: part/models.py:1175 msgid "Revision Of" msgstr "修訂版本" -#: part/models.py:1211 +#: part/models.py:1191 msgid "Where is this item normally stored?" msgstr "該物品通常存放在哪裏?" -#: part/models.py:1257 -msgid "Default Supplier" -msgstr "默認供應商" - -#: part/models.py:1258 -msgid "Default supplier part" -msgstr "默認供應商零件" - -#: part/models.py:1265 +#: part/models.py:1228 msgid "Default Expiry" msgstr "默認到期" -#: part/models.py:1266 +#: part/models.py:1229 msgid "Expiry time (in days) for stock items of this part" msgstr "此零件庫存項的過期時間 (天)" -#: part/models.py:1274 part/serializers.py:888 +#: part/models.py:1237 part/serializers.py:889 msgid "Minimum Stock" msgstr "最低庫存" -#: part/models.py:1275 +#: part/models.py:1238 msgid "Minimum allowed stock level" msgstr "允許的最小庫存量" -#: part/models.py:1284 +#: part/models.py:1247 msgid "Units of measure for this part" msgstr "此零件的計量單位" -#: part/models.py:1291 +#: part/models.py:1254 msgid "Can this part be built from other parts?" msgstr "這個零件可由其他零件加工而成嗎?" -#: part/models.py:1297 +#: part/models.py:1260 msgid "Can this part be used to build other parts?" msgstr "這個零件可用於創建其他零件嗎?" -#: part/models.py:1303 +#: part/models.py:1266 msgid "Does this part have tracking for unique items?" msgstr "此零件是否有唯一物品的追蹤功能" -#: part/models.py:1309 +#: part/models.py:1272 msgid "Can this part have test results recorded against it?" msgstr "這一部分能否記錄到測試結果?" -#: part/models.py:1315 +#: part/models.py:1278 msgid "Can this part be purchased from external suppliers?" msgstr "這個零件可從外部供應商購買嗎?" -#: part/models.py:1321 +#: part/models.py:1284 msgid "Can this part be sold to customers?" msgstr "此零件可以銷售給客户嗎?" -#: part/models.py:1325 +#: part/models.py:1288 msgid "Is this part active?" msgstr "這個零件是否已激活?" -#: part/models.py:1331 +#: part/models.py:1294 msgid "Locked parts cannot be edited" msgstr "無法編輯鎖定的零件" -#: part/models.py:1337 +#: part/models.py:1300 msgid "Is this a virtual part, such as a software product or license?" msgstr "這是一個虛擬零件,例如一個軟件產品或許可證嗎?" -#: part/models.py:1342 +#: part/models.py:1305 msgid "BOM Validated" msgstr "BOM 已驗證" -#: part/models.py:1343 +#: part/models.py:1306 msgid "Is the BOM for this part valid?" msgstr "此零件的 BOM 是否已通過驗證?" -#: part/models.py:1349 +#: part/models.py:1312 msgid "BOM checksum" msgstr "物料清單校驗和" -#: part/models.py:1350 +#: part/models.py:1313 msgid "Stored BOM checksum" msgstr "保存的物料清單校驗和" -#: part/models.py:1358 +#: part/models.py:1321 msgid "BOM checked by" msgstr "物料清單檢查人" -#: part/models.py:1363 +#: part/models.py:1326 msgid "BOM checked date" msgstr "物料清單檢查日期" -#: part/models.py:1379 +#: part/models.py:1342 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1389 +#: part/models.py:1352 msgid "Owner responsible for this part" msgstr "此零件的負責人" -#: part/models.py:2346 +#: part/models.py:2309 msgid "Sell multiple" msgstr "出售多個" -#: part/models.py:3350 +#: part/models.py:3314 msgid "Currency used to cache pricing calculations" msgstr "用於緩存定價計算的貨幣" -#: part/models.py:3366 +#: part/models.py:3330 msgid "Minimum BOM Cost" msgstr "最低物料清單成本" -#: part/models.py:3367 +#: part/models.py:3331 msgid "Minimum cost of component parts" msgstr "元件的最低成本" -#: part/models.py:3373 +#: part/models.py:3337 msgid "Maximum BOM Cost" msgstr "物料清單的最高成本" -#: part/models.py:3374 +#: part/models.py:3338 msgid "Maximum cost of component parts" msgstr "元件的最高成本" -#: part/models.py:3380 +#: part/models.py:3344 msgid "Minimum Purchase Cost" msgstr "最低購買成本" -#: part/models.py:3381 +#: part/models.py:3345 msgid "Minimum historical purchase cost" msgstr "最高歷史購買成本" -#: part/models.py:3387 +#: part/models.py:3351 msgid "Maximum Purchase Cost" msgstr "最大購買成本" -#: part/models.py:3388 +#: part/models.py:3352 msgid "Maximum historical purchase cost" msgstr "最高歷史購買成本" -#: part/models.py:3394 +#: part/models.py:3358 msgid "Minimum Internal Price" msgstr "最低內部價格" -#: part/models.py:3395 +#: part/models.py:3359 msgid "Minimum cost based on internal price breaks" msgstr "基於內部批發價的最低成本" -#: part/models.py:3401 +#: part/models.py:3365 msgid "Maximum Internal Price" msgstr "最大內部價格" -#: part/models.py:3402 +#: part/models.py:3366 msgid "Maximum cost based on internal price breaks" msgstr "基於內部批發價的最高成本" -#: part/models.py:3408 +#: part/models.py:3372 msgid "Minimum Supplier Price" msgstr "供應商最低價格" -#: part/models.py:3409 +#: part/models.py:3373 msgid "Minimum price of part from external suppliers" msgstr "外部供應商零件的最低價格" -#: part/models.py:3415 +#: part/models.py:3379 msgid "Maximum Supplier Price" msgstr "供應商最高價格" -#: part/models.py:3416 +#: part/models.py:3380 msgid "Maximum price of part from external suppliers" msgstr "來自外部供應商的商零件的最高價格" -#: part/models.py:3422 +#: part/models.py:3386 msgid "Minimum Variant Cost" msgstr "最小變體成本" -#: part/models.py:3423 +#: part/models.py:3387 msgid "Calculated minimum cost of variant parts" msgstr "計算出的變體零件的最低成本" -#: part/models.py:3429 +#: part/models.py:3393 msgid "Maximum Variant Cost" msgstr "最大變體成本" -#: part/models.py:3430 +#: part/models.py:3394 msgid "Calculated maximum cost of variant parts" msgstr "計算出的變體零件的最大成本" -#: part/models.py:3436 part/models.py:3450 +#: part/models.py:3400 part/models.py:3414 msgid "Minimum Cost" msgstr "最低成本" -#: part/models.py:3437 +#: part/models.py:3401 msgid "Override minimum cost" msgstr "覆蓋最低成本" -#: part/models.py:3443 part/models.py:3457 +#: part/models.py:3407 part/models.py:3421 msgid "Maximum Cost" msgstr "最高成本" -#: part/models.py:3444 +#: part/models.py:3408 msgid "Override maximum cost" msgstr "覆蓋最大成本" -#: part/models.py:3451 +#: part/models.py:3415 msgid "Calculated overall minimum cost" msgstr "計算總最低成本" -#: part/models.py:3458 +#: part/models.py:3422 msgid "Calculated overall maximum cost" msgstr "計算總最大成本" -#: part/models.py:3464 +#: part/models.py:3428 msgid "Minimum Sale Price" msgstr "最低售出價格" -#: part/models.py:3465 +#: part/models.py:3429 msgid "Minimum sale price based on price breaks" msgstr "基於批發價的最低售出價格" -#: part/models.py:3471 +#: part/models.py:3435 msgid "Maximum Sale Price" msgstr "最高售出價格" -#: part/models.py:3472 +#: part/models.py:3436 msgid "Maximum sale price based on price breaks" msgstr "基於批發價的最大售出價格" -#: part/models.py:3478 +#: part/models.py:3442 msgid "Minimum Sale Cost" msgstr "最低銷售成本" -#: part/models.py:3479 +#: part/models.py:3443 msgid "Minimum historical sale price" msgstr "歷史最低售出價格" -#: part/models.py:3485 +#: part/models.py:3449 msgid "Maximum Sale Cost" msgstr "最高銷售成本" -#: part/models.py:3486 +#: part/models.py:3450 msgid "Maximum historical sale price" msgstr "歷史最高售出價格" -#: part/models.py:3504 +#: part/models.py:3468 msgid "Part for stocktake" msgstr "用於盤點的零件" -#: part/models.py:3509 +#: part/models.py:3473 msgid "Item Count" msgstr "物品數量" -#: part/models.py:3510 +#: part/models.py:3474 msgid "Number of individual stock entries at time of stocktake" msgstr "盤點時的個別庫存條目數" -#: part/models.py:3518 +#: part/models.py:3482 msgid "Total available stock at time of stocktake" msgstr "盤點時可用庫存總額" -#: part/models.py:3522 report/templates/report/inventree_test_report.html:106 +#: part/models.py:3486 report/templates/report/inventree_test_report.html:106 msgid "Date" msgstr "日期" -#: part/models.py:3523 +#: part/models.py:3487 msgid "Date stocktake was performed" msgstr "進行盤點的日期" -#: part/models.py:3530 +#: part/models.py:3494 msgid "Minimum Stock Cost" msgstr "最低庫存成本" -#: part/models.py:3531 +#: part/models.py:3495 msgid "Estimated minimum cost of stock on hand" msgstr "現有存庫存最低成本估算" -#: part/models.py:3537 +#: part/models.py:3501 msgid "Maximum Stock Cost" msgstr "最高庫存成本" -#: part/models.py:3538 +#: part/models.py:3502 msgid "Estimated maximum cost of stock on hand" msgstr "目前庫存最高成本估算" -#: part/models.py:3548 +#: part/models.py:3512 msgid "Part Sale Price Break" msgstr "零件售出價格折扣" -#: part/models.py:3660 +#: part/models.py:3626 msgid "Part Test Template" msgstr "零件測試模板" -#: part/models.py:3686 +#: part/models.py:3652 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "模板名稱無效 - 必須包含至少一個字母或者數字" -#: part/models.py:3718 +#: part/models.py:3684 msgid "Test templates can only be created for testable parts" msgstr "測試模板只能為可拆分的部件創建" -#: part/models.py:3732 +#: part/models.py:3698 msgid "Test template with the same key already exists for part" msgstr "零件已存在具有相同主鍵的測試模板" -#: part/models.py:3749 +#: part/models.py:3715 msgid "Test Name" msgstr "測試名" -#: part/models.py:3750 +#: part/models.py:3716 msgid "Enter a name for the test" msgstr "輸入測試的名稱" -#: part/models.py:3756 +#: part/models.py:3722 msgid "Test Key" msgstr "測試主鍵" -#: part/models.py:3757 +#: part/models.py:3723 msgid "Simplified key for the test" msgstr "簡化測試主鍵" -#: part/models.py:3764 +#: part/models.py:3730 msgid "Test Description" msgstr "測試説明" -#: part/models.py:3765 +#: part/models.py:3731 msgid "Enter description for this test" msgstr "輸入測試的描述" -#: part/models.py:3769 +#: part/models.py:3735 msgid "Is this test enabled?" msgstr "此測試是否已啓用?" -#: part/models.py:3774 +#: part/models.py:3740 msgid "Required" msgstr "必須的" -#: part/models.py:3775 +#: part/models.py:3741 msgid "Is this test required to pass?" msgstr "需要此測試才能通過嗎?" -#: part/models.py:3780 +#: part/models.py:3746 msgid "Requires Value" msgstr "需要值" -#: part/models.py:3781 +#: part/models.py:3747 msgid "Does this test require a value when adding a test result?" msgstr "添加測試結果時是否需要一個值?" -#: part/models.py:3786 +#: part/models.py:3752 msgid "Requires Attachment" msgstr "需要附件" -#: part/models.py:3788 +#: part/models.py:3754 msgid "Does this test require a file attachment when adding a test result?" msgstr "添加測試結果時是否需要文件附件?" -#: part/models.py:3795 +#: part/models.py:3761 msgid "Valid choices for this test (comma-separated)" msgstr "此測試的有效選擇 (逗號分隔)" -#: part/models.py:3977 +#: part/models.py:3955 msgid "BOM item cannot be modified - assembly is locked" msgstr "物料清單項目不能被修改 - 裝配已鎖定" -#: part/models.py:3984 +#: part/models.py:3962 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "物料清單項目不能修改 - 變體裝配已鎖定" -#: part/models.py:3994 +#: part/models.py:3972 msgid "Select parent part" msgstr "選擇父零件" -#: part/models.py:4004 +#: part/models.py:3982 msgid "Sub part" msgstr "子零件" -#: part/models.py:4005 +#: part/models.py:3983 msgid "Select part to be used in BOM" msgstr "選擇要用於物料清單的零件" -#: part/models.py:4016 +#: part/models.py:3994 msgid "BOM quantity for this BOM item" msgstr "此物料清單項目的數量" -#: part/models.py:4022 +#: part/models.py:4000 msgid "This BOM item is optional" msgstr "此物料清單項目是可選的" -#: part/models.py:4028 +#: part/models.py:4006 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "這個物料清單項目是耗材 (它沒有在生產訂單中被追蹤)" -#: part/models.py:4036 +#: part/models.py:4014 msgid "Setup Quantity" msgstr "建置額外數量" -#: part/models.py:4037 +#: part/models.py:4015 msgid "Extra required quantity for a build, to account for setup losses" msgstr "為彌補建置 / 開工損耗所需的額外數量" -#: part/models.py:4045 +#: part/models.py:4023 msgid "Attrition" msgstr "損耗率" -#: part/models.py:4047 +#: part/models.py:4025 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "製造預估損耗(百分比 0–100)" -#: part/models.py:4058 +#: part/models.py:4036 msgid "Rounding Multiple" msgstr "進位倍數" -#: part/models.py:4060 +#: part/models.py:4038 msgid "Round up required production quantity to nearest multiple of this value" msgstr "將所需生產數量向上取整到此數值的整數倍" -#: part/models.py:4068 +#: part/models.py:4046 msgid "BOM item reference" msgstr "物料清單項目引用" -#: part/models.py:4076 +#: part/models.py:4054 msgid "BOM item notes" msgstr "物料清單項目註釋" -#: part/models.py:4082 +#: part/models.py:4060 msgid "Checksum" msgstr "校驗和" -#: part/models.py:4083 +#: part/models.py:4061 msgid "BOM line checksum" msgstr "物料清單行校驗和" -#: part/models.py:4088 +#: part/models.py:4066 msgid "Validated" msgstr "已驗證" -#: part/models.py:4089 +#: part/models.py:4067 msgid "This BOM item has been validated" msgstr "此物料清單項目已驗證" -#: part/models.py:4094 +#: part/models.py:4072 msgid "Gets inherited" msgstr "獲取繼承的" -#: part/models.py:4095 +#: part/models.py:4073 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "此物料清單項目是由物料清單繼承的變體零件" -#: part/models.py:4101 +#: part/models.py:4079 msgid "Stock items for variant parts can be used for this BOM item" msgstr "變體零件的庫存項可以用於此物料清單項目" -#: part/models.py:4208 stock/models.py:925 +#: part/models.py:4186 stock/models.py:932 msgid "Quantity must be integer value for trackable parts" msgstr "可追蹤零件的數量必須是整數" -#: part/models.py:4218 part/models.py:4220 +#: part/models.py:4196 part/models.py:4198 msgid "Sub part must be specified" msgstr "必須指定子零件" -#: part/models.py:4371 +#: part/models.py:4349 msgid "BOM Item Substitute" msgstr "物料清單項目替代品" -#: part/models.py:4392 +#: part/models.py:4370 msgid "Substitute part cannot be the same as the master part" msgstr "替代品零件不能與主零件相同" -#: part/models.py:4405 +#: part/models.py:4383 msgid "Parent BOM item" msgstr "上級物料清單項目" -#: part/models.py:4413 +#: part/models.py:4391 msgid "Substitute part" msgstr "替代品零件" -#: part/models.py:4429 +#: part/models.py:4407 msgid "Part 1" msgstr "零件 1" -#: part/models.py:4437 +#: part/models.py:4415 msgid "Part 2" msgstr "零件2" -#: part/models.py:4438 +#: part/models.py:4416 msgid "Select Related Part" msgstr "選擇相關的零件" -#: part/models.py:4445 +#: part/models.py:4423 msgid "Note for this relationship" msgstr "此關係的備註" -#: part/models.py:4464 +#: part/models.py:4442 msgid "Part relationship cannot be created between a part and itself" msgstr "零件關係不能在零件和自身之間創建" -#: part/models.py:4469 +#: part/models.py:4447 msgid "Duplicate relationship already exists" msgstr "複製關係已經存在" -#: part/serializers.py:113 +#: part/serializers.py:115 msgid "Parent Category" msgstr "上級類別" -#: part/serializers.py:114 +#: part/serializers.py:116 msgid "Parent part category" msgstr "上級零件類別" -#: part/serializers.py:122 part/serializers.py:163 +#: part/serializers.py:124 part/serializers.py:174 msgid "Subcategories" msgstr "子類別" -#: part/serializers.py:202 +#: part/serializers.py:213 msgid "Results" msgstr "結果" -#: part/serializers.py:203 +#: part/serializers.py:214 msgid "Number of results recorded against this template" msgstr "根據該模板記錄的結果數量" -#: part/serializers.py:234 part/serializers.py:252 stock/serializers.py:643 +#: part/serializers.py:245 part/serializers.py:263 stock/serializers.py:649 msgid "Purchase currency of this stock item" msgstr "購買此庫存項的貨幣" -#: part/serializers.py:279 +#: part/serializers.py:290 msgid "File is not an image" msgstr "檔案不是圖片" -#: part/serializers.py:382 +#: part/serializers.py:393 msgid "Original Part" msgstr "原始零件" -#: part/serializers.py:383 +#: part/serializers.py:394 msgid "Select original part to duplicate" msgstr "選擇要複製的原始零件" -#: part/serializers.py:388 +#: part/serializers.py:399 msgid "Copy Image" msgstr "複製圖片" -#: part/serializers.py:389 +#: part/serializers.py:400 msgid "Copy image from original part" msgstr "從原零件複製圖片" -#: part/serializers.py:395 +#: part/serializers.py:406 msgid "Copy BOM" msgstr "複製物料清單" -#: part/serializers.py:396 +#: part/serializers.py:407 msgid "Copy bill of materials from original part" msgstr "從原始零件複製材料清單" -#: part/serializers.py:402 -msgid "Copy Parameters" -msgstr "複製參數" - -#: part/serializers.py:403 +#: part/serializers.py:414 msgid "Copy parameter data from original part" msgstr "從原始零件複製參數數據" -#: part/serializers.py:409 +#: part/serializers.py:420 msgid "Copy Notes" msgstr "複製備註" -#: part/serializers.py:410 +#: part/serializers.py:421 msgid "Copy notes from original part" msgstr "從原始零件複製備註" -#: part/serializers.py:416 +#: part/serializers.py:427 msgid "Copy Tests" msgstr "複製測試模板" -#: part/serializers.py:417 +#: part/serializers.py:428 msgid "Copy test templates from original part" msgstr "從原始零件複製測試模板" -#: part/serializers.py:435 +#: part/serializers.py:446 msgid "Initial Stock Quantity" msgstr "初始化庫存數量" -#: part/serializers.py:437 +#: part/serializers.py:448 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始庫存數量。如果數量為零,則不添加任何庫存。" -#: part/serializers.py:444 +#: part/serializers.py:455 msgid "Initial Stock Location" msgstr "初始化庫存地點" -#: part/serializers.py:445 +#: part/serializers.py:456 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的庫存地點" -#: part/serializers.py:462 +#: part/serializers.py:473 msgid "Select supplier (or leave blank to skip)" msgstr "選擇供應商(或為空以跳過)" -#: part/serializers.py:478 +#: part/serializers.py:489 msgid "Select manufacturer (or leave blank to skip)" msgstr "選擇製造商(或為空)" -#: part/serializers.py:488 +#: part/serializers.py:499 msgid "Manufacturer part number" msgstr "製造商零件號" -#: part/serializers.py:495 +#: part/serializers.py:506 msgid "Selected company is not a valid supplier" msgstr "所選公司不是一個有效的供應商" -#: part/serializers.py:504 +#: part/serializers.py:515 msgid "Selected company is not a valid manufacturer" msgstr "所選公司不是一個有效的製造商" -#: part/serializers.py:515 +#: part/serializers.py:526 msgid "Manufacturer part matching this MPN already exists" msgstr "與此製造商零件編號 (MPN) 的相匹配的製造商零件已存在" -#: part/serializers.py:522 +#: part/serializers.py:533 msgid "Supplier part matching this SKU already exists" msgstr "匹配此庫存單位 (SKU) 的供應商零件已存在" -#: part/serializers.py:799 +#: part/serializers.py:804 msgid "Category Name" msgstr "類別名稱" -#: part/serializers.py:828 +#: part/serializers.py:833 msgid "Building" msgstr "正在生產" -#: part/serializers.py:829 +#: part/serializers.py:834 msgid "Quantity of this part currently being in production" msgstr "此零件目前生產中數量" -#: part/serializers.py:836 +#: part/serializers.py:841 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件排程待製造未完成數量" -#: part/serializers.py:856 stock/serializers.py:1019 stock/serializers.py:1189 +#: part/serializers.py:861 stock/serializers.py:1025 stock/serializers.py:1208 #: users/ruleset.py:30 msgid "Stock Items" msgstr "庫存項" -#: part/serializers.py:860 +#: part/serializers.py:865 msgid "Revisions" msgstr "修訂" -#: part/serializers.py:864 -msgid "Suppliers" -msgstr "供應商" - -#: part/serializers.py:868 part/serializers.py:1162 +#: part/serializers.py:869 part/serializers.py:1161 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "庫存總量" -#: part/serializers.py:876 +#: part/serializers.py:877 msgid "Unallocated Stock" msgstr "未分配的庫存" -#: part/serializers.py:884 +#: part/serializers.py:885 msgid "Variant Stock" msgstr "變體庫存" -#: part/serializers.py:943 +#: part/serializers.py:941 msgid "Duplicate Part" msgstr "重複零件" -#: part/serializers.py:944 +#: part/serializers.py:942 msgid "Copy initial data from another Part" msgstr "從另一個零件複製初始數據" -#: part/serializers.py:950 +#: part/serializers.py:948 msgid "Initial Stock" msgstr "初始庫存" -#: part/serializers.py:951 +#: part/serializers.py:949 msgid "Create Part with initial stock quantity" msgstr "創建具有初始庫存數量的零件" -#: part/serializers.py:957 +#: part/serializers.py:955 msgid "Supplier Information" msgstr "供應商信息" -#: part/serializers.py:958 +#: part/serializers.py:956 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供應商信息" -#: part/serializers.py:966 +#: part/serializers.py:965 msgid "Copy Category Parameters" msgstr "複製類別參數" -#: part/serializers.py:967 +#: part/serializers.py:966 msgid "Copy parameter templates from selected part category" msgstr "從選擇的零件複製參數模版" -#: part/serializers.py:972 +#: part/serializers.py:971 msgid "Existing Image" msgstr "現有的圖片" -#: part/serializers.py:973 +#: part/serializers.py:972 msgid "Filename of an existing part image" msgstr "現有零件圖片的文件名" -#: part/serializers.py:990 +#: part/serializers.py:989 msgid "Image file does not exist" msgstr "圖片不存在" -#: part/serializers.py:1134 +#: part/serializers.py:1133 msgid "Validate entire Bill of Materials" msgstr "驗證整個物料清單" -#: part/serializers.py:1168 part/serializers.py:1634 +#: part/serializers.py:1167 part/serializers.py:1759 msgid "Can Build" msgstr "可以創建" -#: part/serializers.py:1185 +#: part/serializers.py:1184 msgid "Required for Build Orders" msgstr "生產工單需求數" -#: part/serializers.py:1190 +#: part/serializers.py:1189 msgid "Allocated to Build Orders" msgstr "已分配至生產工單" -#: part/serializers.py:1197 +#: part/serializers.py:1196 msgid "Required for Sales Orders" msgstr "銷售訂單需求數" -#: part/serializers.py:1201 +#: part/serializers.py:1200 msgid "Allocated to Sales Orders" msgstr "已分配至銷售訂單" -#: part/serializers.py:1340 +#: part/serializers.py:1260 +msgid "Part IPN" +msgstr "" + +#: part/serializers.py:1267 +msgid "Part Description" +msgstr "" + +#: part/serializers.py:1306 +msgid "Select a part to generate stocktake information for that part (and any variant parts)" +msgstr "" + +#: part/serializers.py:1316 +msgid "Select a category to include all parts within that category (and subcategories)" +msgstr "" + +#: part/serializers.py:1326 +msgid "Select a location to include all parts with stock in that location (including sub-locations)" +msgstr "" + +#: part/serializers.py:1333 +msgid "Generate Stocktake Entries" +msgstr "" + +#: part/serializers.py:1334 +msgid "Save stocktake entries for the selected parts" +msgstr "" + +#: part/serializers.py:1341 +msgid "Generate Report" +msgstr "產製報表" + +#: part/serializers.py:1342 +msgid "Generate a stocktake report for the selected parts" +msgstr "產製選定零件的庫存報表" + +#: part/serializers.py:1445 msgid "Minimum Price" msgstr "最低價格" -#: part/serializers.py:1341 +#: part/serializers.py:1446 msgid "Override calculated value for minimum price" msgstr "覆蓋已計算的最低價格值" -#: part/serializers.py:1348 +#: part/serializers.py:1453 msgid "Minimum price currency" msgstr "最低價格貨幣" -#: part/serializers.py:1355 +#: part/serializers.py:1460 msgid "Maximum Price" msgstr "最高價格" -#: part/serializers.py:1356 +#: part/serializers.py:1461 msgid "Override calculated value for maximum price" msgstr "覆蓋已計算的最高價格值" -#: part/serializers.py:1363 +#: part/serializers.py:1468 msgid "Maximum price currency" msgstr "最高價格貨幣" -#: part/serializers.py:1392 +#: part/serializers.py:1497 msgid "Update" msgstr "更新" -#: part/serializers.py:1393 +#: part/serializers.py:1498 msgid "Update pricing for this part" msgstr "更新這個零件的價格" -#: part/serializers.py:1416 +#: part/serializers.py:1521 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "無法將所提供的貨幣轉換為 {default_currency}" -#: part/serializers.py:1423 +#: part/serializers.py:1528 msgid "Minimum price must not be greater than maximum price" msgstr "最低價格不能高於最高價格。" -#: part/serializers.py:1426 +#: part/serializers.py:1531 msgid "Maximum price must not be less than minimum price" msgstr "最高價格不能低於最低價格" -#: part/serializers.py:1580 +#: part/serializers.py:1684 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/serializers.py:1697 msgid "Select the parent assembly" msgstr "選擇父裝配" -#: part/serializers.py:1600 +#: part/serializers.py:1725 msgid "Select the component part" msgstr "選擇零部件" -#: part/serializers.py:1802 +#: part/serializers.py:1927 msgid "Select part to copy BOM from" msgstr "選擇要複製物料清單的零件" -#: part/serializers.py:1810 +#: part/serializers.py:1935 msgid "Remove Existing Data" msgstr "移除現有數據" -#: part/serializers.py:1811 +#: part/serializers.py:1936 msgid "Remove existing BOM items before copying" msgstr "複製前刪除現有的物料清單項目" -#: part/serializers.py:1816 +#: part/serializers.py:1941 msgid "Include Inherited" msgstr "包含繼承的" -#: part/serializers.py:1817 +#: part/serializers.py:1942 msgid "Include BOM items which are inherited from templated parts" msgstr "包含從模板零件繼承的物料清單項目" -#: part/serializers.py:1822 +#: part/serializers.py:1947 msgid "Skip Invalid Rows" msgstr "跳過無效行" -#: part/serializers.py:1823 +#: part/serializers.py:1948 msgid "Enable this option to skip invalid rows" msgstr "啓用此選項以跳過無效行" -#: part/serializers.py:1828 +#: part/serializers.py:1953 msgid "Copy Substitute Parts" msgstr "複製替代品零件" -#: part/serializers.py:1829 +#: part/serializers.py:1954 msgid "Copy substitute parts when duplicate BOM items" msgstr "複製物料清單項目時複製替代品零件" -#: part/tasks.py:41 +#: part/tasks.py:42 msgid "Low stock notification" msgstr "低庫存通知" -#: part/tasks.py:43 +#: part/tasks.py:44 #, python-brace-format msgid "The available stock for {part.name} has fallen below the configured minimum level" msgstr "可用的 {part.name}庫存已經跌到設置的最低值" -#: part/tasks.py:73 +#: part/tasks.py:74 msgid "Stale stock notification" msgstr "庫存即將過期通知" -#: part/tasks.py:77 +#: part/tasks.py:78 msgid "You have 1 stock item approaching its expiry date" msgstr "有 1 個庫存項目即將到期" -#: part/tasks.py:79 +#: part/tasks.py:80 #, python-brace-format msgid "You have {item_count} stock items approaching their expiry dates" msgstr "有 {item_count} 個庫存項目即將到期" -#: part/tasks.py:88 +#: part/tasks.py:89 msgid "No expiry date" msgstr "未設定到期日" -#: part/tasks.py:95 +#: part/tasks.py:96 msgid "Expired {abs(days_diff)} days ago" msgstr "已於 {abs(days_diff)} 天前到期" -#: part/tasks.py:98 +#: part/tasks.py:99 msgid "Expires today" msgstr "今日到期" -#: part/tasks.py:101 +#: part/tasks.py:102 #, python-brace-format msgid "{days_until_expiry} days" msgstr "尚餘 {days_until_expiry} 天" @@ -6732,108 +6865,108 @@ msgstr "未指定操作" msgid "No matching action found" msgstr "未找到指定操作" -#: plugin/base/barcodes/api.py:211 +#: plugin/base/barcodes/api.py:212 msgid "No match found for barcode data" msgstr "未找到匹配條形碼數據" -#: plugin/base/barcodes/api.py:215 +#: plugin/base/barcodes/api.py:216 msgid "Match found for barcode data" msgstr "找到匹配條形碼數據" -#: plugin/base/barcodes/api.py:253 plugin/base/barcodes/serializers.py:77 +#: plugin/base/barcodes/api.py:254 plugin/base/barcodes/serializers.py:77 msgid "Model is not supported" msgstr "不支持模型" -#: plugin/base/barcodes/api.py:258 +#: plugin/base/barcodes/api.py:259 msgid "Model instance not found" msgstr "找不到模型實例" -#: plugin/base/barcodes/api.py:287 +#: plugin/base/barcodes/api.py:288 msgid "Barcode matches existing item" msgstr "條形碼匹配現有項目" -#: plugin/base/barcodes/api.py:418 +#: plugin/base/barcodes/api.py:419 msgid "No matching part data found" msgstr "沒有找到匹配的零件數據" -#: plugin/base/barcodes/api.py:434 +#: plugin/base/barcodes/api.py:435 msgid "No matching supplier parts found" msgstr "沒有找到匹配的供應商零件" -#: plugin/base/barcodes/api.py:437 +#: plugin/base/barcodes/api.py:438 msgid "Multiple matching supplier parts found" msgstr "找到多個匹配的供應商零件" -#: plugin/base/barcodes/api.py:450 plugin/base/barcodes/api.py:677 +#: plugin/base/barcodes/api.py:451 plugin/base/barcodes/api.py:678 msgid "No matching plugin found for barcode data" msgstr "沒有找到匹配條碼數據的插件" -#: plugin/base/barcodes/api.py:460 +#: plugin/base/barcodes/api.py:461 msgid "Matched supplier part" msgstr "匹配的供應商零件" -#: plugin/base/barcodes/api.py:528 +#: plugin/base/barcodes/api.py:529 msgid "Item has already been received" msgstr "項目已被接收" -#: plugin/base/barcodes/api.py:576 +#: plugin/base/barcodes/api.py:577 msgid "No plugin match for supplier barcode" msgstr "供應商條碼未匹配任何模組" -#: plugin/base/barcodes/api.py:625 +#: plugin/base/barcodes/api.py:626 msgid "Multiple matching line items found" msgstr "找到多個匹配的行項目" -#: plugin/base/barcodes/api.py:628 +#: plugin/base/barcodes/api.py:629 msgid "No matching line item found" msgstr "未找到匹配的行項目" -#: plugin/base/barcodes/api.py:674 +#: plugin/base/barcodes/api.py:675 msgid "No sales order provided" msgstr "未提供銷售訂單" -#: plugin/base/barcodes/api.py:683 +#: plugin/base/barcodes/api.py:684 msgid "Barcode does not match an existing stock item" msgstr "條形碼與現有的庫存項不匹配" -#: plugin/base/barcodes/api.py:699 +#: plugin/base/barcodes/api.py:700 msgid "Stock item does not match line item" msgstr "庫存項與行項目不匹配" -#: plugin/base/barcodes/api.py:729 +#: plugin/base/barcodes/api.py:730 msgid "Insufficient stock available" msgstr "可用庫存不足" -#: plugin/base/barcodes/api.py:742 +#: plugin/base/barcodes/api.py:743 msgid "Stock item allocated to sales order" msgstr "庫存項已分配到銷售訂單" -#: plugin/base/barcodes/api.py:745 +#: plugin/base/barcodes/api.py:746 msgid "Not enough information" msgstr "沒有足夠的信息" -#: plugin/base/barcodes/mixins.py:308 +#: plugin/base/barcodes/mixins.py:309 #: plugin/builtin/barcodes/inventree_barcode.py:101 msgid "Found matching item" msgstr "找到匹配項目" -#: plugin/base/barcodes/mixins.py:374 +#: plugin/base/barcodes/mixins.py:375 msgid "Supplier part does not match line item" msgstr "供應商零件與行項目不匹配" -#: plugin/base/barcodes/mixins.py:377 +#: plugin/base/barcodes/mixins.py:378 msgid "Line item is already completed" msgstr "行項目已完成" -#: plugin/base/barcodes/mixins.py:414 +#: plugin/base/barcodes/mixins.py:415 msgid "Further information required to receive line item" msgstr "需要更多信息以接收行項目" -#: plugin/base/barcodes/mixins.py:422 +#: plugin/base/barcodes/mixins.py:423 msgid "Received purchase order line item" msgstr "已收到採購訂單行項目" -#: plugin/base/barcodes/mixins.py:429 +#: plugin/base/barcodes/mixins.py:430 msgid "Failed to receive line item" msgstr "接收行項目失敗" @@ -6972,7 +7105,7 @@ msgstr "提供條形碼本地支持" #: plugin/builtin/barcodes/inventree_barcode.py:30 #: plugin/builtin/events/auto_create_builds.py:30 #: plugin/builtin/events/auto_issue_orders.py:19 -#: plugin/builtin/exporter/bom_exporter.py:73 +#: plugin/builtin/exporter/bom_exporter.py:74 #: plugin/builtin/exporter/inventree_exporter.py:17 #: plugin/builtin/exporter/parameter_exporter.py:32 #: plugin/builtin/exporter/stocktake_exporter.py:47 @@ -7070,111 +7203,111 @@ msgstr "發佈回溯日期訂單" msgid "Automatically issue orders that are backdated" msgstr "自動發佈被回溯日期的訂單" -#: plugin/builtin/exporter/bom_exporter.py:21 +#: plugin/builtin/exporter/bom_exporter.py:22 msgid "Levels" msgstr "階層數" -#: plugin/builtin/exporter/bom_exporter.py:23 +#: plugin/builtin/exporter/bom_exporter.py:24 msgid "Number of levels to export - set to zero to export all BOM levels" msgstr "要匯出的 BOM 階層數;設為 0 匯出全部階層" -#: plugin/builtin/exporter/bom_exporter.py:30 -#: plugin/builtin/exporter/bom_exporter.py:114 +#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:118 msgid "Total Quantity" msgstr "總用量" -#: plugin/builtin/exporter/bom_exporter.py:31 +#: plugin/builtin/exporter/bom_exporter.py:32 msgid "Include total quantity of each part in the BOM" msgstr "包含每個零件於 BOM 中的總需求量" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Stock Data" msgstr "庫存資料" -#: plugin/builtin/exporter/bom_exporter.py:35 +#: plugin/builtin/exporter/bom_exporter.py:36 msgid "Include part stock data" msgstr "包含零件庫存資料" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Pricing Data" msgstr "價格資料" -#: plugin/builtin/exporter/bom_exporter.py:39 +#: plugin/builtin/exporter/bom_exporter.py:40 #: plugin/builtin/exporter/stocktake_exporter.py:20 msgid "Include part pricing data" msgstr "包含零件價格資料" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Supplier Data" msgstr "供應商資料" -#: plugin/builtin/exporter/bom_exporter.py:43 +#: plugin/builtin/exporter/bom_exporter.py:44 msgid "Include supplier data" msgstr "包含供應商資料" -#: plugin/builtin/exporter/bom_exporter.py:48 +#: plugin/builtin/exporter/bom_exporter.py:49 msgid "Manufacturer Data" msgstr "製造商資料" -#: plugin/builtin/exporter/bom_exporter.py:49 +#: plugin/builtin/exporter/bom_exporter.py:50 msgid "Include manufacturer data" msgstr "包含製造商資料" -#: plugin/builtin/exporter/bom_exporter.py:54 +#: plugin/builtin/exporter/bom_exporter.py:55 msgid "Substitute Data" msgstr "替代料資料" -#: plugin/builtin/exporter/bom_exporter.py:55 +#: plugin/builtin/exporter/bom_exporter.py:56 msgid "Include substitute part data" msgstr "包含替代零件資料" -#: plugin/builtin/exporter/bom_exporter.py:60 +#: plugin/builtin/exporter/bom_exporter.py:61 msgid "Parameter Data" msgstr "參數資料" -#: plugin/builtin/exporter/bom_exporter.py:61 +#: plugin/builtin/exporter/bom_exporter.py:62 msgid "Include part parameter data" msgstr "包含零件參數資料" -#: plugin/builtin/exporter/bom_exporter.py:70 +#: plugin/builtin/exporter/bom_exporter.py:71 msgid "Multi-Level BOM Exporter" msgstr "多層 BOM 匯出器" -#: plugin/builtin/exporter/bom_exporter.py:71 +#: plugin/builtin/exporter/bom_exporter.py:72 msgid "Provides support for exporting multi-level BOMs" msgstr "支援匯出多層 BOM" -#: plugin/builtin/exporter/bom_exporter.py:110 +#: plugin/builtin/exporter/bom_exporter.py:114 msgid "BOM Level" msgstr "BOM 階層" -#: plugin/builtin/exporter/bom_exporter.py:120 +#: plugin/builtin/exporter/bom_exporter.py:124 #, python-brace-format msgid "Substitute {n}" msgstr "替代品 {n}" -#: plugin/builtin/exporter/bom_exporter.py:126 +#: plugin/builtin/exporter/bom_exporter.py:130 #, python-brace-format msgid "Supplier {n}" msgstr "供應商 {n}" -#: plugin/builtin/exporter/bom_exporter.py:127 +#: plugin/builtin/exporter/bom_exporter.py:131 #, python-brace-format msgid "Supplier {n} SKU" msgstr "供應商 {n} SKU" -#: plugin/builtin/exporter/bom_exporter.py:128 +#: plugin/builtin/exporter/bom_exporter.py:132 #, python-brace-format msgid "Supplier {n} MPN" msgstr "供應商 {n} MPN" -#: plugin/builtin/exporter/bom_exporter.py:134 +#: plugin/builtin/exporter/bom_exporter.py:138 #, python-brace-format msgid "Manufacturer {n}" msgstr "製造商 {n}" -#: plugin/builtin/exporter/bom_exporter.py:135 +#: plugin/builtin/exporter/bom_exporter.py:139 #, python-brace-format msgid "Manufacturer {n} MPN" msgstr "製造商 {n} MPN" @@ -7276,8 +7409,8 @@ msgid "Integrated Slack notification methods" msgstr "整合的 Slack 通知方式" #: plugin/builtin/integration/core_notifications.py:131 -msgid "Slack incoming webhook url" -msgstr "Slack傳入Webhook url" +msgid "Slack incoming webhook URL" +msgstr "" #: plugin/builtin/integration/core_notifications.py:132 msgid "URL that is used to send messages to a slack channel" @@ -7354,11 +7487,11 @@ msgstr "InvenTree 設備標籤打印機" msgid "Provides support for printing using a machine" msgstr "提供使用設備打印的支持" -#: plugin/builtin/labels/inventree_machine.py:162 +#: plugin/builtin/labels/inventree_machine.py:164 msgid "last used" msgstr "最近使用" -#: plugin/builtin/labels/inventree_machine.py:179 +#: plugin/builtin/labels/inventree_machine.py:181 msgid "Options" msgstr "選項" @@ -7536,8 +7669,8 @@ msgid "Key of plugin" msgstr "插件的鍵" #: plugin/models.py:55 -msgid "PluginName of the plugin" -msgstr "插件名稱" +msgid "Name of the plugin" +msgstr "外掛名稱" #: plugin/models.py:62 plugin/serializers.py:119 msgid "Package Name" @@ -7571,21 +7704,21 @@ msgstr "軟件包插件" msgid "Plugin" msgstr "插件" -#: plugin/plugin.py:386 +#: plugin/plugin.py:389 msgid "No author found" msgstr "未找到作者" -#: plugin/registry.py:774 +#: plugin/registry.py:781 #, python-brace-format msgid "Plugin '{p}' is not compatible with the current InvenTree version {v}" msgstr "插件 '{p}' 與當前 InvenTree 版本{v} 不兼容" -#: plugin/registry.py:777 +#: plugin/registry.py:784 #, python-brace-format msgid "Plugin requires at least version {v}" msgstr "插件所需最低版本 {v}" -#: plugin/registry.py:779 +#: plugin/registry.py:786 #, python-brace-format msgid "Plugin requires at most version {v}" msgstr "插件所需最高版本 {v}" @@ -7763,8 +7896,8 @@ msgid "Installation not confirmed" msgstr "安裝尚未確認" #: plugin/serializers.py:152 -msgid "Either packagename of URL must be provided" -msgstr "必須提供軟件包名稱或者URL" +msgid "Either packagename or URL must be provided" +msgstr "" #: plugin/serializers.py:188 msgid "Full reload" @@ -8072,7 +8205,7 @@ msgstr "總計" #: report/templates/report/inventree_return_order_report.html:25 #: report/templates/report/inventree_sales_order_shipment_report.html:45 #: report/templates/report/inventree_stock_report_merge.html:88 -#: report/templates/report/inventree_test_report.html:88 stock/models.py:1083 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1090 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "序列號" @@ -8097,7 +8230,7 @@ msgstr "庫存項測試報告" #: report/templates/report/inventree_stock_report_merge.html:97 #: report/templates/report/inventree_test_report.html:153 -#: stock/serializers.py:626 +#: stock/serializers.py:632 msgid "Installed Items" msgstr "已安裝的項目" @@ -8130,495 +8263,519 @@ msgstr "無結果 (必填)" msgid "No result" msgstr "沒有結果" -#: report/templatetags/report.py:169 -msgid "Asset file does not exist" -msgstr "資產文件不存在" +#: report/templatetags/report.py:168 +msgid "Invalid media file path" +msgstr "" -#: report/templatetags/report.py:226 report/templatetags/report.py:302 +#: report/templatetags/report.py:187 +msgid "Invalid static file path" +msgstr "" + +#: report/templatetags/report.py:277 +msgid "Asset file not found" +msgstr "" + +#: report/templatetags/report.py:330 report/templatetags/report.py:443 msgid "Image file not found" msgstr "找不到圖片文件" -#: report/templatetags/report.py:327 +#: report/templatetags/report.py:412 +msgid "No image file specified" +msgstr "" + +#: report/templatetags/report.py:437 msgid "part_image tag requires a Part instance" msgstr "parpart_image 標籤需要一個零件實例" -#: report/templatetags/report.py:383 +#: report/templatetags/report.py:501 msgid "company_image tag requires a Company instance" msgstr "公司_圖片標籤需要一個公司實例" -#: stock/api.py:288 +#: stock/api.py:287 msgid "Filter by location depth" msgstr "按位置深度篩選" -#: stock/api.py:308 +#: stock/api.py:307 msgid "Filter by top-level locations" msgstr "按頂級位置篩選" -#: stock/api.py:323 +#: stock/api.py:322 msgid "Include sub-locations in filtered results" msgstr "在篩選結果中包含子地點" -#: stock/api.py:344 stock/serializers.py:1185 +#: stock/api.py:343 stock/serializers.py:1204 msgid "Parent Location" msgstr "上級地點" -#: stock/api.py:345 +#: stock/api.py:344 msgid "Filter by parent location" msgstr "按上級位置篩選" -#: stock/api.py:605 +#: stock/api.py:604 msgid "Part name (case insensitive)" msgstr "零件名稱(不分大小寫)" -#: stock/api.py:611 +#: stock/api.py:610 msgid "Part name contains (case insensitive)" msgstr "零件名稱包含(不分大小寫)" -#: stock/api.py:617 +#: stock/api.py:616 msgid "Part name (regex)" msgstr "零件名稱(正則)" -#: stock/api.py:622 +#: stock/api.py:621 msgid "Part IPN (case insensitive)" msgstr "零件 IPN(不分大小寫)" -#: stock/api.py:628 +#: stock/api.py:627 msgid "Part IPN contains (case insensitive)" msgstr "零件 IPN 包含(不分大小寫)" -#: stock/api.py:634 +#: stock/api.py:633 msgid "Part IPN (regex)" msgstr "零件 IPN(正則)" -#: stock/api.py:646 +#: stock/api.py:645 msgid "Minimum stock" msgstr "最小庫存" -#: stock/api.py:650 +#: stock/api.py:649 msgid "Maximum stock" msgstr "最大庫存" -#: stock/api.py:653 +#: stock/api.py:652 msgid "Status Code" msgstr "狀態代碼" -#: stock/api.py:693 +#: stock/api.py:692 msgid "External Location" msgstr "外部地點" -#: stock/api.py:792 +#: stock/api.py:791 msgid "Consumed by Build Order" msgstr "被生產工單消耗" -#: stock/api.py:802 +#: stock/api.py:801 msgid "Installed in other stock item" msgstr "已安裝於其他庫存項" -#: stock/api.py:891 +#: stock/api.py:890 msgid "Part Tree" msgstr "零件樹" -#: stock/api.py:913 +#: stock/api.py:912 msgid "Updated before" msgstr "更新時間早於" -#: stock/api.py:917 +#: stock/api.py:916 msgid "Updated after" msgstr "更新時間晚於" -#: stock/api.py:921 +#: stock/api.py:920 msgid "Stocktake Before" msgstr "盤點日期早於" -#: stock/api.py:925 +#: stock/api.py:924 msgid "Stocktake After" msgstr "盤點日期晚於" -#: stock/api.py:930 +#: stock/api.py:929 msgid "Expiry date before" msgstr "過期日期前" -#: stock/api.py:934 +#: stock/api.py:933 msgid "Expiry date after" msgstr "過期日期後" -#: stock/api.py:937 stock/serializers.py:631 +#: stock/api.py:936 stock/serializers.py:637 msgid "Stale" msgstr "過期" -#: stock/api.py:963 +#: stock/api.py:962 msgid "Provide a StockItem PK to exclude that item and all its descendants" msgstr "" -#: stock/api.py:981 +#: stock/api.py:980 msgid "Cascade Locations" msgstr "" -#: stock/api.py:982 +#: stock/api.py:981 msgid "If true, include items in child locations of the given location" msgstr "" -#: stock/api.py:988 +#: stock/api.py:987 msgid "Filter by numeric Location ID or the literal 'null'" msgstr "" -#: stock/api.py:1084 +#: stock/api.py:1087 msgid "Quantity is required" msgstr "請先輸入數量" -#: stock/api.py:1089 +#: stock/api.py:1092 msgid "Valid part must be supplied" msgstr "必須提供有效的零件" -#: stock/api.py:1120 +#: stock/api.py:1123 msgid "The given supplier part does not exist" msgstr "給定的供應商零件不存在" -#: stock/api.py:1130 +#: stock/api.py:1133 msgid "The supplier part has a pack size defined, but flag use_pack_size not set" msgstr "供應商零件有定義的包裝大小,但 use_pack_size 標誌未設置" -#: stock/api.py:1162 +#: stock/api.py:1165 msgid "Serial numbers cannot be supplied for a non-trackable part" msgstr "不能為不可跟蹤的零件提供序列號" -#: stock/api.py:1396 +#: stock/api.py:1409 msgid "Include Installed" msgstr "" -#: stock/api.py:1398 +#: stock/api.py:1411 msgid "If true, include test results for items installed underneath the given stock item" msgstr "" -#: stock/api.py:1405 +#: stock/api.py:1418 msgid "Filter by numeric Stock Item ID" -msgstr "" +msgstr "使用數字庫存品項 ID 做過濾" -#: stock/api.py:1426 +#: stock/api.py:1439 #, python-brace-format msgid "Stock item with ID {id} does not exist" -msgstr "" +msgstr "庫存品項 ID {id} 不存在" -#: stock/models.py:71 +#: stock/api.py:1516 +msgid "Include Part Variants" +msgstr "包括零件變數" + +#: stock/api.py:1546 +msgid "Date after" +msgstr "日前之後" + +#: stock/api.py:1550 +msgid "Date before" +msgstr "日期之前" + +#: stock/models.py:73 msgid "Stock Location type" msgstr "庫存地點類型" -#: stock/models.py:72 +#: stock/models.py:74 msgid "Stock Location types" msgstr "庫存地點類型" -#: stock/models.py:98 +#: stock/models.py:100 msgid "Default icon for all locations that have no icon set (optional)" msgstr "為所有沒有圖標的位置設置默認圖標(可選)" -#: stock/models.py:159 stock/models.py:1045 +#: stock/models.py:147 stock/models.py:1052 msgid "Stock Location" msgstr "庫存地點" -#: stock/models.py:160 users/ruleset.py:29 +#: stock/models.py:148 users/ruleset.py:29 msgid "Stock Locations" msgstr "庫存地點" -#: stock/models.py:209 stock/models.py:1210 +#: stock/models.py:197 stock/models.py:1217 msgid "Owner" msgstr "所有者" -#: stock/models.py:210 stock/models.py:1211 +#: stock/models.py:198 stock/models.py:1218 msgid "Select Owner" msgstr "選擇所有者" -#: stock/models.py:218 +#: stock/models.py:206 msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "庫存項可能不直接位於結構庫存地點,但可能位於其子地點。" -#: stock/models.py:225 users/models.py:497 +#: stock/models.py:213 users/models.py:497 msgid "External" msgstr "外部" -#: stock/models.py:226 +#: stock/models.py:214 msgid "This is an external stock location" msgstr "這是一個外部庫存地點" -#: stock/models.py:232 +#: stock/models.py:220 msgid "Location type" msgstr "位置類型" -#: stock/models.py:236 +#: stock/models.py:224 msgid "Stock location type of this location" msgstr "該位置的庫存地點類型" -#: stock/models.py:308 +#: stock/models.py:296 msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "您不能將此庫存地點設置為結構性,因為某些庫存項已經位於它!" -#: stock/models.py:594 +#: stock/models.py:585 #, python-brace-format msgid "{field} does not exist" msgstr "{field} 不存在" -#: stock/models.py:607 +#: stock/models.py:598 msgid "Part must be specified" msgstr "必須指定零件" -#: stock/models.py:904 +#: stock/models.py:911 msgid "Stock items cannot be located into structural stock locations!" msgstr "庫存項不能存放在結構性庫存地點!" -#: stock/models.py:931 stock/serializers.py:453 +#: stock/models.py:938 stock/serializers.py:457 msgid "Stock item cannot be created for virtual parts" msgstr "無法為虛擬零件創建庫存項" -#: stock/models.py:948 +#: stock/models.py:955 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "零件類型 ('{self.supplier_part.part}') 必須為 {self.part}" -#: stock/models.py:958 stock/models.py:971 +#: stock/models.py:965 stock/models.py:978 msgid "Quantity must be 1 for item with a serial number" msgstr "有序列號的項目的數量必須是1" -#: stock/models.py:961 +#: stock/models.py:968 msgid "Serial number cannot be set if quantity greater than 1" msgstr "如果數量大於1,則不能設置序列號" -#: stock/models.py:983 +#: stock/models.py:990 msgid "Item cannot belong to itself" msgstr "項目不能屬於其自身" -#: stock/models.py:988 +#: stock/models.py:995 msgid "Item must have a build reference if is_building=True" msgstr "如果is_building=True,則項必須具有構建引用" -#: stock/models.py:1001 +#: stock/models.py:1008 msgid "Build reference does not point to the same part object" msgstr "構建引用未指向同一零件對象" -#: stock/models.py:1015 +#: stock/models.py:1022 msgid "Parent Stock Item" msgstr "母庫存項目" -#: stock/models.py:1027 +#: stock/models.py:1034 msgid "Base part" msgstr "基礎零件" -#: stock/models.py:1037 +#: stock/models.py:1044 msgid "Select a matching supplier part for this stock item" msgstr "為此庫存項目選擇匹配的供應商零件" -#: stock/models.py:1049 +#: stock/models.py:1056 msgid "Where is this stock item located?" msgstr "這個庫存物品在哪裏?" -#: stock/models.py:1057 stock/serializers.py:1607 +#: stock/models.py:1064 stock/serializers.py:1640 msgid "Packaging this stock item is stored in" msgstr "包裝此庫存物品存儲在" -#: stock/models.py:1063 +#: stock/models.py:1070 msgid "Installed In" msgstr "安裝於" -#: stock/models.py:1068 +#: stock/models.py:1075 msgid "Is this item installed in another item?" msgstr "此項目是否安裝在另一個項目中?" -#: stock/models.py:1087 +#: stock/models.py:1094 msgid "Serial number for this item" msgstr "此項目的序列號" -#: stock/models.py:1104 stock/serializers.py:1592 +#: stock/models.py:1111 stock/serializers.py:1625 msgid "Batch code for this stock item" msgstr "此庫存項的批號" -#: stock/models.py:1109 +#: stock/models.py:1116 msgid "Stock Quantity" msgstr "庫存數量" -#: stock/models.py:1119 +#: stock/models.py:1126 msgid "Source Build" msgstr "源代碼構建" -#: stock/models.py:1122 +#: stock/models.py:1129 msgid "Build for this stock item" msgstr "為此庫存項目構建" -#: stock/models.py:1129 +#: stock/models.py:1136 msgid "Consumed By" msgstr "消費者" -#: stock/models.py:1132 +#: stock/models.py:1139 msgid "Build order which consumed this stock item" msgstr "構建消耗此庫存項的生產訂單" -#: stock/models.py:1141 +#: stock/models.py:1148 msgid "Source Purchase Order" msgstr "採購訂單來源" -#: stock/models.py:1145 +#: stock/models.py:1152 msgid "Purchase order for this stock item" msgstr "此庫存商品的採購訂單" -#: stock/models.py:1151 +#: stock/models.py:1158 msgid "Destination Sales Order" msgstr "目的地銷售訂單" -#: stock/models.py:1162 +#: stock/models.py:1169 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "庫存物品的到期日。在此日期之後,庫存將被視為過期" -#: stock/models.py:1180 +#: stock/models.py:1187 msgid "Delete on deplete" msgstr "耗盡時刪除" -#: stock/models.py:1181 +#: stock/models.py:1188 msgid "Delete this Stock Item when stock is depleted" msgstr "當庫存耗盡時刪除此庫存項" -#: stock/models.py:1202 +#: stock/models.py:1209 msgid "Single unit purchase price at time of purchase" msgstr "購買時一個單位的價格" -#: stock/models.py:1233 +#: stock/models.py:1240 msgid "Converted to part" msgstr "轉換為零件" -#: stock/models.py:1435 +#: stock/models.py:1442 msgid "Quantity exceeds available stock" msgstr "數量超過可用庫存" -#: stock/models.py:1869 +#: stock/models.py:1893 msgid "Part is not set as trackable" msgstr "零件未設置為可跟蹤" -#: stock/models.py:1875 +#: stock/models.py:1899 msgid "Quantity must be integer" msgstr "數量必須是整數" -#: stock/models.py:1883 +#: stock/models.py:1907 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "數量不得超過現有庫存量 ({self.quantity})" -#: stock/models.py:1889 +#: stock/models.py:1913 msgid "Serial numbers must be provided as a list" msgstr "序列號需以清單提供" -#: stock/models.py:1894 +#: stock/models.py:1918 msgid "Quantity does not match serial numbers" msgstr "數量不匹配序列號" -#: stock/models.py:1912 +#: stock/models.py:1936 msgid "Cannot assign stock to structural location" -msgstr "" +msgstr "無法將庫存分配到結構位置" -#: stock/models.py:2029 stock/models.py:2934 +#: stock/models.py:2053 stock/models.py:3023 msgid "Test template does not exist" msgstr "測試模板不存在" -#: stock/models.py:2047 +#: stock/models.py:2071 msgid "Stock item has been assigned to a sales order" msgstr "庫存項已分配到銷售訂單" -#: stock/models.py:2051 +#: stock/models.py:2075 msgid "Stock item is installed in another item" msgstr "庫存項已安裝在另一個項目中" -#: stock/models.py:2054 +#: stock/models.py:2078 msgid "Stock item contains other items" msgstr "庫存項包含其他項目" -#: stock/models.py:2057 +#: stock/models.py:2081 msgid "Stock item has been assigned to a customer" msgstr "庫存項已分配給客户" -#: stock/models.py:2060 stock/models.py:2243 +#: stock/models.py:2084 stock/models.py:2270 msgid "Stock item is currently in production" msgstr "庫存項目前正在生產" -#: stock/models.py:2063 +#: stock/models.py:2087 msgid "Serialized stock cannot be merged" msgstr "序列化的庫存不能合併" -#: stock/models.py:2070 stock/serializers.py:1462 +#: stock/models.py:2094 stock/serializers.py:1495 msgid "Duplicate stock items" msgstr "複製庫存項" -#: stock/models.py:2074 +#: stock/models.py:2098 msgid "Stock items must refer to the same part" msgstr "庫存項必須指相同零件" -#: stock/models.py:2082 +#: stock/models.py:2106 msgid "Stock items must refer to the same supplier part" msgstr "庫存項必須是同一供應商的零件" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Stock status codes must match" msgstr "庫存狀態碼必須匹配" -#: stock/models.py:2366 +#: stock/models.py:2411 msgid "StockItem cannot be moved as it is not in stock" msgstr "庫存項不能移動,因為它沒有庫存" -#: stock/models.py:2835 +#: stock/models.py:2905 msgid "Stock Item Tracking" msgstr "庫存項跟蹤" -#: stock/models.py:2866 +#: stock/models.py:2955 msgid "Entry notes" msgstr "條目註釋" -#: stock/models.py:2906 +#: stock/models.py:2995 msgid "Stock Item Test Result" msgstr "庫存項測試結果" -#: stock/models.py:2937 +#: stock/models.py:3026 msgid "Value must be provided for this test" msgstr "必須為此測試提供值" -#: stock/models.py:2941 +#: stock/models.py:3030 msgid "Attachment must be uploaded for this test" msgstr "測試附件必須上傳" -#: stock/models.py:2946 +#: stock/models.py:3035 msgid "Invalid value for this test" msgstr "此測試的值無效" -#: stock/models.py:2970 +#: stock/models.py:3059 msgid "Test result" msgstr "測試結果" -#: stock/models.py:2977 +#: stock/models.py:3066 msgid "Test output value" msgstr "測試輸出值" -#: stock/models.py:2985 stock/serializers.py:248 +#: stock/models.py:3074 stock/serializers.py:250 msgid "Test result attachment" msgstr "測驗結果附件" -#: stock/models.py:2989 +#: stock/models.py:3078 msgid "Test notes" msgstr "測試備註" -#: stock/models.py:2997 +#: stock/models.py:3086 msgid "Test station" msgstr "測試站" -#: stock/models.py:2998 +#: stock/models.py:3087 msgid "The identifier of the test station where the test was performed" msgstr "進行測試的測試站的標識符" -#: stock/models.py:3004 +#: stock/models.py:3093 msgid "Started" msgstr "已開始" -#: stock/models.py:3005 +#: stock/models.py:3094 msgid "The timestamp of the test start" msgstr "測試開始的時間戳" -#: stock/models.py:3011 +#: stock/models.py:3100 msgid "Finished" msgstr "已完成" -#: stock/models.py:3012 +#: stock/models.py:3101 msgid "The timestamp of the test finish" msgstr "測試結束的時間戳" @@ -8662,246 +8819,246 @@ msgstr "選擇要生成序列號的零件" msgid "Quantity of serial numbers to generate" msgstr "要生成的序列號的數量" -#: stock/serializers.py:235 +#: stock/serializers.py:236 msgid "Test template for this result" msgstr "此結果的測試模板" -#: stock/serializers.py:278 +#: stock/serializers.py:280 msgid "No matching test found for this part" -msgstr "" +msgstr "未找到與此零件相符的測試" -#: stock/serializers.py:282 +#: stock/serializers.py:284 msgid "Template ID or test name must be provided" msgstr "必須提供模板 ID 或測試名稱" -#: stock/serializers.py:292 +#: stock/serializers.py:294 msgid "The test finished time cannot be earlier than the test started time" msgstr "測試完成時間不能早於測試開始時間" -#: stock/serializers.py:414 +#: stock/serializers.py:418 msgid "Parent Item" msgstr "父項" -#: stock/serializers.py:415 +#: stock/serializers.py:419 msgid "Parent stock item" msgstr "父庫存項" -#: stock/serializers.py:438 +#: stock/serializers.py:442 msgid "Use pack size when adding: the quantity defined is the number of packs" msgstr "添加時使用包裝尺寸:定義的數量是包裝的數量" -#: stock/serializers.py:440 +#: stock/serializers.py:444 msgid "Use pack size" msgstr "使用包裝數" -#: stock/serializers.py:447 stock/serializers.py:700 +#: stock/serializers.py:451 stock/serializers.py:706 msgid "Enter serial numbers for new items" msgstr "輸入新項目的序列號" -#: stock/serializers.py:565 +#: stock/serializers.py:559 msgid "Supplier Part Number" msgstr "供應商零件編號" -#: stock/serializers.py:623 users/models.py:187 +#: stock/serializers.py:629 users/models.py:187 msgid "Expired" msgstr "已過期" -#: stock/serializers.py:629 +#: stock/serializers.py:635 msgid "Child Items" msgstr "子項目" -#: stock/serializers.py:633 +#: stock/serializers.py:639 msgid "Tracking Items" msgstr "跟蹤項目" -#: stock/serializers.py:639 +#: stock/serializers.py:645 msgid "Purchase price of this stock item, per unit or pack" msgstr "此庫存商品的購買價格,單位或包裝" -#: stock/serializers.py:677 +#: stock/serializers.py:683 msgid "Enter number of stock items to serialize" msgstr "輸入要序列化的庫存項目數量" -#: stock/serializers.py:685 stock/serializers.py:728 stock/serializers.py:766 -#: stock/serializers.py:904 +#: stock/serializers.py:691 stock/serializers.py:734 stock/serializers.py:772 +#: stock/serializers.py:910 msgid "No stock item provided" msgstr "未提供庫存項" -#: stock/serializers.py:693 +#: stock/serializers.py:699 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({q})" msgstr "數量不得超過現有庫存量 ({q})" -#: stock/serializers.py:711 stock/serializers.py:1419 stock/serializers.py:1740 -#: stock/serializers.py:1789 +#: stock/serializers.py:717 stock/serializers.py:1452 stock/serializers.py:1773 +#: stock/serializers.py:1822 msgid "Destination stock location" msgstr "目標庫存位置" -#: stock/serializers.py:731 +#: stock/serializers.py:737 msgid "Serial numbers cannot be assigned to this part" msgstr "此零件不能分配序列號" -#: stock/serializers.py:751 +#: stock/serializers.py:757 msgid "Serial numbers already exist" msgstr "序列號已存在" -#: stock/serializers.py:801 +#: stock/serializers.py:807 msgid "Select stock item to install" msgstr "選擇要安裝的庫存項目" -#: stock/serializers.py:808 +#: stock/serializers.py:814 msgid "Quantity to Install" msgstr "安裝數量" -#: stock/serializers.py:809 +#: stock/serializers.py:815 msgid "Enter the quantity of items to install" msgstr "輸入要安裝的項目數量" -#: stock/serializers.py:814 stock/serializers.py:894 stock/serializers.py:1036 +#: stock/serializers.py:820 stock/serializers.py:900 stock/serializers.py:1042 msgid "Add transaction note (optional)" msgstr "添加交易記錄 (可選)" -#: stock/serializers.py:822 +#: stock/serializers.py:828 msgid "Quantity to install must be at least 1" msgstr "安裝數量必須至少為1" -#: stock/serializers.py:830 +#: stock/serializers.py:836 msgid "Stock item is unavailable" msgstr "庫存項不可用" -#: stock/serializers.py:841 +#: stock/serializers.py:847 msgid "Selected part is not in the Bill of Materials" msgstr "所選零件不在物料清單中" -#: stock/serializers.py:854 +#: stock/serializers.py:860 msgid "Quantity to install must not exceed available quantity" msgstr "安裝數量不得超過可用數量" -#: stock/serializers.py:889 +#: stock/serializers.py:895 msgid "Destination location for uninstalled item" msgstr "已卸載項目的目標位置" -#: stock/serializers.py:927 +#: stock/serializers.py:933 msgid "Select part to convert stock item into" msgstr "選擇要將庫存項目轉換為的零件" -#: stock/serializers.py:940 +#: stock/serializers.py:946 msgid "Selected part is not a valid option for conversion" msgstr "所選零件不是有效的轉換選項" -#: stock/serializers.py:957 +#: stock/serializers.py:963 msgid "Cannot convert stock item with assigned SupplierPart" msgstr "無法轉換已分配供應商零件的庫存項" -#: stock/serializers.py:991 +#: stock/serializers.py:997 msgid "Stock item status code" msgstr "庫存項狀態代碼" -#: stock/serializers.py:1020 +#: stock/serializers.py:1026 msgid "Select stock items to change status" msgstr "選擇要更改狀態的庫存項目" -#: stock/serializers.py:1026 +#: stock/serializers.py:1032 msgid "No stock items selected" msgstr "未選擇庫存商品" -#: stock/serializers.py:1122 stock/serializers.py:1191 +#: stock/serializers.py:1139 stock/serializers.py:1210 msgid "Sublocations" msgstr "轉租" -#: stock/serializers.py:1186 +#: stock/serializers.py:1205 msgid "Parent stock location" msgstr "上級庫存地點" -#: stock/serializers.py:1291 +#: stock/serializers.py:1324 msgid "Part must be salable" msgstr "零件必須可銷售" -#: stock/serializers.py:1295 +#: stock/serializers.py:1328 msgid "Item is allocated to a sales order" msgstr "物料已分配到銷售訂單" -#: stock/serializers.py:1299 +#: stock/serializers.py:1332 msgid "Item is allocated to a build order" msgstr "項目被分配到生產訂單中" -#: stock/serializers.py:1323 +#: stock/serializers.py:1356 msgid "Customer to assign stock items" msgstr "客户分配庫存項目" -#: stock/serializers.py:1329 +#: stock/serializers.py:1362 msgid "Selected company is not a customer" msgstr "所選公司不是客户" -#: stock/serializers.py:1337 +#: stock/serializers.py:1370 msgid "Stock assignment notes" msgstr "庫存分配説明" -#: stock/serializers.py:1347 stock/serializers.py:1635 +#: stock/serializers.py:1380 stock/serializers.py:1668 msgid "A list of stock items must be provided" msgstr "必須提供庫存物品清單" -#: stock/serializers.py:1426 +#: stock/serializers.py:1459 msgid "Stock merging notes" msgstr "庫存合併説明" -#: stock/serializers.py:1431 +#: stock/serializers.py:1464 msgid "Allow mismatched suppliers" msgstr "允許不匹配的供應商" -#: stock/serializers.py:1432 +#: stock/serializers.py:1465 msgid "Allow stock items with different supplier parts to be merged" msgstr "允許合併具有不同供應商零件的庫存項目" -#: stock/serializers.py:1437 +#: stock/serializers.py:1470 msgid "Allow mismatched status" msgstr "允許不匹配的狀態" -#: stock/serializers.py:1438 +#: stock/serializers.py:1471 msgid "Allow stock items with different status codes to be merged" msgstr "允許合併具有不同狀態代碼的庫存項目" -#: stock/serializers.py:1448 +#: stock/serializers.py:1481 msgid "At least two stock items must be provided" msgstr "必須提供至少兩件庫存物品" -#: stock/serializers.py:1515 +#: stock/serializers.py:1548 msgid "No Change" msgstr "無更改" -#: stock/serializers.py:1553 +#: stock/serializers.py:1586 msgid "StockItem primary key value" msgstr "庫存項主鍵值" -#: stock/serializers.py:1566 +#: stock/serializers.py:1599 msgid "Stock item is not in stock" msgstr "庫存項無庫存" -#: stock/serializers.py:1569 +#: stock/serializers.py:1602 msgid "Stock item is already in stock" msgstr "庫存項已在庫" -#: stock/serializers.py:1583 +#: stock/serializers.py:1616 msgid "Quantity must not be negative" msgstr "數量不可為負" -#: stock/serializers.py:1625 +#: stock/serializers.py:1658 msgid "Stock transaction notes" msgstr "庫存交易記錄" -#: stock/serializers.py:1795 +#: stock/serializers.py:1828 msgid "Merge into existing stock" msgstr "合併至現有庫存" -#: stock/serializers.py:1796 +#: stock/serializers.py:1829 msgid "Merge returned items into existing stock items if possible" msgstr "可行時將退回項目併入現有庫存" -#: stock/serializers.py:1839 +#: stock/serializers.py:1872 msgid "Next Serial Number" msgstr "下一個序列號" -#: stock/serializers.py:1845 +#: stock/serializers.py:1878 msgid "Previous Serial Number" msgstr "上一個序列號" @@ -8959,7 +9116,7 @@ msgstr "已手動刪除庫存" #: stock/status_codes.py:56 msgid "Serialized stock items" -msgstr "" +msgstr "序列化庫存品項" #: stock/status_codes.py:58 msgid "Returned to stock" @@ -9383,83 +9540,83 @@ msgstr "銷售訂單" msgid "Return Orders" msgstr "退貨訂單" -#: users/serializers.py:187 +#: users/serializers.py:190 msgid "Username" msgstr "用户名" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First Name" msgstr "名" -#: users/serializers.py:190 +#: users/serializers.py:193 msgid "First name of the user" msgstr "用户的名字(不包括姓氏)" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last Name" msgstr "姓" -#: users/serializers.py:194 +#: users/serializers.py:197 msgid "Last name of the user" msgstr "用户的姓氏" -#: users/serializers.py:198 +#: users/serializers.py:201 msgid "Email address of the user" msgstr "用户的電子郵件地址" -#: users/serializers.py:304 +#: users/serializers.py:309 msgid "Staff" msgstr "職員" -#: users/serializers.py:305 +#: users/serializers.py:310 msgid "Does this user have staff permissions" msgstr "此用户是否擁有員工權限" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Superuser" msgstr "超級用户" -#: users/serializers.py:310 +#: users/serializers.py:315 msgid "Is this user a superuser" msgstr "此用户是否為超級用户" -#: users/serializers.py:314 +#: users/serializers.py:319 msgid "Is this user account active" msgstr "此用户帳户是否已激活" -#: users/serializers.py:326 +#: users/serializers.py:331 msgid "Only a superuser can adjust this field" msgstr "僅超級使用者可調整此欄位" -#: users/serializers.py:354 +#: users/serializers.py:359 msgid "Password" msgstr "密碼" -#: users/serializers.py:355 +#: users/serializers.py:360 msgid "Password for the user" msgstr "使用者密碼" -#: users/serializers.py:361 +#: users/serializers.py:366 msgid "Override warning" msgstr "忽略警告" -#: users/serializers.py:362 +#: users/serializers.py:367 msgid "Override the warning about password rules" msgstr "忽略密碼規則警告" -#: users/serializers.py:418 +#: users/serializers.py:423 msgid "You do not have permission to create users" msgstr "您沒有建立使用者的權限" -#: users/serializers.py:439 +#: users/serializers.py:444 msgid "Your account has been created." msgstr "您的帳號已經建立完成。" -#: users/serializers.py:441 +#: users/serializers.py:446 msgid "Please use the password reset function to login" msgstr "請使用重設密碼功能來登入" -#: users/serializers.py:447 +#: users/serializers.py:452 msgid "Welcome to InvenTree" msgstr "歡迎使用 InvenTree" diff --git a/src/backend/InvenTree/machine/machine_types/label_printer.py b/src/backend/InvenTree/machine/machine_types/label_printer.py index f2499187b3..f598f5dd55 100644 --- a/src/backend/InvenTree/machine/machine_types/label_printer.py +++ b/src/backend/InvenTree/machine/machine_types/label_printer.py @@ -111,7 +111,7 @@ class LabelPrinterBaseDriver(BaseDriver): Returns: A class instance of a DRF serializer class, by default this an instance of self.PrintingOptionsSerializer using the *args, **kwargs if existing for this driver """ - return self.PrintingOptionsSerializer(*args, **kwargs) # type: ignore + return self.PrintingOptionsSerializer(*args, **kwargs) # --- helper functions @property diff --git a/src/backend/InvenTree/machine/serializers.py b/src/backend/InvenTree/machine/serializers.py index 669ffe0b75..9bfe97a749 100644 --- a/src/backend/InvenTree/machine/serializers.py +++ b/src/backend/InvenTree/machine/serializers.py @@ -138,7 +138,7 @@ class MachineSettingSerializer(GenericReferencedSettingSerializer): """Custom init method to make the config_type field read only.""" super().__init__(*args, **kwargs) - self.Meta.read_only_fields = ['config_type'] # type: ignore + self.Meta.read_only_fields = ['config_type'] class BaseMachineClassSerializer(serializers.Serializer): diff --git a/src/backend/InvenTree/machine/tests.py b/src/backend/InvenTree/machine/tests.py index 99f9decc35..120ab004b9 100755 --- a/src/backend/InvenTree/machine/tests.py +++ b/src/backend/InvenTree/machine/tests.py @@ -232,10 +232,10 @@ class TestLabelPrinterMachineType(InvenTreeAPITestCase): machine = self.create_machine() # setup the label app - apps.get_app_config('report').create_default_labels() # type: ignore + apps.get_app_config('report').create_default_labels() plg_registry.reload_plugins() - config = cast(PluginConfig, plg_registry.get_plugin(plugin_ref).plugin_config()) # type: ignore + config = cast(PluginConfig, plg_registry.get_plugin(plugin_ref).plugin_config()) config.active = True config.save() diff --git a/src/backend/InvenTree/manage.py b/src/backend/InvenTree/manage.py index 988cd61e3f..9e1d7b6804 100755 --- a/src/backend/InvenTree/manage.py +++ b/src/backend/InvenTree/manage.py @@ -17,6 +17,7 @@ def main(): 'available on your PYTHONPATH environment variable? Did you ' 'forget to activate a virtual environment?' ) from exc + execute_from_command_line(sys.argv) diff --git a/src/backend/InvenTree/order/api.py b/src/backend/InvenTree/order/api.py index 899f2b4411..bed41d14a1 100644 --- a/src/backend/InvenTree/order/api.py +++ b/src/backend/InvenTree/order/api.py @@ -18,6 +18,7 @@ from django_ical.views import ICalFeed from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import extend_schema, extend_schema_field from rest_framework import status +from rest_framework.exceptions import NotFound from rest_framework.response import Response import build.models @@ -31,16 +32,12 @@ from generic.states.api import StatusView from InvenTree.api import ( BulkUpdateMixin, ListCreateDestroyAPIView, - MetadataView, ParameterListMixin, + meta_path, ) from InvenTree.fields import InvenTreeOutputOption, OutputConfiguration -from InvenTree.filters import ( - SEARCH_ORDER_FILTER, - SEARCH_ORDER_FILTER_ALIAS, - InvenTreeDateFilter, -) -from InvenTree.helpers import str2bool +from InvenTree.filters import SEARCH_ORDER_FILTER, InvenTreeDateFilter +from InvenTree.helpers import current_date, str2bool from InvenTree.helpers_model import construct_absolute_url, get_base_url from InvenTree.mixins import ( CreateAPI, @@ -228,6 +225,14 @@ class OrderFilter(FilterSet): label=_('Target Date After'), field_name='target_date', lookup_expr='gt' ) + updated_before = InvenTreeDateFilter( + label=_('Updated Before'), field_name='updated_at', lookup_expr='lt' + ) + + updated_after = InvenTreeDateFilter( + label=_('Updated After'), field_name='updated_at', lookup_expr='gt' + ) + min_date = InvenTreeDateFilter(label=_('Min Date'), method='filter_min_date') def filter_min_date(self, queryset, name, value): @@ -362,7 +367,9 @@ class PurchaseOrderOutputOptions(OutputConfiguration): class PurchaseOrderMixin(SerializerContextMixin): """Mixin class for PurchaseOrder endpoints.""" - queryset = models.PurchaseOrder.objects.all() + queryset = models.PurchaseOrder.objects.all().prefetch_related( + 'supplier', 'created_by' + ) serializer_class = serializers.PurchaseOrderSerializer def get_queryset(self, *args, **kwargs): @@ -371,8 +378,6 @@ class PurchaseOrderMixin(SerializerContextMixin): queryset = serializers.PurchaseOrderSerializer.annotate_queryset(queryset) - queryset = queryset.prefetch_related('supplier', 'created_by') - return queryset @@ -391,7 +396,7 @@ class PurchaseOrderList( """ filterset_class = PurchaseOrderFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER output_options = PurchaseOrderOutputOptions ordering_field_aliases = { @@ -420,6 +425,7 @@ class PurchaseOrderList( 'responsible', 'total_price', 'project_code', + 'updated_at', ] ordering = '-reference' @@ -700,7 +706,7 @@ class PurchaseOrderLineItemList( serializer.data, status=status.HTTP_201_CREATED, headers=headers ) - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER ordering_field_aliases = { 'MPN': 'part__manufacturer_part__MPN', @@ -824,15 +830,15 @@ class SalesOrderFilter(OrderFilter): class SalesOrderMixin(SerializerContextMixin): """Mixin class for SalesOrder endpoints.""" - queryset = models.SalesOrder.objects.all() + queryset = models.SalesOrder.objects.all().prefetch_related( + 'customer', 'created_by' + ) serializer_class = serializers.SalesOrderSerializer def get_queryset(self, *args, **kwargs): """Return annotated queryset for this endpoint.""" queryset = super().get_queryset(*args, **kwargs) - queryset = queryset.prefetch_related('customer', 'created_by') - queryset = serializers.SalesOrderSerializer.annotate_queryset(queryset) return queryset @@ -859,7 +865,7 @@ class SalesOrderList( """ filterset_class = SalesOrderFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER output_options = SalesOrderOutputOptions ordering_field_aliases = { @@ -882,6 +888,7 @@ class SalesOrderList( 'shipment_date', 'total_price', 'project_code', + 'updated_at', ] search_fields = [ @@ -1043,7 +1050,7 @@ class SalesOrderLineItemList( filterset_class = SalesOrderLineItemFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER output_options = SalesOrderLineItemOutputOptions @@ -1051,6 +1058,7 @@ class SalesOrderLineItemList( 'customer', 'order', 'part', + 'IPN', 'part__name', 'quantity', 'allocated', @@ -1063,6 +1071,7 @@ class SalesOrderLineItemList( ordering_field_aliases = { 'customer': 'order__customer__name', 'part': 'part__name', + 'IPN': 'part__IPN', 'order': 'order__reference', } @@ -1287,7 +1296,7 @@ class SalesOrderAllocationList( """API endpoint for listing SalesOrderAllocation objects.""" filterset_class = SalesOrderAllocationFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER output_options = SalesOrderAllocationOutputOptions ordering_fields = [ @@ -1397,7 +1406,7 @@ class SalesOrderShipmentList(SalesOrderShipmentMixin, ListCreateAPI): """API list endpoint for SalesOrderShipment model.""" filterset_class = SalesOrderShipmentFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER ordering_fields = ['reference', 'delivery_date', 'shipment_date', 'allocated_items'] search_fields = [ @@ -1418,20 +1427,46 @@ class SalesOrderShipmentComplete(CreateAPI): queryset = models.SalesOrderShipment.objects.all() serializer_class = serializers.SalesOrderShipmentCompleteSerializer + def get_shipment(self): + """Return the shipment associated with this endpoint.""" + try: + shipment = models.SalesOrderShipment.objects.get( + pk=self.kwargs.get('pk', None) + ) + except (ValueError, models.SalesOrderShipment.DoesNotExist): + raise NotFound(detail=_('Shipment not found')) + + return shipment + def get_serializer_context(self): """Pass the request object to the serializer.""" ctx = super().get_serializer_context() ctx['request'] = self.request - - try: - ctx['shipment'] = models.SalesOrderShipment.objects.get( - pk=self.kwargs.get('pk', None) - ) - except Exception: - pass + ctx['shipment'] = self.get_shipment() return ctx + @extend_schema(responses={200: common.serializers.TaskDetailSerializer}) + def post(self, request, *args, **kwargs): + """Override the post method to handle shipment completion.""" + shipment = self.get_shipment() + + serializer = self.get_serializer(shipment, data=request.data, partial=True) + serializer.is_valid(raise_exception=True) + data = serializer.validated_data + + task_id = shipment.complete_shipment( + request.user, + tracking_number=data.get('tracking_number', shipment.tracking_number), + invoice_number=data.get('invoice_number', shipment.invoice_number), + link=data.get('link', shipment.link), + shipment_date=data.get('shipment_date', None) or current_date(), + delivery_date=data.get('delivery_date', shipment.delivery_date), + ) + + response = common.serializers.TaskDetailSerializer.from_task(task_id).data + return Response(response, status=response['http_status']) + class ReturnOrderFilter(OrderFilter): """Custom API filters for the ReturnOrderList endpoint.""" @@ -1526,7 +1561,7 @@ class ReturnOrderList( """API endpoint for accessing a list of ReturnOrder objects.""" filterset_class = ReturnOrderFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER output_options = ReturnOrderOutputOptions @@ -1547,6 +1582,7 @@ class ReturnOrderList( 'target_date', 'complete_date', 'project_code', + 'updated_at', ] search_fields = [ @@ -1676,7 +1712,20 @@ class ReturnOrderLineItemList( output_options = ReturnOrderLineItemOutputOptions - ordering_fields = ['reference', 'target_date', 'received_date'] + ordering_fields = [ + 'part', + 'IPN', + 'stock', + 'reference', + 'target_date', + 'received_date', + ] + + ordering_field_aliases = { + 'part': 'item__part__name', + 'IPN': 'item__part__IPN', + 'stock': ['item__quantity', 'item__serial_int', 'item__serial'], + } search_fields = [ 'item__serial', @@ -1888,11 +1937,7 @@ order_api_urls = [ name='api-po-complete', ), path('issue/', PurchaseOrderIssue.as_view(), name='api-po-issue'), - path( - 'metadata/', - MetadataView.as_view(model=models.PurchaseOrder), - name='api-po-metadata', - ), + meta_path(models.PurchaseOrder), path( 'receive/', PurchaseOrderReceive.as_view(), @@ -1920,11 +1965,7 @@ order_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=models.PurchaseOrderLineItem), - name='api-po-line-metadata', - ), + meta_path(models.PurchaseOrderLineItem), path( '', PurchaseOrderLineItemDetail.as_view(), @@ -1942,11 +1983,7 @@ order_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=models.PurchaseOrderExtraLine), - name='api-po-extra-line-metadata', - ), + meta_path(models.PurchaseOrderExtraLine), path( '', PurchaseOrderExtraLineDetail.as_view(), @@ -1974,11 +2011,7 @@ order_api_urls = [ SalesOrderShipmentComplete.as_view(), name='api-so-shipment-ship', ), - path( - 'metadata/', - MetadataView.as_view(model=models.SalesOrderShipment), - name='api-so-shipment-metadata', - ), + meta_path(models.SalesOrderShipment), path( '', SalesOrderShipmentDetail.as_view(), @@ -2015,11 +2048,7 @@ order_api_urls = [ SalesOrderComplete.as_view(), name='api-so-complete', ), - path( - 'metadata/', - MetadataView.as_view(model=models.SalesOrder), - name='api-so-metadata', - ), + meta_path(models.SalesOrder), # SalesOrder detail endpoint path('', SalesOrderDetail.as_view(), name='api-so-detail'), ]), @@ -2042,11 +2071,7 @@ order_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=models.SalesOrderLineItem), - name='api-so-line-metadata', - ), + meta_path(models.SalesOrderLineItem), path( '', SalesOrderLineItemDetail.as_view(), @@ -2064,11 +2089,7 @@ order_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=models.SalesOrderExtraLine), - name='api-so-extra-line-metadata', - ), + meta_path(models.SalesOrderExtraLine), path( '', SalesOrderExtraLineDetail.as_view(), @@ -2120,11 +2141,7 @@ order_api_urls = [ ReturnOrderReceive.as_view(), name='api-return-order-receive', ), - path( - 'metadata/', - MetadataView.as_view(model=models.ReturnOrder), - name='api-return-order-metadata', - ), + meta_path(models.ReturnOrder), path( '', ReturnOrderDetail.as_view(), name='api-return-order-detail' ), @@ -2148,11 +2165,7 @@ order_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=models.ReturnOrderLineItem), - name='api-return-order-line-metadata', - ), + meta_path(models.ReturnOrderLineItem), path( '', ReturnOrderLineItemDetail.as_view(), @@ -2179,11 +2192,7 @@ order_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=models.ReturnOrderExtraLine), - name='api-return-order-extra-line-metadata', - ), + meta_path(models.ReturnOrderExtraLine), path( '', ReturnOrderExtraLineDetail.as_view(), 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 ea3ad7223d..283af0886b 100644 --- a/src/backend/InvenTree/order/migrations/0085_auto_20230322_1056.py +++ b/src/backend/InvenTree/order/migrations/0085_auto_20230322_1056.py @@ -34,7 +34,7 @@ class Migration(migrations.Migration): ('reference', models.CharField(blank=True, help_text='Line item reference', max_length=100, verbose_name='Reference')), ('notes', models.CharField(blank=True, help_text='Line item notes', max_length=500, verbose_name='Notes')), ('target_date', models.DateField(blank=True, help_text='Target date for this line item (leave blank to use the target date from the order)', null=True, verbose_name='Target Date')), - ('received_date', models.DateField(blank=True, help_text='The date this this return item was received', null=True, verbose_name='Received Date')), + ('received_date', models.DateField(blank=True, help_text='The date this return item was received', null=True, verbose_name='Received Date')), ('outcome', models.PositiveIntegerField(choices=[(10, 'Pending'), (20, 'Return'), (30, 'Repair'), (50, 'Refund'), (40, 'Replace'), (60, 'Reject')], default=10, help_text='Outcome for this line item', verbose_name='Outcome')), ('price_currency', djmoney.models.fields.CurrencyField(choices=[], default='', editable=False, max_length=3)), ('price', InvenTree.fields.InvenTreeModelMoneyField(blank=True, currency_choices=[], decimal_places=6, default_currency='', help_text='Cost associated with return or repair for this line item', max_digits=19, null=True, validators=[djmoney.models.validators.MinMoneyValidator(0)], verbose_name='Price')), diff --git a/src/backend/InvenTree/order/migrations/0115_purchaseorder_updated_at_returnorder_updated_at_and_more.py b/src/backend/InvenTree/order/migrations/0115_purchaseorder_updated_at_returnorder_updated_at_and_more.py new file mode 100644 index 0000000000..837e2a35e4 --- /dev/null +++ b/src/backend/InvenTree/order/migrations/0115_purchaseorder_updated_at_returnorder_updated_at_and_more.py @@ -0,0 +1,43 @@ +# Generated by Django 5.2.11 on 2026-02-19 22:31 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("order", "0114_purchaseorderextraline_project_code_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="purchaseorder", + name="updated_at", + field=models.DateTimeField( + blank=True, + null=True, + help_text="Timestamp of last update", + verbose_name="Updated At", + ), + ), + migrations.AddField( + model_name="returnorder", + name="updated_at", + field=models.DateTimeField( + blank=True, + null=True, + help_text="Timestamp of last update", + verbose_name="Updated At", + ), + ), + migrations.AddField( + model_name="salesorder", + name="updated_at", + field=models.DateTimeField( + blank=True, + null=True, + help_text="Timestamp of last update", + verbose_name="Updated At", + ), + ), + ] diff --git a/src/backend/InvenTree/order/models.py b/src/backend/InvenTree/order/models.py index d159b988eb..2d6f93c932 100644 --- a/src/backend/InvenTree/order/models.py +++ b/src/backend/InvenTree/order/models.py @@ -1,7 +1,7 @@ """Order model definitions.""" from decimal import Decimal -from typing import Any, Optional +from typing import Any, Optional, TypedDict from django.contrib.auth.models import User from django.core.exceptions import ValidationError @@ -9,7 +9,7 @@ from django.core.validators import MinValueValidator from django.db import models, transaction from django.db.models import F, Q, QuerySet, Sum from django.db.models.functions import Coalesce -from django.db.models.signals import post_save +from django.db.models.signals import post_delete, post_save from django.dispatch.dispatcher import receiver from django.urls import reverse from django.utils.translation import gettext_lazy as _ @@ -179,7 +179,7 @@ class TotalPriceMixin(models.Model): return total -class BaseOrderReportContext(report.mixins.BaseReportContext): +class BaseOrderReportContext(report.mixins.BaseReportContext, TypedDict): """Base context for all order models. Attributes: @@ -199,7 +199,7 @@ class BaseOrderReportContext(report.mixins.BaseReportContext): title: str -class PurchaseOrderReportContext(report.mixins.BaseReportContext): +class PurchaseOrderReportContext(report.mixins.BaseReportContext, TypedDict): """Context for the purchase order model. Attributes: @@ -221,7 +221,7 @@ class PurchaseOrderReportContext(report.mixins.BaseReportContext): supplier: Optional[Company] -class SalesOrderReportContext(report.mixins.BaseReportContext): +class SalesOrderReportContext(report.mixins.BaseReportContext, TypedDict): """Context for the sales order model. Attributes: @@ -243,7 +243,7 @@ class SalesOrderReportContext(report.mixins.BaseReportContext): customer: Optional[Company] -class ReturnOrderReportContext(report.mixins.BaseReportContext): +class ReturnOrderReportContext(report.mixins.BaseReportContext, TypedDict): """Context for the return order model. Attributes: @@ -299,6 +299,7 @@ class Order( REQUIRE_RESPONSIBLE_SETTING = None UNLOCK_SETTING = None + IMPORT_ID_FIELDS = ['reference'] class Meta: """Metaclass options. Abstract ensures no database table is created.""" @@ -330,6 +331,8 @@ class Order( if not self.creation_date: self.creation_date = InvenTree.helpers.current_date() + self.updated_at = InvenTree.helpers.current_time() + super().save(*args, **kwargs) def check_locked(self, db: bool = False) -> bool: @@ -432,7 +435,8 @@ class Order( Makes use of the overdue_filter() method to avoid code duplication """ return ( - self.__class__.objects.filter(pk=self.pk) + self.__class__.objects + .filter(pk=self.pk) .filter(self.__class__.overdue_filter()) .exists() ) @@ -496,6 +500,13 @@ class Order( help_text=_('Date order was issued'), ) + updated_at = models.DateTimeField( + null=True, + blank=True, + verbose_name=_('Updated At'), + help_text=_('Timestamp of last update'), + ) + responsible = models.ForeignKey( UserModels.Owner, on_delete=models.SET_NULL, @@ -559,7 +570,9 @@ class PurchaseOrder(TotalPriceMixin, Order): def report_context(self) -> PurchaseOrderReportContext: """Return report context data for this PurchaseOrder.""" - return {**super().report_context(), 'supplier': self.supplier} + return_ctx = super().report_context() + return_ctx.update({'supplier': self.supplier}) + return return_ctx def get_absolute_url(self) -> str: """Get the 'web' URL for this order.""" @@ -1258,7 +1271,9 @@ class SalesOrder(TotalPriceMixin, Order): def report_context(self) -> SalesOrderReportContext: """Generate report context data for this SalesOrder.""" - return {**super().report_context(), 'customer': self.customer} + return_ctx = super().report_context() + return_ctx.update({'customer': self.customer}) + return return_ctx def get_absolute_url(self) -> str: """Get the 'web' URL for this order.""" @@ -1862,12 +1877,14 @@ class PurchaseOrderLineItem(OrderLineItem): verbose_name = _('Purchase Order Line Item') - # Filter for determining if a particular PurchaseOrderLineItem is overdue - OVERDUE_FILTER = ( - Q(received__lt=F('quantity')) - & ~Q(target_date=None) - & Q(target_date__lt=InvenTree.helpers.current_date()) - ) + @classmethod + def get_overdue_filter(cls): + """Filter for determining if a particular PurchaseOrderLineItem is overdue.""" + return ( + Q(received__lt=F('quantity')) + & ~Q(target_date=None) + & Q(target_date__lt=InvenTree.helpers.current_date()) + ) @staticmethod def get_api_url() -> str: @@ -2066,12 +2083,14 @@ class SalesOrderLineItem(OrderLineItem): verbose_name = _('Sales Order Line Item') - # Filter for determining if a particular SalesOrderLineItem is overdue - OVERDUE_FILTER = ( - Q(shipped__lt=F('quantity')) - & ~Q(target_date=None) - & Q(target_date__lt=InvenTree.helpers.current_date()) - ) + @classmethod + def get_overdue_filter(cls): + """Filter for determining if a particular SalesOrderLineItem is overdue.""" + return ( + Q(shipped__lt=F('quantity')) + & ~Q(target_date=None) + & Q(target_date__lt=InvenTree.helpers.current_date()) + ) @staticmethod def get_api_url(): @@ -2182,7 +2201,7 @@ class SalesOrderLineItem(OrderLineItem): return self.shipped >= self.quantity -class SalesOrderShipmentReportContext(report.mixins.BaseReportContext): +class SalesOrderShipmentReportContext(report.mixins.BaseReportContext, TypedDict): """Context for the SalesOrderShipment model. Attributes: @@ -2403,54 +2422,45 @@ class SalesOrderShipment( 1. Update any stock items associated with this shipment 2. Update the "shipped" quantity of all associated line items 3. Set the "shipment_date" to now + + Arguments: + user: The user who is completing this shipment + + Returns: + task_id: The ID of the background task which is processing this shipment """ import order.tasks # Check if the shipment can be completed (throw error if not) self.check_can_complete() - # Update the "shipment" date - self.shipment_date = kwargs.get( - 'shipment_date', InvenTree.helpers.current_date() - ) - self.shipped_by = user - - # Was a tracking number provided? - tracking_number = kwargs.get('tracking_number') - - if tracking_number is not None: + if tracking_number := kwargs.get('tracking_number'): self.tracking_number = tracking_number - # Was an invoice number provided? - invoice_number = kwargs.get('invoice_number') - - if invoice_number is not None: + if invoice_number := kwargs.get('invoice_number'): self.invoice_number = invoice_number - # Was a link provided? - link = kwargs.get('link') - - if link is not None: + if link := kwargs.get('link'): self.link = link - # Was a delivery date provided? - delivery_date = kwargs.get('delivery_date') - - if delivery_date is not None: - self.delivery_date = delivery_date - self.save() + # Extract shipment date and delivery date from kwargs (if provided) + shipment_date = kwargs.get('shipment_date', InvenTree.helpers.current_date()) + delivery_date = kwargs.get('delivery_date') + # Offload the "completion" of each line item to the background worker # This may take some time, and we don't want to block the main thread - InvenTree.tasks.offload_task( + task_id = InvenTree.tasks.offload_task( order.tasks.complete_sales_order_shipment, - shipment_id=self.pk, - user_id=user.pk if user else None, + self.pk, + user.pk if user else None, + shipment_date, + delivery_date=delivery_date, group='sales_order', ) - trigger_event(SalesOrderEvents.SHIPMENT_COMPLETE, id=self.pk) + return task_id class SalesOrderExtraLine(OrderExtraLine): @@ -2656,7 +2666,9 @@ class ReturnOrder(TotalPriceMixin, Order): def report_context(self) -> ReturnOrderReportContext: """Generate report context data for this ReturnOrder.""" - return {**super().report_context(), 'customer': self.customer} + return_ctx = super().report_context() + return_ctx.update({'customer': self.customer}) + return return_ctx def get_absolute_url(self): """Get the 'web' URL for this order.""" @@ -2909,18 +2921,23 @@ class ReturnOrder(TotalPriceMixin, Order): line.item = stock_item line.save() - status = kwargs.get('status') + status = kwargs.get('status', StockStatus.QUARANTINED.value) if status is None: status = StockStatus.QUARANTINED.value - deltas = {'status': status, 'returnorder': self.pk, 'location': location.pk} + deltas = { + 'status': status, + 'returnorder': self.pk, + 'location': location.pk, + 'quantity': float(line.quantity), + } if stock_item.customer: deltas['customer'] = stock_item.customer.pk # Update the StockItem - stock_item.status = status + stock_item.set_status(status) stock_item.location = location stock_item.customer = None stock_item.sales_order = None @@ -3021,7 +3038,7 @@ class ReturnOrderLineItem(StatusCodeMixin, OrderLineItem): null=True, blank=True, verbose_name=_('Received Date'), - help_text=_('The date this this return item was received'), + help_text=_('The date this return item was received'), ) @property @@ -3065,3 +3082,43 @@ class ReturnOrderExtraLine(OrderExtraLine): verbose_name=_('Order'), help_text=_('Return Order'), ) + + +def _touch_order_updated_at(instance): + """Bump updated_at on the parent order without triggering a full save.""" + if not InvenTree.ready.canAppAccessDatabase(allow_test=True): + return + instance.order.__class__.objects.filter(pk=instance.order_id).update( + updated_at=InvenTree.helpers.current_time() + ) + + +@receiver(post_save, sender=PurchaseOrderLineItem, dispatch_uid='po_lineitem_post_save') +@receiver( + post_delete, sender=PurchaseOrderLineItem, dispatch_uid='po_lineitem_post_delete' +) +@receiver( + post_save, sender=PurchaseOrderExtraLine, dispatch_uid='po_extraline_post_save' +) +@receiver( + post_delete, sender=PurchaseOrderExtraLine, dispatch_uid='po_extraline_post_delete' +) +@receiver(post_save, sender=SalesOrderLineItem, dispatch_uid='so_lineitem_post_save') +@receiver( + post_delete, sender=SalesOrderLineItem, dispatch_uid='so_lineitem_post_delete' +) +@receiver(post_save, sender=SalesOrderExtraLine, dispatch_uid='so_extraline_post_save') +@receiver( + post_delete, sender=SalesOrderExtraLine, dispatch_uid='so_extraline_post_delete' +) +@receiver(post_save, sender=ReturnOrderLineItem, dispatch_uid='ro_lineitem_post_save') +@receiver( + post_delete, sender=ReturnOrderLineItem, dispatch_uid='ro_lineitem_post_delete' +) +@receiver(post_save, sender=ReturnOrderExtraLine, dispatch_uid='ro_extraline_post_save') +@receiver( + post_delete, sender=ReturnOrderExtraLine, dispatch_uid='ro_extraline_post_delete' +) +def update_order_on_lineitem_change(sender, instance, **kwargs): + """Update parent order updated_at when any line item is saved or deleted.""" + _touch_order_updated_at(instance) diff --git a/src/backend/InvenTree/order/serializers.py b/src/backend/InvenTree/order/serializers.py index 33e5b6cf6f..a2f179425e 100644 --- a/src/backend/InvenTree/order/serializers.py +++ b/src/backend/InvenTree/order/serializers.py @@ -14,9 +14,9 @@ from sql_util.utils import SubqueryCount, SubquerySum import build.serializers import common.filters +import company.models as company_models import order.models import part.filters as part_filters -import part.models as part_models import stock.models import stock.serializers from company.serializers import ( @@ -27,13 +27,7 @@ from company.serializers import ( ) from generic.states.fields import InvenTreeCustomStatusSerializerMixin from importer.registry import register_importer -from InvenTree.helpers import ( - current_date, - extract_serial_numbers, - hash_barcode, - normalize, - str2bool, -) +from InvenTree.helpers import extract_serial_numbers, hash_barcode, normalize, str2bool from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.serializers import ( FilterableSerializerMixin, @@ -75,7 +69,7 @@ class DuplicateOrderSerializer(serializers.Serializer): class Meta: """Metaclass options.""" - fields = ['order_id', 'copy_lines', 'copy_extra_lines'] + fields = ['order_id', 'copy_lines', 'copy_extra_lines', 'copy_parameters'] order_id = serializers.IntegerField( required=True, label=_('Order ID'), help_text=_('ID of the order to duplicate') @@ -95,6 +89,13 @@ class DuplicateOrderSerializer(serializers.Serializer): help_text=_('Copy extra line items from the original order'), ) + copy_parameters = serializers.BooleanField( + required=False, + default=True, + label=_('Copy Parameters'), + help_text=_('Copy order parameters from the original order'), + ) + class AbstractOrderSerializer( DataImportExportSerializerMixin, FilterableSerializerMixin, serializers.Serializer @@ -242,6 +243,7 @@ class AbstractOrderSerializer( order_id = duplicate.get('order_id', None) copy_lines = duplicate.get('copy_lines', True) copy_extra_lines = duplicate.get('copy_extra_lines', True) + copy_parameters = duplicate.get('copy_parameters', True) try: copy_from = instance.__class__.objects.get(pk=order_id) @@ -260,6 +262,9 @@ class AbstractOrderSerializer( line.order = instance line.save() + if copy_parameters: + instance.copy_parameters_from(copy_from) + return instance @@ -373,8 +378,14 @@ class PurchaseOrderSerializer( 'total_price', 'order_currency', 'destination', + 'updated_at', ]) - read_only_fields = ['issue_date', 'complete_date', 'creation_date'] + read_only_fields = [ + 'issue_date', + 'complete_date', + 'creation_date', + 'updated_at', + ] extra_kwargs = { 'supplier': {'required': True}, 'order_currency': {'required': False}, @@ -577,7 +588,7 @@ class PurchaseOrderLineItemSerializer( queryset = queryset.annotate( overdue=Case( When( - order.models.PurchaseOrderLineItem.OVERDUE_FILTER, + order.models.PurchaseOrderLineItem.get_overdue_filter(), then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()), @@ -587,7 +598,7 @@ class PurchaseOrderLineItemSerializer( return queryset part = serializers.PrimaryKeyRelatedField( - queryset=part_models.SupplierPart.objects.all(), + queryset=company_models.SupplierPart.objects.all(), many=False, required=True, allow_null=True, @@ -639,7 +650,7 @@ class PurchaseOrderLineItemSerializer( help_text=_( 'Automatically calculate purchase price based on supplier part data' ), - default=True, + default=False, ) destination_detail = enable_filter( @@ -1025,8 +1036,10 @@ class SalesOrderSerializer( 'order_currency', 'shipments_count', 'completed_shipments_count', + 'allocated_lines', + 'updated_at', ]) - read_only_fields = ['status', 'creation_date', 'shipment_date'] + read_only_fields = ['status', 'creation_date', 'shipment_date', 'updated_at'] extra_kwargs = {'order_currency': {'required': False}} def skip_create_fields(self): @@ -1040,6 +1053,7 @@ class SalesOrderSerializer( """Add extra information to the queryset. - Number of line items in the SalesOrder + - Number of fully allocated line items - Number of completed line items in the SalesOrder - Overdue status of the SalesOrder """ @@ -1049,6 +1063,19 @@ class SalesOrderSerializer( completed_lines=SubqueryCount('lines', filter=Q(quantity__lte=F('shipped'))) ) + queryset = queryset.annotate( + allocated_lines=SubqueryCount( + 'lines', + filter=Q(part__virtual=True) + | Q(shipped__gte=F('quantity')) + | Q( + quantity__lte=Coalesce( + SubquerySum('allocations__quantity'), Decimal(0) + ) + ), + ) + ) + queryset = queryset.annotate( overdue=Case( When( @@ -1084,6 +1111,10 @@ class SalesOrderSerializer( read_only=True, allow_null=True, label=_('Completed Shipments') ) + allocated_lines = serializers.IntegerField( + read_only=True, allow_null=True, label=_('Allocated Lines') + ) + class SalesOrderIssueSerializer(OrderAdjustSerializer): """Serializer for issuing a SalesOrder.""" @@ -1135,7 +1166,7 @@ class SalesOrderLineItemSerializer( overdue=Case( When( Q(order__status__in=SalesOrderStatusGroups.OPEN) - & order.models.SalesOrderLineItem.OVERDUE_FILTER, + & order.models.SalesOrderLineItem.get_overdue_filter(), then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()), @@ -1464,35 +1495,6 @@ class SalesOrderShipmentCompleteSerializer(serializers.ModelSerializer): return data - def save(self): - """Save the serializer to complete the SalesOrderShipment.""" - shipment = self.context.get('shipment', None) - - if not shipment: - return - - data = self.validated_data - - request = self.context.get('request') - user = request.user if request else None - - # Extract shipping date (defaults to today's date) - now = current_date() - shipment_date = data.get('shipment_date', now) - if shipment_date is None: - # Shipment date should not be None - check above only - # checks if shipment_date exists in data - shipment_date = now - - shipment.complete_shipment( - user, - tracking_number=data.get('tracking_number', shipment.tracking_number), - invoice_number=data.get('invoice_number', shipment.invoice_number), - link=data.get('link', shipment.link), - shipment_date=shipment_date, - delivery_date=data.get('delivery_date', shipment.delivery_date), - ) - class SalesOrderShipmentAllocationItemSerializer(serializers.Serializer): """A serializer for allocating a single stock-item against a SalesOrder shipment.""" @@ -1899,8 +1901,9 @@ class ReturnOrderSerializer( 'customer_reference', 'order_currency', 'total_price', + 'updated_at', ]) - read_only_fields = ['creation_date'] + read_only_fields = ['creation_date', 'updated_at'] def skip_create_fields(self): """Skip these fields when instantiating a new object.""" diff --git a/src/backend/InvenTree/order/tasks.py b/src/backend/InvenTree/order/tasks.py index fea6891b34..d9065c2d20 100644 --- a/src/backend/InvenTree/order/tasks.py +++ b/src/backend/InvenTree/order/tasks.py @@ -1,6 +1,7 @@ """Background tasks for the 'order' app.""" from datetime import datetime, timedelta +from typing import Optional from django.contrib.auth.models import Group, User from django.db import transaction @@ -236,29 +237,39 @@ def check_overdue_return_orders(): @tracer.start_as_current_span('complete_sales_order_shipment') -def complete_sales_order_shipment(shipment_id: int, user_id: int) -> None: +def complete_sales_order_shipment( + shipment_id: int, + user_id: int, + shipment_date: str, + delivery_date: Optional[str] = None, +) -> None: """Complete allocations for a pending shipment against a SalesOrder. + Arguments: + shipment_id: The ID of the SalesOrderShipment object to complete + user_id: The ID of the user performing the completion action + shipment_date: The date that the shipment was completed (if None, then the current date is used) + delivery_date: The date that the shipment was delivered (optional) + At this stage, the shipment is assumed to be complete, and we need to perform the required "processing" tasks. """ - try: - shipment = order.models.SalesOrderShipment.objects.get(pk=shipment_id) - except Exception: - # Shipping object does not exist - logger.warning( - 'Failed to complete shipment - no matching SalesOrderShipment for ID <%s>', - shipment_id, - ) - return - - try: - user = User.objects.get(pk=user_id) - except Exception: - user = None + # Do not handle any lookup errors here + # If the shipment cannot be found, then we want the task to fail (and retry later) + shipment = order.models.SalesOrderShipment.objects.get(pk=shipment_id) + user = User.objects.filter(pk=user_id).first() if user_id else None logger.info('Completing SalesOrderShipment <%s>', shipment) with transaction.atomic(): for allocation in shipment.allocations.all(): allocation.complete_allocation(user=user) + + # Once all allocations have been completed, we can mark the shipment as complete + shipment.shipment_date = shipment_date or datetime.now().date() + shipment.delivery_date = delivery_date + shipment.shipped_by = user + shipment.save() + + # Trigger event signalling that the shipment has been completed + trigger_event(SalesOrderEvents.SHIPMENT_COMPLETE, id=shipment.pk) diff --git a/src/backend/InvenTree/order/test_api.py b/src/backend/InvenTree/order/test_api.py index 58c74e7f6d..3151570a29 100644 --- a/src/backend/InvenTree/order/test_api.py +++ b/src/backend/InvenTree/order/test_api.py @@ -1267,7 +1267,7 @@ class PurchaseOrderReceiveTest(OrderTest): ], 'location': location.pk, }, - max_query_count=104 + 2 * N_LINES, + max_query_count=104 + 3 * N_LINES, ).data # Check for expected response @@ -1574,6 +1574,65 @@ class SalesOrderTest(OrderTest): expected_code=201, ) + def test_so_duplicate(self): + """Test SalesOrder duplication via the API.""" + from common.models import Parameter, ParameterTemplate + + url = reverse('api-so-list') + + self.assignRole('sales_order.add') + + so = models.SalesOrder.objects.get(pk=1) + self.assertEqual(so.status, SalesOrderStatus.PENDING) + + # Add some parameters to the sales order + for idx in range(5): + template = ParameterTemplate.objects.create(name=f'Template {idx}') + + Parameter.objects.create( + template=template, + model_type=so.get_content_type(), + model_id=so.pk, + data=f'Value {idx}', + ) + + self.assertEqual(so.parameters.count(), 5) + + # Create a duplicate of this sales order + # We explicitly specify "copy_parameters" as False, so the duplicated sales order should not have any parameters + response = self.post( + url, + { + 'reference': 'SO-12345', + 'customer': so.customer.pk, + 'duplicate': {'order_id': so.pk, 'copy_parameters': False}, + }, + ) + + duplicate_id = response.data['pk'] + duplicate_so = models.SalesOrder.objects.get(pk=duplicate_id) + + self.assertEqual(duplicate_so.reference, 'SO-12345') + self.assertEqual(duplicate_so.customer, so.customer) + self.assertEqual(duplicate_so.parameters.count(), 0) + + # Duplicate again, with default values for the "duplicate" options (which should result in parameters being copied) + response = self.post( + url, + { + 'reference': 'SO-12346', + 'customer': so.customer.pk, + 'duplicate': {'order_id': so.pk}, + }, + ) + + duplicate_id = response.data['pk'] + duplicate_so = models.SalesOrder.objects.get(pk=duplicate_id) + + self.assertEqual(duplicate_so.reference, 'SO-12346') + self.assertEqual(duplicate_so.customer, so.customer) + self.assertEqual(duplicate_so.parameters.count(), 5) + def test_so_cancel(self): """Test API endpoint for cancelling a SalesOrder.""" so = models.SalesOrder.objects.get(pk=1) @@ -1931,7 +1990,11 @@ class SalesOrderLineItemTest(OrderTest): self.filter({'order': order_id, 'completed': 0}, 3) # Finally, mark this shipment as 'shipped' - self.post(reverse('api-so-shipment-ship', kwargs={'pk': shipment.pk}), {}) + self.post( + reverse('api-so-shipment-ship', kwargs={'pk': shipment.pk}), + {}, + expected_code=200, + ) # Filter by 'completed' status self.filter({'order': order_id, 'completed': 1}, 2) @@ -2219,7 +2282,7 @@ class SalesOrderAllocateTest(OrderTest): 'shipment_date': '2020-12-05', 'delivery_date': '2023-12-05', }, - expected_code=201, + expected_code=200, ) self.shipment.refresh_from_db() @@ -2751,63 +2814,3 @@ class ReturnOrderLineItemTests(InvenTreeAPITestCase): line = models.ReturnOrderLineItem.objects.get(pk=1) self.assertEqual(float(line.price.amount), 15.75) - - -class OrderMetadataAPITest(InvenTreeAPITestCase): - """Unit tests for the various metadata endpoints of API.""" - - fixtures = [ - 'category', - 'part', - 'company', - 'location', - 'supplier_part', - 'stock', - 'order', - 'sales_order', - 'return_order', - ] - - roles = ['purchase_order.change', 'sales_order.change', 'return_order.change'] - - def metatester(self, apikey, model): - """Generic tester.""" - modeldata = model.objects.first() - - # Useless test unless a model object is found - self.assertIsNotNone(modeldata) - - url = reverse(apikey, kwargs={'pk': modeldata.pk}) - - # Metadata is initially null - self.assertIsNone(modeldata.metadata) - - numstr = f'12{len(apikey)}' - - self.patch( - url, - {'metadata': {f'abc-{numstr}': f'xyz-{apikey}-{numstr}'}}, - expected_code=200, - ) - - # Refresh - modeldata.refresh_from_db() - self.assertEqual( - modeldata.get_metadata(f'abc-{numstr}'), f'xyz-{apikey}-{numstr}' - ) - - def test_metadata(self): - """Test all endpoints.""" - for apikey, model in { - 'api-po-metadata': models.PurchaseOrder, - 'api-po-line-metadata': models.PurchaseOrderLineItem, - 'api-po-extra-line-metadata': models.PurchaseOrderExtraLine, - 'api-so-shipment-metadata': models.SalesOrderShipment, - 'api-so-metadata': models.SalesOrder, - 'api-so-line-metadata': models.SalesOrderLineItem, - 'api-so-extra-line-metadata': models.SalesOrderExtraLine, - 'api-return-order-metadata': models.ReturnOrder, - 'api-return-order-line-metadata': models.ReturnOrderLineItem, - 'api-return-order-extra-line-metadata': models.ReturnOrderExtraLine, - }.items(): - self.metatester(apikey, model) diff --git a/src/backend/InvenTree/order/test_sales_order.py b/src/backend/InvenTree/order/test_sales_order.py index 1a42a7549a..0186cfd90c 100644 --- a/src/backend/InvenTree/order/test_sales_order.py +++ b/src/backend/InvenTree/order/test_sales_order.py @@ -287,8 +287,15 @@ class SalesOrderTest(InvenTreeTestCase): # Mark the shipments as complete self.shipment.complete_shipment(None) + self.shipment.refresh_from_db() self.assertTrue(self.shipment.is_complete()) + # Check that each of the items have now been allocated to the customer + for allocation in self.shipment.allocations.all(): + item = allocation.item + self.assertEqual(item.customer, self.order.customer) + self.assertEqual(item.sales_order, self.order) + # Now, should be OK to ship result = self.order.ship_order(None) @@ -329,6 +336,88 @@ class SalesOrderTest(InvenTreeTestCase): self.assertEqual(self.line.fulfilled_quantity(), 50) self.assertEqual(self.line.allocated_quantity(), 50) + def test_shipment_many_items(self): + """Test completion of a shipment with many items. + + Here, we create a shipment with a very large number of items assigned, + and check that the shipment can be completed without error. + + This test is designed to test that the database does not error out, + even when a large number of items are assigned to a shipment. + + Ref: https://github.com/inventree/InvenTree/pull/11500 + """ + customer = Company.objects.create(name='Customer 2', is_customer=True) + + # Create a new SalesOrder + so = SalesOrder.objects.create(customer=customer, reference='SO-5678') + + shipment = so.shipments.first() + + if not shipment: + shipment = SalesOrderShipment.objects.create( + reference='SHIP-MENT', order=so + ) + + # Create a part + part = Part.objects.create(name='Part 1', salable=True) + + N_ITEMS = 750 + + line = SalesOrderLineItem.objects.create(part=part, order=so, quantity=N_ITEMS) + + # Create stock items, and assign to shipment + allocations = [] + stock_items = [] + + tree_id = StockItem.objects.all().order_by('-tree_id').first().tree_id + + for idx in range(N_ITEMS): + tree_id += 1 + + stock_items.append( + StockItem( + part=part, + quantity=1 + idx % 5, + level=0, + lft=0, + rght=0, + tree_id=tree_id, + ) + ) + + StockItem.objects.bulk_create(stock_items) + + # Check expected available quantity + self.assertEqual(part.total_stock, 2250) + + # Allocate a single quantity from each stock item to the shipment + for item in StockItem.objects.filter(part=part): + allocations.append( + SalesOrderAllocation( + line=line, shipment=shipment, item=item, quantity=1 + ) + ) + + SalesOrderAllocation.objects.bulk_create(allocations) + + # Validate initial conditions for the SalesOrderShipment + self.assertEqual(shipment.allocations.count(), N_ITEMS) + self.assertIsNone(shipment.shipment_date) + self.assertFalse(shipment.is_complete()) + self.assertTrue(shipment.check_can_complete(raise_error=False)) + + # Complete the shipment + shipment.complete_shipment(None) + + shipment.refresh_from_db() + self.assertIsNotNone(shipment.shipment_date) + self.assertTrue(shipment.is_complete()) + + # Part stock quantity should have reduced by 1 for each allocated item + part.refresh_from_db() + self.assertEqual(part.total_stock, 2250 - N_ITEMS) + def test_default_shipment(self): """Test sales order default shipment creation.""" # Default setting value should be False diff --git a/src/backend/InvenTree/order/tests.py b/src/backend/InvenTree/order/tests.py index 1712f68759..e4e04c82ee 100644 --- a/src/backend/InvenTree/order/tests.py +++ b/src/backend/InvenTree/order/tests.py @@ -25,7 +25,17 @@ from part.models import Part from stock.models import StockItem, StockLocation from users.models import Owner -from .models import PurchaseOrder, PurchaseOrderExtraLine, PurchaseOrderLineItem +from .models import ( + PurchaseOrder, + PurchaseOrderExtraLine, + PurchaseOrderLineItem, + ReturnOrder, + ReturnOrderExtraLine, + ReturnOrderLineItem, + SalesOrder, + SalesOrderExtraLine, + SalesOrderLineItem, +) class OrderTest(ExchangeRateMixin, PluginRegistryMixin, TestCase): @@ -369,7 +379,8 @@ class OrderTest(ExchangeRateMixin, PluginRegistryMixin, TestCase): order=po, part=sp_1, quantity=3, - purchase_price=Money(1000, 'USD'), # "Unit price" should be $100USD + # "Unit price" should be $100USD + purchase_price=Money(1000, 'USD'), ) # 13 x 0.1 = 1.3 @@ -569,3 +580,151 @@ class OrderTest(ExchangeRateMixin, PluginRegistryMixin, TestCase): p.set_metadata(k, k) self.assertEqual(len(p.metadata.keys()), 4) + + +class OrderUpdatedAtTest(TestCase): + """Tests to verify that the updated_at field is correctly maintained on all order types.""" + + def setUp(self): + """Set up objects for all three order types.""" + self.supplier = Company.objects.filter(is_supplier=True).first() + self.customer = Company.objects.filter(is_customer=True).first() + + self.po = PurchaseOrder.objects.create( + reference='PO-TEST-001', supplier=self.supplier + ) + self.so = SalesOrder.objects.create( + reference='SO-TEST-001', customer=self.customer + ) + self.ro = ReturnOrder.objects.create( + reference='RO-TEST-001', customer=self.customer + ) + + self.part = Part.objects.create(name='Test Part', description='Test Part') + self.stock_item = StockItem.objects.create(part=self.part, quantity=10) + + def _refresh(self, instance): + """Return a fresh copy of the instance from the database.""" + return instance.__class__.objects.get(pk=instance.pk) + + def test_updated_at_set_on_save(self): + """updated_at should be populated after the order is saved.""" + for instance in [self.po, self.so, self.ro]: + self.assertIsNotNone(self._refresh(instance).updated_at) + + def test_updated_at_changes_on_save(self): + """updated_at should advance when the order is saved again.""" + for instance in [self.po, self.so, self.ro]: + original = self._refresh(instance).updated_at + + instance.description = 'Updated description' + instance.save() + + refreshed = self._refresh(instance) + self.assertGreaterEqual(refreshed.updated_at, original) + + def test_updated_at_on_extra_line_add(self): + """updated_at should advance on the parent order when an extra line is added.""" + for instance, ExtraLine in [ + (self.po, PurchaseOrderExtraLine), + (self.so, SalesOrderExtraLine), + (self.ro, ReturnOrderExtraLine), + ]: + before = self._refresh(instance).updated_at + + ExtraLine.objects.create(order=instance, quantity=1) + + after = self._refresh(instance).updated_at + self.assertGreaterEqual(after, before) + + def test_updated_at_on_extra_line_update(self): + """updated_at should advance on the parent order when an extra line is updated.""" + for instance, ExtraLine in [ + (self.po, PurchaseOrderExtraLine), + (self.so, SalesOrderExtraLine), + (self.ro, ReturnOrderExtraLine), + ]: + line = ExtraLine.objects.create(order=instance, quantity=1) + + before = self._refresh(instance).updated_at + + line.quantity = 5 + line.save() + + after = self._refresh(instance).updated_at + self.assertGreaterEqual(after, before) + + def test_updated_at_on_extra_line_delete(self): + """updated_at should advance on the parent order when an extra line is deleted.""" + for instance, ExtraLine in [ + (self.po, PurchaseOrderExtraLine), + (self.so, SalesOrderExtraLine), + (self.ro, ReturnOrderExtraLine), + ]: + line = ExtraLine.objects.create(order=instance, quantity=1) + + before = self._refresh(instance).updated_at + + line.delete() + + after = self._refresh(instance).updated_at + self.assertGreaterEqual(after, before) + + def test_updated_at_on_line_item_add(self): + """updated_at should advance on the parent order when a regular line item is added.""" + before_po = self._refresh(self.po).updated_at + PurchaseOrderLineItem.objects.create(order=self.po, part=None, quantity=1) + self.assertGreaterEqual(self._refresh(self.po).updated_at, before_po) + + before_so = self._refresh(self.so).updated_at + SalesOrderLineItem.objects.create(order=self.so, part=None, quantity=1) + self.assertGreaterEqual(self._refresh(self.so).updated_at, before_so) + + before_ro = self._refresh(self.ro).updated_at + ReturnOrderLineItem.objects.create( + order=self.ro, item=self.stock_item, quantity=1 + ) + self.assertGreaterEqual(self._refresh(self.ro).updated_at, before_ro) + + def test_updated_at_on_line_item_update(self): + """updated_at should advance on the parent order when a regular line item is updated.""" + po_line = PurchaseOrderLineItem.objects.create( + order=self.po, part=None, quantity=1 + ) + so_line = SalesOrderLineItem.objects.create( + order=self.so, part=None, quantity=1 + ) + ro_line = ReturnOrderLineItem.objects.create( + order=self.ro, item=self.stock_item, quantity=1 + ) + + for instance, line in [ + (self.po, po_line), + (self.so, so_line), + (self.ro, ro_line), + ]: + before = self._refresh(instance).updated_at + line.quantity = 5 + line.save() + self.assertGreaterEqual(self._refresh(instance).updated_at, before) + + def test_updated_at_on_line_item_delete(self): + """updated_at should advance on the parent order when a regular line item is deleted.""" + po_line = PurchaseOrderLineItem.objects.create( + order=self.po, part=None, quantity=1 + ) + so_line = SalesOrderLineItem.objects.create( + order=self.so, part=None, quantity=1 + ) + ro_line = ReturnOrderLineItem.objects.create( + order=self.ro, item=self.stock_item, quantity=1 + ) + + for instance, line in [ + (self.po, po_line), + (self.so, so_line), + (self.ro, ro_line), + ]: + before = self._refresh(instance).updated_at + line.delete() + self.assertGreaterEqual(self._refresh(instance).updated_at, before) diff --git a/src/backend/InvenTree/part/admin.py b/src/backend/InvenTree/part/admin.py index 377a0b1a4a..d1e0398952 100644 --- a/src/backend/InvenTree/part/admin.py +++ b/src/backend/InvenTree/part/admin.py @@ -25,7 +25,6 @@ class PartAdmin(admin.ModelAdmin): 'variant_of', 'category', 'default_location', - 'default_supplier', 'bom_checked_by', 'creation_user', ] diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index 8e969dea30..dbf8cf815a 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -8,25 +8,24 @@ import django_filters.rest_framework.filters as rest_filters from django_filters.rest_framework import DjangoFilterBackend from django_filters.rest_framework.filterset import FilterSet from drf_spectacular.types import OpenApiTypes -from drf_spectacular.utils import extend_schema_field +from drf_spectacular.utils import extend_schema, extend_schema_field from rest_framework import serializers from rest_framework.response import Response +import common.serializers import part.tasks as part_tasks from data_exporter.mixins import DataExportViewMixin from InvenTree.api import ( BulkDeleteMixin, BulkUpdateMixin, ListCreateDestroyAPIView, - MetadataView, ParameterListMixin, + meta_path, ) from InvenTree.fields import InvenTreeOutputOption, OutputConfiguration from InvenTree.filters import ( ORDER_FILTER, - ORDER_FILTER_ALIAS, SEARCH_ORDER_FILTER, - SEARCH_ORDER_FILTER_ALIAS, InvenTreeDateFilter, InvenTreeSearchFilter, NumberOrNullFilter, @@ -75,20 +74,6 @@ class CategoryMixin: queryset = part_serializers.CategorySerializer.annotate_queryset(queryset) return queryset - def get_serializer_context(self): - """Add extra context to the serializer for the CategoryDetail endpoint.""" - ctx = super().get_serializer_context() - - try: - ctx['starred_categories'] = [ - star.category for star in self.request.user.starred_categories.all() - ] - except AttributeError: - # Error is thrown if the view does not have an associated request - ctx['starred_categories'] = [] - - return ctx - class CategoryFilter(FilterSet): """Custom filterset class for the PartCategoryList endpoint.""" @@ -162,7 +147,7 @@ class CategoryFilter(FilterSet): Note: If the "parent" filter is provided, we offload the logic to that method. """ - parent = str2bool(self.data.get('parent', None)) + parent = self.data.get('parent', None) top_level = str2bool(self.data.get('top_level', None)) # If the parent is *not* provided, update the results based on the "cascade" value @@ -268,14 +253,13 @@ class CategoryDetail(CategoryMixin, OutputOptionsMixin, CustomRetrieveUpdateDest """Perform 'update' function and mark this part as 'starred' (or not).""" # Clean up input data data = self.clean_data(request.data) + response = super().update(request, *args, **kwargs) if 'starred' in data: starred = str2bool(data.get('starred', False)) self.get_object().set_starred(request.user, starred, include_parents=False) - response = super().update(request, *args, **kwargs) - return response def destroy(self, request, *args, **kwargs): @@ -302,7 +286,7 @@ class CategoryTree(ListAPI): queryset = PartCategory.objects.all() serializer_class = part_serializers.CategoryTree - filter_backends = ORDER_FILTER_ALIAS + filter_backends = ORDER_FILTER ordering_fields = ['level', 'name', 'subcategories'] @@ -616,8 +600,18 @@ class PartValidateBOM(RetrieveUpdateAPI): queryset = Part.objects.all() serializer_class = part_serializers.PartBomValidateSerializer + @extend_schema( + responses={ + 200: common.serializers.TaskDetailSerializer, + 404: common.serializers.TaskDetailSerializer, + } + ) def update(self, request, *args, **kwargs): - """Validate the referenced BomItem instance.""" + """Validate the referenced BomItem instance. + + As this task if offloaded to the background worker, + we return information about the background task which is performing the validation. + """ part = self.get_object() partial = kwargs.pop('partial', False) @@ -631,7 +625,7 @@ class PartValidateBOM(RetrieveUpdateAPI): valid = str2bool(serializer.validated_data.get('valid', False)) # BOM validation may take some time, so we offload it to a background task - offload_task( + task_id = offload_task( part_tasks.validate_bom, part.pk, valid, @@ -639,10 +633,8 @@ class PartValidateBOM(RetrieveUpdateAPI): group='part', ) - # Re-serialize the response - serializer = self.get_serializer(part, many=False) - - return Response(serializer.data) + response = common.serializers.TaskDetailSerializer.from_task(task_id).data + return Response(response, status=response['http_status']) class PartFilter(FilterSet): @@ -1009,7 +1001,9 @@ class PartMixin(SerializerContextMixin): """Mixin class for Part API endpoints.""" serializer_class = part_serializers.PartSerializer - queryset = Part.objects.all().select_related('pricing_data') + queryset = ( + Part.objects.all().select_related('pricing_data').prefetch_related('category') + ) starred_parts = None is_create = False @@ -1027,27 +1021,8 @@ class PartMixin(SerializerContextMixin): # Indicate that we can create a new Part via this endpoint kwargs['create'] = self.is_create - # Pass a list of "starred" parts to the current user to the serializer - # We do this to reduce the number of database queries required! - if ( - self.starred_parts is None - and self.request is not None - and hasattr(self.request.user, 'starred_parts') - ): - self.starred_parts = [ - star.part for star in self.request.user.starred_parts.all() - ] - kwargs['starred_parts'] = self.starred_parts - return super().get_serializer(*args, **kwargs) - def get_serializer_context(self): - """Extend serializer context data.""" - context = super().get_serializer_context() - context['request'] = self.request - - return context - class PartOutputOptions(OutputConfiguration): """Output options for Part endpoints.""" @@ -1078,7 +1053,7 @@ class PartList( filterset_class = PartFilter is_create = True - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER ordering_fields = [ 'name', @@ -1132,6 +1107,7 @@ class PartDetail(PartMixin, OutputOptionsMixin, RetrieveUpdateDestroyAPI): """ # Clean input data data = self.clean_data(request.data) + response = super().update(request, *args, **kwargs) if 'starred' in data: starred = str2bool(data.get('starred', False)) @@ -1140,8 +1116,6 @@ class PartDetail(PartMixin, OutputOptionsMixin, RetrieveUpdateDestroyAPI): request.user, starred, include_variants=False, include_categories=False ) - response = super().update(request, *args, **kwargs) - return response @@ -1202,11 +1176,18 @@ class PartStocktakeFilter(FilterSet): fields = ['part'] -class PartStocktakeList(BulkDeleteMixin, ListCreateAPI): +class PartStocktakeMixin: + """Mixin class for PartStocktake API endpoints.""" + + queryset = PartStocktake.objects.all().prefetch_related('part') + serializer_class = part_serializers.PartStocktakeSerializer + + +class PartStocktakeList( + PartStocktakeMixin, DataExportViewMixin, BulkDeleteMixin, ListCreateAPI +): """API endpoint for listing part stocktake information.""" - queryset = PartStocktake.objects.all() - serializer_class = part_serializers.PartStocktakeSerializer filterset_class = PartStocktakeFilter def get_serializer_context(self): @@ -1224,14 +1205,65 @@ class PartStocktakeList(BulkDeleteMixin, ListCreateAPI): ordering = '-pk' -class PartStocktakeDetail(RetrieveUpdateDestroyAPI): +class PartStocktakeDetail(PartStocktakeMixin, RetrieveUpdateDestroyAPI): """Detail API endpoint for a single PartStocktake instance. Note: Only staff (admin) users can access this endpoint. """ + +class PartStocktakeGenerate(CreateAPI): + """API endpoint for generating a PartStocktake instance.""" + queryset = PartStocktake.objects.all() - serializer_class = part_serializers.PartStocktakeSerializer + serializer_class = part_serializers.PartStocktakeGenerateSerializer + + def post(self, request, *args, **kwargs): + """Perform stocktake generation on POST request.""" + from common.models import DataOutput + from part.stocktake import perform_stocktake + + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + + data = serializer.validated_data + + part = data.get('part', None) + category = data.get('category', None) + location = data.get('location', None) + + # Do we want to generate a report? + if data.get('generate_report', True): + report_output = DataOutput.objects.create( + user=request.user, output_type='stocktake' + ) + else: + report_output = None + + # Offload the actual stocktake generation to a background task, as it may take some time to complete + offload_task( + perform_stocktake, + part_id=part.pk if part else None, + category_id=category.pk if category else None, + location_id=location.pk if location else None, + generate_entry=data.get('generate_entry', True), + report_output_id=report_output.pk if report_output else None, + group='stocktake', + ) + + if report_output: + report_output.refresh_from_db() + + result = { + 'category': category, + 'location': location, + 'part': part, + 'output': report_output, + } + + output_serializer = part_serializers.PartStocktakeGenerateSerializer(result) + + return Response(output_serializer.data) class BomFilter(FilterSet): @@ -1245,11 +1277,11 @@ class BomFilter(FilterSet): # Filters for linked 'part' part_active = rest_filters.BooleanFilter( - label='Assembly part is active', field_name='part__active' + label=_('Assembly part is active'), field_name='part__active' ) part_trackable = rest_filters.BooleanFilter( - label='Assembly part is trackable', field_name='part__trackable' + label=_('Assembly part is trackable'), field_name='part__trackable' ) part_testable = rest_filters.BooleanFilter( @@ -1257,8 +1289,12 @@ class BomFilter(FilterSet): ) # Filters for linked 'sub_part' + sub_part_active = rest_filters.BooleanFilter( + label=_('Component part is active'), field_name='sub_part__active' + ) + sub_part_trackable = rest_filters.BooleanFilter( - label='Component part is trackable', field_name='sub_part__trackable' + label=_('Component part is trackable'), field_name='sub_part__trackable' ) sub_part_testable = rest_filters.BooleanFilter( @@ -1266,15 +1302,15 @@ class BomFilter(FilterSet): ) sub_part_assembly = rest_filters.BooleanFilter( - label='Component part is an assembly', field_name='sub_part__assembly' + label=_('Component part is an assembly'), field_name='sub_part__assembly' ) sub_part_virtual = rest_filters.BooleanFilter( - label='Component part is virtual', field_name='sub_part__virtual' + label=_('Component part is virtual'), field_name='sub_part__virtual' ) available_stock = rest_filters.BooleanFilter( - label='Has available stock', method='filter_available_stock' + label=_('Has available stock'), method='filter_available_stock' ) def filter_available_stock(self, queryset, name, value): @@ -1378,7 +1414,7 @@ class BomList( output_options = BomOutputOptions filterset_class = BomFilter - filter_backends = SEARCH_ORDER_FILTER_ALIAS + filter_backends = SEARCH_ORDER_FILTER search_fields = [ 'reference', @@ -1403,6 +1439,7 @@ class BomList( 'attrition', 'rounding_multiple', 'sub_part', + 'IPN', 'available_stock', 'allow_variants', 'inherited', @@ -1420,6 +1457,7 @@ class BomList( ordering_field_aliases = { 'category': 'sub_part__category__name', 'sub_part': 'sub_part__name', + 'IPN': 'sub_part__IPN', 'pricing_min': 'sub_part__pricing_data__overall_min', 'pricing_max': 'sub_part__pricing_data__overall_max', 'pricing_updated': 'sub_part__pricing_data__updated', @@ -1498,13 +1536,7 @@ part_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view( - model=PartCategoryParameterTemplate - ), - name='api-part-category-parameter-metadata', - ), + meta_path(PartCategoryParameterTemplate), path( '', CategoryParameterDetail.as_view(), @@ -1523,11 +1555,7 @@ part_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=PartCategory), - name='api-part-category-metadata', - ), + meta_path(PartCategory), # PartCategory detail endpoint path('', CategoryDetail.as_view(), name='api-part-category-detail'), ]), @@ -1542,11 +1570,7 @@ part_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=PartTestTemplate), - name='api-part-test-template-metadata', - ), + meta_path(PartTestTemplate), path( '', PartTestTemplateDetail.as_view(), @@ -1592,11 +1616,7 @@ part_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=PartRelated), - name='api-part-related-metadata', - ), + meta_path(PartRelated), path( '', PartRelatedDetail.as_view(), name='api-part-related-detail' ), @@ -1614,6 +1634,11 @@ part_api_urls = [ PartStocktakeDetail.as_view(), name='api-part-stocktake-detail', ), + path( + 'generate/', + PartStocktakeGenerate.as_view(), + name='api-part-stocktake-generate', + ), path('', PartStocktakeList.as_view(), name='api-part-stocktake-list'), ]), ), @@ -1647,9 +1672,7 @@ part_api_urls = [ 'bom-validate/', PartValidateBOM.as_view(), name='api-part-bom-validate' ), # Part metadata - path( - 'metadata/', MetadataView.as_view(model=Part), name='api-part-metadata' - ), + meta_path(Part), # Part pricing path('pricing/', PartPricingDetail.as_view(), name='api-part-pricing'), # Part detail endpoint @@ -1667,11 +1690,7 @@ bom_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=BomItemSubstitute), - name='api-bom-substitute-metadata', - ), + meta_path(BomItemSubstitute), path( '', BomItemSubstituteDetail.as_view(), @@ -1688,11 +1707,7 @@ bom_api_urls = [ '/', include([ path('validate/', BomItemValidate.as_view(), name='api-bom-item-validate'), - path( - 'metadata/', - MetadataView.as_view(model=BomItem), - name='api-bom-item-metadata', - ), + meta_path(BomItem), path('', BomDetail.as_view(), name='api-bom-item-detail'), ]), ), diff --git a/src/backend/InvenTree/part/filters.py b/src/backend/InvenTree/part/filters.py index ad4107566e..92887e57c8 100644 --- a/src/backend/InvenTree/part/filters.py +++ b/src/backend/InvenTree/part/filters.py @@ -297,7 +297,8 @@ def annotate_variant_quantity(subquery: Q, reference: str = 'quantity') -> Query """ return Coalesce( Subquery( - subquery.annotate( + subquery + .annotate( total=Func(F(reference), function='SUM', output_field=FloatField()) ) .values('total') @@ -324,7 +325,8 @@ def annotate_category_parts() -> QuerySet: return Coalesce( Subquery( - subquery.annotate( + subquery + .annotate( total=Func(F('pk'), function='COUNT', output_field=IntegerField()) ) .values('total') @@ -369,7 +371,8 @@ def annotate_sub_categories() -> QuerySet: return Coalesce( Subquery( - subquery.annotate( + subquery + .annotate( total=Func(F('pk'), function='COUNT', output_field=IntegerField()) ) .values('total') diff --git a/src/backend/InvenTree/part/migrations/0147_remove_part_default_supplier.py b/src/backend/InvenTree/part/migrations/0147_remove_part_default_supplier.py new file mode 100644 index 0000000000..5b29121ced --- /dev/null +++ b/src/backend/InvenTree/part/migrations/0147_remove_part_default_supplier.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.11 on 2026-02-12 11:08 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("company", "0079_auto_20260212_1054"), + ("part", "0146_auto_20251203_1241"), + ] + + operations = [ + migrations.RemoveField( + model_name="part", + name="default_supplier", + ), + ] diff --git a/src/backend/InvenTree/part/models.py b/src/backend/InvenTree/part/models.py index 6de1d544d0..e4e50f4675 100644 --- a/src/backend/InvenTree/part/models.py +++ b/src/backend/InvenTree/part/models.py @@ -10,7 +10,7 @@ import os import re from datetime import timedelta from decimal import Decimal, InvalidOperation -from typing import cast +from typing import TypedDict, cast from django.conf import settings from django.contrib.auth.models import User @@ -52,7 +52,6 @@ from build.status_codes import BuildStatusGroups from common.currency import currency_code_default 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.exceptions import log_error from InvenTree.fields import InvenTreeURLField @@ -84,8 +83,8 @@ class PartCategory( """ ITEM_PARENT_KEY = 'category' - EXTRA_PATH_FIELDS = ['icon'] + IMPORT_ID_FIELDS = ['pathstring', 'name'] class Meta: """Metaclass defines extra model properties.""" @@ -225,7 +224,8 @@ class PartCategory( def prefetch_parts_parameters(self, cascade=True): """Prefectch parts parameters.""" return ( - self.get_parts(cascade=cascade) + self + .get_parts(cascade=cascade) .prefetch_related('parameters_list', 'parameters_list__template') .all() ) @@ -427,7 +427,7 @@ class PartCategoryParameterTemplate(InvenTree.models.InvenTreeMetadataModel): ) -class PartReportContext(report.mixins.BaseReportContext): +class PartReportContext(report.mixins.BaseReportContext, TypedDict): """Report context for the Part model. Attributes: @@ -489,7 +489,6 @@ class Part( link: Link to an external page with more information about this part (e.g. internal Wiki) image: Image of this part default_location: Where the item is normally stored (may be null) - default_supplier: The default SupplierPart which should be used to procure and stock this part default_expiry: The default expiry duration for any StockItem instances of this part minimum_stock: Minimum preferred quantity to keep in stock units: Units of measure for this part (default='pcs') @@ -516,6 +515,7 @@ class Part( NODE_PARENT_KEY = 'variant_of' IMAGE_RENAME = rename_part_image + IMPORT_ID_FIELDS = ['IPN', 'name'] objects = TreeManager() @@ -615,7 +615,8 @@ class Part( if previous.image is not None and self.image != previous.image: # Are there any (other) parts which reference the image? n_refs = ( - Part.objects.filter(image=previous.image) + Part.objects + .filter(image=previous.image) .exclude(pk=self.pk) .count() ) @@ -1040,7 +1041,8 @@ class Part( self.revision_of and self.revision and ( - Part.objects.exclude(pk=self.pk) + Part.objects + .exclude(pk=self.pk) .filter(revision_of=self.revision_of, revision=self.revision) .exists() ) @@ -1049,7 +1051,8 @@ class Part( # Ensure unique across (Name, revision, IPN) (as specified) if (self.revision or self.IPN) and ( - Part.objects.exclude(pk=self.pk) + Part.objects + .exclude(pk=self.pk) .filter(name=self.name, revision=self.revision, IPN=self.IPN) .exists() ): @@ -1210,31 +1213,14 @@ class Part( # Default case - no default category found return None - def get_default_supplier(self): - """Get the default supplier part for this part (may be None). + @property + def default_supplier(self): + """Return the default (primary) SupplierPart for this Part. - - If the part specifies a default_supplier, return that - - If there is only one supplier part available, return that - - Else, return None + This function is included for backwards compatibility, + as the 'Part' model used to have a 'default_supplier' field which was a ForeignKey to SupplierPart. """ - if self.default_supplier: - return self.default_supplier - - if self.supplier_count == 1: - return self.supplier_parts.first() - - # Default to None if there are multiple suppliers to choose from - return None - - default_supplier = models.ForeignKey( - SupplierPart, - on_delete=models.SET_NULL, - blank=True, - null=True, - verbose_name=_('Default Supplier'), - help_text=_('Default supplier part'), - related_name='default_parts', - ) + return self.supplier_parts.filter(primary=True).first() default_expiry = models.PositiveIntegerField( default=0, @@ -1621,8 +1607,8 @@ class Part( if not self.has_bom: return 0 - # Prefetch related tables, to reduce query expense - queryset = self.get_bom_items() + # Ignore virtual parts when calculating the "can_build" quantity + queryset = self.get_bom_items(include_virtual=False) # Ignore 'consumable' BOM items for this calculation queryset = queryset.filter(consumable=False) @@ -1815,7 +1801,7 @@ class Part( if include_external is False: # Exclude stock entries which are not 'internal' - query = query.filter(external=False) + query = query.filter(location__external=False) if location: locations = location.get_descendants(include_self=True) @@ -2596,21 +2582,22 @@ class Part( Note that some supplier parts may have a different pack_quantity attribute, and this needs to be taken into account! """ + from order.models import PurchaseOrderLineItem + quantity = 0 - # Iterate through all supplier parts - for sp in self.supplier_parts.all(): - # Look at any incomplete line item for open orders - lines = sp.purchase_order_line_items.filter( - order__status__in=PurchaseOrderStatusGroups.OPEN, - quantity__gt=F('received'), - ) + # Find all outstanding PurchaseOrderLineItem objects which reference this part + lines = PurchaseOrderLineItem.objects.filter( + order__status__in=PurchaseOrderStatusGroups.OPEN, + part__part_id=self.pk, + quantity__gt=F('received'), + ).prefetch_related('part') - for line in lines: - remaining = line.quantity - line.received + for line in lines: + remaining = line.quantity - line.received - if remaining > 0: - quantity += sp.base_quantity(remaining) + if remaining > 0: + quantity += line.part.base_quantity(remaining) return quantity @@ -3631,6 +3618,8 @@ class PartTestTemplate(InvenTree.models.InvenTreeMetadataModel): run on the model (refer to the validate_unique function). """ + IMPORT_ID_FIELDS = ['key'] + class Meta: """Metaclass options for the PartTestTemplate model.""" @@ -3828,10 +3817,18 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): return assemblies def get_valid_parts_for_allocation( - self, allow_variants=True, allow_substitutes=True + self, + allow_variants: bool = True, + allow_substitutes: bool = True, + allow_inactive: bool = True, ): """Return a list of valid parts which can be allocated against this BomItem. + Arguments: + allow_variants: If True, include variants of the sub_part + allow_substitutes: If True, include any directly specified substitute parts + allow_inactive: If True, include inactive parts in the returned list + Includes: - The referenced sub_part - Any directly specified substitute parts @@ -3864,6 +3861,10 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): if p.trackable != self.sub_part.trackable: continue + # Filter by 'active' status + if not allow_inactive and not p.active: + continue + valid_parts.append(p) return valid_parts @@ -4112,7 +4113,7 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): # Normalize decimal values to ensure consistent representation # These values are only included if they are non-zero - # This is to provide some backwards compatibility from before these fields were addede + # This is to provide some backwards compatibility from before these fields were added if value is not None and field in [ 'quantity', 'attrition', @@ -4215,7 +4216,7 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): if n <= 0: return 0.0 - return int(available_stock / n) + return int(Decimal(available_stock) / n) def get_required_quantity(self, build_quantity: float) -> float: """Calculate the required part quantity, based on the supplied build_quantity. diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index 60ce08275a..8788ca8624 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -22,6 +22,7 @@ from sql_util.utils import SubqueryCount import common.currency import common.filters +import common.models import common.serializers import company.models import InvenTree.helpers @@ -30,6 +31,7 @@ import part.filters as part_filters import part.helpers as part_helpers import stock.models import users.models +from data_exporter.mixins import DataExportSerializerMixin from importer.registry import register_importer from InvenTree.mixins import DataImportExportSerializerMixin from InvenTree.ready import isGeneratingSchema @@ -128,7 +130,16 @@ class CategorySerializer( def get_starred(self, category) -> bool: """Return True if the category is directly "starred" by the current user.""" - return category in self.context.get('starred_categories', []) + if not self.request or not self.request.user: + return False + + # Cache the "starred_categories" list for the current user + if not hasattr(self, 'starred_categories'): + self.starred_categories = [ + star.category.pk for star in self.request.user.starred_categories.all() + ] + + return category.pk in self.starred_categories path = enable_filter( FilterableListField( @@ -575,7 +586,6 @@ class PartSerializer( 'default_expiry', 'default_location', 'default_location_detail', - 'default_supplier', 'description', 'full_name', 'image', @@ -637,7 +647,6 @@ class PartSerializer( - Allows us to optionally pass extra fields based on the query. """ - self.starred_parts = kwargs.pop('starred_parts', []) create = kwargs.pop('create', False) super().__init__(*args, **kwargs) @@ -753,7 +762,16 @@ class PartSerializer( def get_starred(self, part) -> bool: """Return "true" if the part is starred by the current user.""" - return part in self.starred_parts + if not self.request or not self.request.user: + return False + + # Cache the "starred_parts" list for the current user + if not hasattr(self, 'starred_parts'): + self.starred_parts = [ + star.part.pk for star in self.request.user.starred_parts.all() + ] + + return part.pk in self.starred_parts # Extra detail for the category category_detail = enable_filter( @@ -1187,7 +1205,11 @@ class PartRequirementsSerializer(InvenTree.serializers.InvenTreeModelSerializer) return part.sales_order_allocation_count(include_variants=True, pending=True) -class PartStocktakeSerializer(InvenTree.serializers.InvenTreeModelSerializer): +class PartStocktakeSerializer( + InvenTree.serializers.FilterableSerializerMixin, + DataExportSerializerMixin, + InvenTree.serializers.InvenTreeModelSerializer, +): """Serializer for the PartStocktake model.""" class Meta: @@ -1196,18 +1218,32 @@ class PartStocktakeSerializer(InvenTree.serializers.InvenTreeModelSerializer): model = PartStocktake fields = [ 'pk', - 'date', 'part', + 'part_name', + 'part_ipn', + 'part_description', + 'date', 'item_count', 'quantity', 'cost_min', 'cost_min_currency', 'cost_max', 'cost_max_currency', + # Optional detail fields + 'part_detail', ] read_only_fields = ['date', 'user'] + def __init__(self, *args, **kwargs): + """Custom initialization for PartStocktakeSerializer.""" + exclude_pk = kwargs.pop('exclude_pk', False) + + super().__init__(*args, **kwargs) + + if exclude_pk: + self.fields.pop('pk', None) + quantity = serializers.FloatField() cost_min = InvenTree.serializers.InvenTreeMoneySerializer(allow_null=True) @@ -1216,6 +1252,28 @@ class PartStocktakeSerializer(InvenTree.serializers.InvenTreeModelSerializer): cost_max = InvenTree.serializers.InvenTreeMoneySerializer(allow_null=True) cost_max_currency = InvenTree.serializers.InvenTreeCurrencySerializer() + part_name = serializers.CharField( + source='part.name', read_only=True, label=_('Part Name') + ) + + part_ipn = serializers.CharField( + source='part.IPN', read_only=True, allow_null=True, label=_('Part IPN') + ) + + part_description = serializers.CharField( + source='part.description', + read_only=True, + allow_null=True, + label=_('Part Description'), + ) + + part_detail = enable_filter( + PartBriefSerializer( + source='part', read_only=True, allow_null=True, many=False, pricing=False + ), + default_include=False, + ) + def save(self): """Called when this serializer is saved.""" data = self.validated_data @@ -1226,6 +1284,72 @@ class PartStocktakeSerializer(InvenTree.serializers.InvenTreeModelSerializer): return super().save() +class PartStocktakeGenerateSerializer(serializers.Serializer): + """Serializer for generating PartStocktake entries.""" + + class Meta: + """Metaclass options.""" + + fields = [ + 'part', + 'category', + 'location', + 'generate_entry', + 'generate_report', + 'output', + ] + + part = serializers.PrimaryKeyRelatedField( + queryset=Part.objects.all(), + label=_('Part'), + help_text=_( + 'Select a part to generate stocktake information for that part (and any variant parts)' + ), + required=False, + allow_null=True, + ) + + category = serializers.PrimaryKeyRelatedField( + queryset=PartCategory.objects.all(), + label=_('Category'), + help_text=_( + 'Select a category to include all parts within that category (and subcategories)' + ), + required=False, + allow_null=True, + ) + + location = serializers.PrimaryKeyRelatedField( + queryset=stock.models.StockLocation.objects.all(), + label=_('Location'), + help_text=_( + 'Select a location to include all parts with stock in that location (including sub-locations)' + ), + required=False, + allow_null=True, + ) + + generate_entry = serializers.BooleanField( + label=_('Generate Stocktake Entries'), + help_text=_('Save stocktake entries for the selected parts'), + write_only=True, + required=False, + default=False, + ) + + generate_report = serializers.BooleanField( + label=_('Generate Report'), + help_text=_('Generate a stocktake report for the selected parts'), + write_only=True, + required=False, + default=False, + ) + + output = common.serializers.DataOutputSerializer( + read_only=True, many=False, label=_('Output') + ) + + @extend_schema_field( serializers.CharField( help_text=_('Select currency from available options') @@ -1550,8 +1674,20 @@ class BomItemSerializer( def validate_quantity(self, quantity): """Perform validation for the BomItem quantity field.""" - if quantity <= 0: - raise serializers.ValidationError(_('Quantity must be greater than zero')) + allow_zero_qty = common.models.InvenTreeSetting.get_setting( + 'PART_BOM_ALLOW_ZERO_QUANTITY', False + ) + + if allow_zero_qty: + if quantity < 0: + raise serializers.ValidationError( + _('Quantity must be greater than or equal to zero') + ) + else: + if quantity <= 0: + raise serializers.ValidationError( + _('Quantity must be greater than zero') + ) return quantity diff --git a/src/backend/InvenTree/part/stocktake.py b/src/backend/InvenTree/part/stocktake.py index fcdfff40c9..40bc857afd 100644 --- a/src/backend/InvenTree/part/stocktake.py +++ b/src/backend/InvenTree/part/stocktake.py @@ -1,16 +1,48 @@ """Stock history functionality.""" +from typing import Optional + +from django.core.files.base import ContentFile + import structlog +import tablib from djmoney.contrib.exchange.models import convert_money from djmoney.money import Money +import common.models +from InvenTree.helpers import current_date + logger = structlog.get_logger('inventree') -def perform_stocktake() -> None: - """Generate stock history entries for all active parts.""" +def perform_stocktake( + part_id: Optional[int] = None, + category_id: Optional[int] = None, + location_id: Optional[int] = None, + exclude_external: Optional[bool] = None, + generate_entry: bool = True, + report_output_id: Optional[int] = None, +) -> None: + """Capture a snapshot of stock-on-hand and stock value. + + Arguments: + part_id: Optional ID of a part to perform stocktake on. If not provided, all active parts will be processed. + category_id: Optional category ID to use to filter parts + location_id: Optional location ID to use to filter stock items + exclude_external: If True, exclude external stock items from the stocktake + generate_entry: If True, create stocktake entries in the database + report_output_id: Optional ID of a DataOutput object for the stocktake report (e.g. for download) + + The default implementation creates stocktake entries for all active parts, + and writes these stocktake entries to the database. + + Alternatively, the scope of the stocktake can be limited by providing a queryset of parts, + or by providing a category ID or location ID to filter the parts/stock items. + """ import InvenTree.helpers import part.models as part_models + import part.serializers as part_serializers + import stock.models as stock_models from common.currency import currency_code_default from common.settings import get_global_setting @@ -18,36 +50,98 @@ def perform_stocktake() -> None: logger.info('Stocktake functionality is disabled - skipping') return - exclude_external = get_global_setting( - 'STOCKTAKE_EXCLUDE_EXTERNAL', False, cache=False - ) + # If exclude_external is not provided, use global setting + if exclude_external is None: + exclude_external = get_global_setting( + 'STOCKTAKE_EXCLUDE_EXTERNAL', False, cache=False + ) - active_parts = part_models.Part.objects.filter(active=True) + # If a single part is provided, limit to that part + # Otherwise, start with all active parts + if part_id is not None: + try: + part = part_models.Part.objects.get(id=part_id) + parts = part.get_descendants(include_self=True) + except (ValueError, part_models.Part.DoesNotExist): + parts = part_models.Part.objects.all() + else: + parts = part_models.Part.objects.all() + + # Only use active parts + parts = parts.filter(active=True) + + # Prefetch related pricing information + parts = parts.prefetch_related('pricing_data', 'stock_items') + + # Filter part queryset by category, if provided + if category_id is not None: + # Filter parts by category (including subcategories) + try: + category = part_models.PartCategory.objects.get(id=category_id) + parts = parts.filter( + category__in=category.get_descendants(include_self=True) + ) + except (ValueError, part_models.PartCategory.DoesNotExist): + pass + + # Fetch location if provided + if location_id is not None: + try: + location = stock_models.StockLocation.objects.get(id=location_id) + except (ValueError, stock_models.StockLocation.DoesNotExist): + location = None + else: + location = None + + if location is not None: + # Location limited, so we will disable saving of stocktake entries + generate_entry = False # New history entries to be created history_entries = [] - N_BULK_CREATE = 250 - base_currency = currency_code_default() today = InvenTree.helpers.current_date() - logger.info( - 'Creating new stock history entries for %s active parts', active_parts.count() - ) + logger.info('Creating new stock history entries for %s parts', parts.count()) - for part in active_parts: + # Fetch report output object if provided + if report_output_id is not None: + try: + report_output = common.models.DataOutput.objects.get(id=report_output_id) + except (ValueError, common.models.DataOutput.DoesNotExist): + report_output = None + else: + report_output = None + + if report_output: + # Initialize progress on the report output + report_output.total = parts.count() + report_output.progress = 0 + report_output.complete = False + report_output.save() + + for part in parts: # Is there a recent stock history record for this part? - if part_models.PartStocktake.objects.filter( - part=part, date__gte=today - ).exists(): + if ( + generate_entry + and part_models.PartStocktake.objects.filter( + part=part, date__gte=today + ).exists() + ): continue - pricing = part.pricing + try: + pricing = part.pricing_data + except Exception: + pricing = None # Fetch all 'in stock' items for this part stock_items = part.stock_entries( - in_stock=True, include_external=not exclude_external, include_variants=True + location=location, + in_stock=True, + include_external=not exclude_external, + include_variants=True, ) total_cost_min = Money(0, base_currency) @@ -56,23 +150,34 @@ def perform_stocktake() -> None: total_quantity = 0 items_count = 0 + if stock_items.count() == 0: + # No stock items - skip this part if location is specified + if location: + continue + for item in stock_items: # Extract cost information - entry_cost_min = pricing.overall_min or pricing.overall_max - entry_cost_max = pricing.overall_max or pricing.overall_min + entry_cost_min = ( + (pricing.overall_min or pricing.overall_max) if pricing else None + ) + entry_cost_max = ( + (pricing.overall_max or pricing.overall_min) if pricing else None + ) if item.purchase_price is not None: entry_cost_min = item.purchase_price entry_cost_max = item.purchase_price try: - entry_cost_min = ( - convert_money(entry_cost_min, base_currency) * item.quantity - ) - entry_cost_max = ( - convert_money(entry_cost_max, base_currency) * item.quantity - ) + entry_cost_min = entry_cost_min * item.quantity + entry_cost_max = entry_cost_max * item.quantity + + if entry_cost_min.currency != base_currency: + entry_cost_min = convert_money(entry_cost_min, base_currency) + + if entry_cost_max.currency != base_currency: + entry_cost_max = convert_money(entry_cost_max, base_currency) except Exception: entry_cost_min = Money(0, base_currency) entry_cost_max = Money(0, base_currency) @@ -83,6 +188,13 @@ def perform_stocktake() -> None: total_cost_min += entry_cost_min total_cost_max += entry_cost_max + if report_output: + report_output.progress += 1 + + # Update report progress every few items, to avoid excessive database writes + if report_output.progress % 50 == 0: + report_output.save() + # Add a new stocktake entry for this part history_entries.append( part_models.PartStocktake( @@ -94,11 +206,31 @@ def perform_stocktake() -> None: ) ) - # Batch create stock history entries - if len(history_entries) >= N_BULK_CREATE: - part_models.PartStocktake.objects.bulk_create(history_entries) - history_entries = [] - - if len(history_entries) > 0: - # Save any remaining stocktake entries + if generate_entry: + # Bulk-create PartStocktake entries part_models.PartStocktake.objects.bulk_create(history_entries) + + if report_output: + # Save report data, and mark as complete + + today = current_date() + + serializer = part_serializers.PartStocktakeSerializer(exclude_pk=True) + + headers = serializer.generate_headers() + + # Export the data to a file + dataset = tablib.Dataset(headers=list(headers.values())) + + header_keys = list(headers.keys()) + + for entry in history_entries: + entry.date = today + row = serializer.to_representation(entry) + dataset.append([row.get(header, '') for header in header_keys]) + + datafile = dataset.export('csv') + + report_output.mark_complete( + output=ContentFile(datafile, 'stocktake_report.csv') + ) diff --git a/src/backend/InvenTree/part/tasks.py b/src/backend/InvenTree/part/tasks.py index a7008f7576..296604422b 100644 --- a/src/backend/InvenTree/part/tasks.py +++ b/src/backend/InvenTree/part/tasks.py @@ -12,6 +12,7 @@ from opentelemetry import trace import common.currency import common.notifications +import InvenTree.helpers import InvenTree.helpers_model from common.settings import get_global_setting from InvenTree.tasks import ( @@ -329,7 +330,7 @@ def scheduled_stocktake_reports(): threshold = datetime.now() - timedelta(days=delete_n_days) old_entries = PartStocktake.objects.filter(date__lt=threshold) - if old_entries.count() > 0: + if old_entries.exists(): logger.info('Deleting %s old stock entries', old_entries.count()) old_entries.delete() diff --git a/src/backend/InvenTree/part/test_api.py b/src/backend/InvenTree/part/test_api.py index 224d0c6ab6..cc6317b930 100644 --- a/src/backend/InvenTree/part/test_api.py +++ b/src/backend/InvenTree/part/test_api.py @@ -74,7 +74,6 @@ class PartImageTestMixin: {'image': img_file}, expected_code=200, ) - print(response.data) image_name = response.data['image'] self.assertTrue(image_name.startswith('/media/part_images/part_image')) return image_name @@ -111,7 +110,7 @@ class PartCategoryAPITest(InvenTreeAPITestCase): url = reverse('api-part-category-list') # star categories manually for tests as it is not possible with fixures - # because the current user is not fixured itself and throws an invalid + # because the current user is not fixtured itself and throws an invalid # foreign key constraint for pk in [3, 4]: PartCategory.objects.get(pk=pk).set_starred(self.user, True) @@ -812,9 +811,14 @@ class PartAPITest(PartAPITestBase): # Children of PartCategory<1>, do not cascade response = self.get(url, {'parent': 1, 'cascade': 'false'}) - self.assertEqual(len(response.data), 3) + # Children of PartCategory<7>, with or without cascade + # Only 1 child in either case + for cascade in ['true', 'false']: + response = self.get(url, {'parent': 7, 'cascade': cascade}) + self.assertEqual(len(response.data), 1) + def test_add_categories(self): """Check that we can add categories.""" data = {'name': 'Animals', 'description': 'All animals go here'} @@ -1644,7 +1648,7 @@ class PartCreationTests(PartAPITestBase): self.assertEqual(cat.parameter_templates.count(), 3) - # Creat a new Part, without copying category parameters + # Create a new Part, without copying category parameters data = self.post( reverse('api-part-list'), { @@ -1833,7 +1837,7 @@ class PartDetailTests(PartImageTestMixin, PartAPITestBase): # Part should not have an image! with self.assertRaises(ValueError): - print(p.image.file) + _x = p.image.file # Try to upload a non-image file test_path = get_testfolder_dir() / 'dummy_image' @@ -2314,7 +2318,7 @@ class PartAPIAggregationTest(InvenTreeAPITestCase): self.assertEqual(data['allocated_to_build_orders'], 0) self.assertEqual(data['allocated_to_sales_orders'], 0) - # The unallocated stock count should equal the 'in stock' coutn + # The unallocated stock count should equal the 'in stock' count in_stock = data['in_stock'] self.assertEqual(in_stock, 126) self.assertEqual(data['unallocated_stock'], in_stock) @@ -3175,65 +3179,6 @@ class PartInternalPriceBreakTest(InvenTreeAPITestCase): p.refresh_from_db() -class PartMetadataAPITest(InvenTreeAPITestCase): - """Unit tests for the various metadata endpoints of API.""" - - fixtures = [ - 'category', - 'part', - 'params', - 'location', - 'bom', - 'company', - 'test_templates', - 'manufacturer_part', - 'supplier_part', - 'order', - 'stock', - ] - - roles = ['part.change', 'part_category.change'] - - def metatester(self, apikey, model): - """Generic tester.""" - modeldata = model.objects.first() - - # Useless test unless a model object is found - self.assertIsNotNone(modeldata) - - url = reverse(apikey, kwargs={'pk': modeldata.pk}) - - # Metadata is initially null - self.assertIsNone(modeldata.metadata) - - numstr = randint(100, 900) - - self.patch( - url, - {'metadata': {f'abc-{numstr}': f'xyz-{apikey}-{numstr}'}}, - expected_code=200, - ) - - # Refresh - modeldata.refresh_from_db() - self.assertEqual( - modeldata.get_metadata(f'abc-{numstr}'), f'xyz-{apikey}-{numstr}' - ) - - def test_metadata(self): - """Test all endpoints.""" - for apikey, model in { - 'api-part-category-parameter-metadata': PartCategoryParameterTemplate, - 'api-part-category-metadata': PartCategory, - 'api-part-test-template-metadata': PartTestTemplate, - 'api-part-related-metadata': PartRelated, - 'api-part-metadata': Part, - 'api-bom-substitute-metadata': BomItemSubstitute, - 'api-bom-item-metadata': BomItem, - }.items(): - self.metatester(apikey, model) - - class PartTestTemplateTest(PartAPITestBase): """API unit tests for the PartTestTemplate model.""" diff --git a/src/backend/InvenTree/part/test_notification_stale.py b/src/backend/InvenTree/part/test_notification_stale.py index 86a4189a42..7999ab6ed5 100644 --- a/src/backend/InvenTree/part/test_notification_stale.py +++ b/src/backend/InvenTree/part/test_notification_stale.py @@ -50,8 +50,8 @@ class StaleStockNotificationTests(InvenTreeTestCase): set_global_setting('STOCK_STALE_DAYS', 7, self.user) # Clear notifications - NotificationEntry.objects.all().delete() # type: ignore[attr-defined] - NotificationMessage.objects.all().delete() # type: ignore[attr-defined] + NotificationEntry.objects.all().delete() + NotificationMessage.objects.all().delete() def create_stock_items_with_expiry(self): """Create stock items with various expiry dates for testing.""" @@ -101,7 +101,7 @@ class StaleStockNotificationTests(InvenTreeTestCase): part.tasks.notify_stale_stock(self.user, []) # No notifications should be created - self.assertEqual(NotificationMessage.objects.count(), 0) # type: ignore[attr-defined] + self.assertEqual(NotificationMessage.objects.count(), 0) def test_notify_stale_stock_single_item(self): """Test notify_stale_stock with a single stale item.""" diff --git a/src/backend/InvenTree/part/test_part.py b/src/backend/InvenTree/part/test_part.py index 5bb704a500..8bb2ca37e4 100644 --- a/src/backend/InvenTree/part/test_part.py +++ b/src/backend/InvenTree/part/test_part.py @@ -160,7 +160,7 @@ class PartTest(TestCase): p = Part.objects.get(pk=1) barcode = p.format_barcode() - self.assertEqual(barcode, '{"part": 1}') + self.assertEqual(barcode, 'INV-PA1') def test_str(self): """Test string representation of a Part.""" @@ -248,7 +248,7 @@ class PartTest(TestCase): def test_barcode(self): """Test barcode format functionality.""" barcode = self.r1.format_barcode() - self.assertEqual('{"part": 3}', barcode) + self.assertEqual('INV-PA3', barcode) def test_sell_pricing(self): """Check that the sell pricebreaks were loaded.""" diff --git a/src/backend/InvenTree/plugin/api.py b/src/backend/InvenTree/plugin/api.py index 8585a37275..91580062b3 100644 --- a/src/backend/InvenTree/plugin/api.py +++ b/src/backend/InvenTree/plugin/api.py @@ -17,7 +17,7 @@ from rest_framework.views import APIView import InvenTree.permissions import plugin.serializers as PluginSerializers -from InvenTree.api import MetadataView +from InvenTree.api import meta_path from InvenTree.filters import SEARCH_ORDER_FILTER from InvenTree.helpers import str2bool from InvenTree.mixins import ( @@ -509,11 +509,11 @@ class RegistryStatusView(APIView): return Response(result) -class PluginMetadataView(MetadataView): - """Metadata API endpoint for the PluginConfig model.""" +# class PluginMetadataView(MetadataView): +# """Metadata API endpoint for the PluginConfig model.""" - lookup_field = 'key' - lookup_url_kwarg = 'plugin' +# lookup_field = 'key' +# lookup_url_kwarg = 'plugin' plugin_api_urls = [ @@ -576,12 +576,8 @@ plugin_api_urls = [ ), ]), ), - path( - 'metadata/', - PluginMetadataView.as_view( - model=PluginConfig, lookup_field='key' - ), - name='api-plugin-metadata', + meta_path( + PluginConfig, lookup_field='key', lookup_field_ref='plugin' ), path( 'activate/', diff --git a/src/backend/InvenTree/plugin/base/barcodes/api.py b/src/backend/InvenTree/plugin/base/barcodes/api.py index 06640bc453..c67a9bed2b 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/api.py +++ b/src/backend/InvenTree/plugin/base/barcodes/api.py @@ -93,7 +93,8 @@ class BarcodeView(CreateAPIView): if num_scans > max_scans: n = num_scans - max_scans old_scan_ids = list( - BarcodeScanResult.objects.all() + BarcodeScanResult.objects + .all() .order_by('timestamp') .values_list('pk', flat=True)[:n] ) diff --git a/src/backend/InvenTree/plugin/base/barcodes/mixins.py b/src/backend/InvenTree/plugin/base/barcodes/mixins.py index 2b38ef4972..c744cc04f2 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/mixins.py +++ b/src/backend/InvenTree/plugin/base/barcodes/mixins.py @@ -60,7 +60,7 @@ class BarcodeMixin: """Does this plugin support barcode generation.""" try: # Attempt to call the generate method - self.generate(None) # type: ignore + self.generate(None) except NotImplementedError: # If a NotImplementedError is raised, then barcode generation is not supported return False @@ -191,7 +191,8 @@ class SupplierBarcodeMixin(BarcodeMixin): q1 = Q(manufacturer=supplier) # Case 2: Supplied by this supplier m = ( - SupplierPart.objects.filter(supplier=supplier) + SupplierPart.objects + .filter(supplier=supplier) .values_list('manufacturer_part', flat=True) .distinct() ) diff --git a/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py b/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py index 9538ee7c88..cec6fc68ad 100644 --- a/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py +++ b/src/backend/InvenTree/plugin/base/barcodes/test_barcode.py @@ -178,7 +178,7 @@ class BarcodeAPITest(InvenTreeAPITestCase): item = StockItem.objects.get(pk=522) data = self.generateBarcode('stockitem', item.pk, expected_code=200).data - self.assertEqual(data['barcode'], '{"stockitem": 522}') + self.assertEqual(data['barcode'], 'INV-SI522') def test_barcode_generation_invalid(self): """Test barcode generation for invalid model/pk.""" diff --git a/src/backend/InvenTree/plugin/base/integration/AppMixin.py b/src/backend/InvenTree/plugin/base/integration/AppMixin.py index 532cc2578e..b3690afee1 100644 --- a/src/backend/InvenTree/plugin/base/integration/AppMixin.py +++ b/src/backend/InvenTree/plugin/base/integration/AppMixin.py @@ -113,9 +113,14 @@ class AppMixin: break # unregister the models (yes, models are just kept in multilevel dicts) + # Note: Django registers models under the app_label (app_name), + # not the full dotted plugin_path. For plugins with nested module + # paths (e.g. "myplugin.myplugin"), plugin_path != app_name, so + # using plugin_path here would look up the wrong key in the + # defaultdict and raise KeyError on .pop(). for model in models: # remove model from general registry - apps.all_models[plugin_path].pop(model) + apps.all_models[app_name].pop(model, None) # clear the registry for that app # so that the import trick will work on reloading the same plugin diff --git a/src/backend/InvenTree/plugin/base/integration/DataExport.py b/src/backend/InvenTree/plugin/base/integration/DataExport.py index dc46aa449c..97d38ec493 100644 --- a/src/backend/InvenTree/plugin/base/integration/DataExport.py +++ b/src/backend/InvenTree/plugin/base/integration/DataExport.py @@ -90,6 +90,7 @@ class DataExportMixin: headers: OrderedDict, context: dict, output: DataOutput, + serializer_context: Optional[dict] = None, **kwargs, ) -> list: """Export data from the queryset. @@ -100,6 +101,7 @@ class DataExportMixin: Arguments: queryset: The queryset to export serializer_class: The serializer class to use for exporting the data + serializer_context: Optional context for the serializer headers: The headers for the export context: Any custom context for the export (provided by the plugin serializer) output: The DataOutput object for the export @@ -107,7 +109,9 @@ class DataExportMixin: Returns: The exported data (a list of dict objects) """ # The default implementation simply serializes the queryset - return serializer_class(queryset, many=True, exporting=True).data + return serializer_class( + queryset, many=True, exporting=True, context=serializer_context or {} + ).data def get_export_options_serializer(self, **kwargs) -> serializers.Serializer | None: """Return a serializer class with dynamic export options for this plugin. diff --git a/src/backend/InvenTree/plugin/base/integration/test_mixins.py b/src/backend/InvenTree/plugin/base/integration/test_mixins.py index a5495fb04f..4cf7e34714 100644 --- a/src/backend/InvenTree/plugin/base/integration/test_mixins.py +++ b/src/backend/InvenTree/plugin/base/integration/test_mixins.py @@ -1,5 +1,8 @@ """Unit tests for base mixins for plugins.""" +from collections import OrderedDict, defaultdict +from unittest.mock import MagicMock, patch + from django.conf import settings from django.test import TestCase from django.urls import include, path, re_path @@ -145,6 +148,56 @@ class AppMixinTest(BaseMixinDefinition, TestCase): """Test that the sample plugin registers in settings.""" self.assertIn('plugin.samples.integration', settings.INSTALLED_APPS) + def test_deactivate_nested_plugin_path(self): + """Test that _deactivate_mixin uses app_name (not plugin_path) for model deregistration. + + External plugins with nested module paths (e.g. "purchase_quotation.purchase_quotation") + have plugin_path != app_name. Django registers models under app_name (the last component), + so using the full plugin_path to look up apps.all_models would access the wrong key + in the defaultdict and raise KeyError on .pop(). + """ + # Simulate a nested plugin path like an external plugin installed via: + # entry_points={"inventree_plugins": [ + # "PurchaseQuotationPlugin = purchase_quotation.plugin:PurchaseQuotationPlugin" + # ]} + # where the package structure is purchase_quotation/purchase_quotation/ + nested_plugin_path = 'purchase_quotation.purchase_quotation' + app_name = 'purchase_quotation' # Django registers models under this + + # Set up a mock registry with the nested plugin path + mock_registry = MagicMock() + mock_registry.installed_apps = [nested_plugin_path] + + # Create a fake model + mock_model = MagicMock() + mock_model._meta.model_name = 'purchasequotation' + + # Create a mock app_config that returns our fake model + mock_app_config = MagicMock() + mock_app_config.get_models.return_value = [mock_model] + + # Set up apps.all_models with the model registered under app_name + # (this is how Django actually stores it) + fake_all_models = defaultdict(OrderedDict) + fake_all_models[app_name]['purchasequotation'] = mock_model + + with ( + patch( + 'plugin.base.integration.AppMixin.apps.get_app_config', + return_value=mock_app_config, + ), + patch('plugin.base.integration.AppMixin.apps.all_models', fake_all_models), + ): + # This should NOT raise KeyError - the fix ensures we use + # app_name (the last path component) instead of the full plugin_path + AppMixin._deactivate_mixin(mock_registry, force_reload=False) + + # Verify the model was removed from the registry + self.assertNotIn('purchasequotation', fake_all_models.get(app_name, {})) + # Verify the full nested path was NOT used as a key + # (defaultdict would have created an empty entry if accessed) + self.assertNotIn(nested_plugin_path, fake_all_models) + class NavigationMixinTest(BaseMixinDefinition, TestCase): """Tests for NavigationMixin.""" diff --git a/src/backend/InvenTree/plugin/base/supplier/api.py b/src/backend/InvenTree/plugin/base/supplier/api.py index 7dc6c6045b..3c288a238d 100644 --- a/src/backend/InvenTree/plugin/base/supplier/api.py +++ b/src/backend/InvenTree/plugin/base/supplier/api.py @@ -184,10 +184,10 @@ class ImportPart(APIView): import_data, part=part, manufacturer_part=manufacturer_part ) - # set default supplier if not set + # Set as primary supplier if not already set if not part.default_supplier: - part.default_supplier = supplier_part - part.save() + supplier_part.primary = True + supplier_part.save() # get pricing pricing = supplier_plugin.get_pricing_data(import_data) diff --git a/src/backend/InvenTree/plugin/base/supplier/mixins.py b/src/backend/InvenTree/plugin/base/supplier/mixins.py index 6542989a64..56e924f061 100644 --- a/src/backend/InvenTree/plugin/base/supplier/mixins.py +++ b/src/backend/InvenTree/plugin/base/supplier/mixins.py @@ -109,8 +109,8 @@ class SupplierMixin(SettingsMixin, Generic[PartData]): *, part: part_models.Part, manufacturer_part: company.models.ManufacturerPart, - ) -> part_models.SupplierPart: - """Import a supplier part using the provided data. + ) -> company.models.SupplierPart: + """Import a SupplierPart using the provided data. This may include: - Creating a new supplier part @@ -161,7 +161,7 @@ class SupplierMixin(SettingsMixin, Generic[PartData]): # assign parent_part to root_part if root_part has no variant of already if root_part and not root_part.is_template and not root_part.variant_of: - root_part.variant_of = parent_part # type: ignore + root_part.variant_of = parent_part root_part.save() return parent_part diff --git a/src/backend/InvenTree/plugin/base/ui/mixins.py b/src/backend/InvenTree/plugin/base/ui/mixins.py index cbffd1fb9a..4ab84ef6ca 100644 --- a/src/backend/InvenTree/plugin/base/ui/mixins.py +++ b/src/backend/InvenTree/plugin/base/ui/mixins.py @@ -83,7 +83,7 @@ class UserInterfaceMixin: def __init__(self): """Register mixin.""" super().__init__() - self.add_mixin(PluginMixinEnum.USER_INTERFACE, True, __class__) # type: ignore + self.add_mixin(PluginMixinEnum.USER_INTERFACE, True, __class__) def get_ui_features( self, feature_type: FeatureType, context: dict, request: Request, **kwargs diff --git a/src/backend/InvenTree/plugin/broken/broken_file.py b/src/backend/InvenTree/plugin/broken/broken_file.py index 83437025cf..f56932e876 100644 --- a/src/backend/InvenTree/plugin/broken/broken_file.py +++ b/src/backend/InvenTree/plugin/broken/broken_file.py @@ -7,4 +7,4 @@ class BrokenFileIntegrationPlugin(InvenTreePlugin): """An very broken plugin.""" -aaa = bb # noqa: F821 # type: ignore[unresolved-reference] +aaa = bb # noqa: F821 diff --git a/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py b/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py index 224885813d..10cf3189c8 100644 --- a/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py +++ b/src/backend/InvenTree/plugin/builtin/barcodes/inventree_barcode.py @@ -26,7 +26,7 @@ class InvenTreeInternalBarcodePlugin(SettingsMixin, BarcodeMixin, InvenTreePlugi NAME = 'InvenTreeBarcode' TITLE = _('InvenTree Barcodes') DESCRIPTION = _('Provides native support for barcodes') - VERSION = '2.1.0' + VERSION = '2.2.0' AUTHOR = _('InvenTree contributors') SETTINGS = { @@ -37,7 +37,7 @@ class InvenTreeInternalBarcodePlugin(SettingsMixin, BarcodeMixin, InvenTreePlugi ('json', _('JSON barcodes (human readable)')), ('short', _('Short barcodes (space optimized)')), ], - 'default': 'json', + 'default': 'short', }, 'SHORT_BARCODE_PREFIX': { 'name': _('Short Barcode Prefix'), 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 4d6ad741aa..1dc1eb90b2 100644 --- a/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py +++ b/src/backend/InvenTree/plugin/builtin/barcodes/test_inventree_barcode.py @@ -355,14 +355,16 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): def test_generation_inventree_json(self): """Test JSON barcode generation.""" + self.set_plugin_setting('INTERNAL_BARCODE_FORMAT', 'json') 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.""" + # Revert to default setting self.set_plugin_setting('INTERNAL_BARCODE_FORMAT', 'short') + def test_generation_inventree_short(self): + """Test short barcode generation.""" item = stock.models.StockLocation.objects.get(pk=5) # test with default prefix @@ -376,4 +378,3 @@ class TestInvenTreeBarcode(InvenTreeAPITestCase): 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/integration/core_notifications.py b/src/backend/InvenTree/plugin/builtin/integration/core_notifications.py index 3634c2b3e0..a35df5739d 100644 --- a/src/backend/InvenTree/plugin/builtin/integration/core_notifications.py +++ b/src/backend/InvenTree/plugin/builtin/integration/core_notifications.py @@ -128,7 +128,7 @@ class InvenTreeSlackNotifications(NotificationMixin, SettingsMixin, InvenTreePlu SETTINGS = { 'NOTIFICATION_SLACK_URL': { - 'name': _('Slack incoming webhook url'), + 'name': _('Slack incoming webhook URL'), 'description': _('URL that is used to send messages to a slack channel'), 'protected': True, } diff --git a/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py b/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py index 2fece00a05..42657d617c 100644 --- a/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py +++ b/src/backend/InvenTree/plugin/builtin/labels/inventree_machine.py @@ -143,9 +143,11 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, InvenTreePlugin): last_used_printers = get_last_used_printers(user)[::-1] machines = sorted( machines, - key=lambda m: last_used_printers.index(str(m.pk)) - if str(m.pk) in last_used_printers - else -1, + key=lambda m: ( + last_used_printers.index(str(m.pk)) + if str(m.pk) in last_used_printers + else -1 + ), reverse=True, ) diff --git a/src/backend/InvenTree/plugin/helpers.py b/src/backend/InvenTree/plugin/helpers.py index cd62e849f7..06de01d06b 100644 --- a/src/backend/InvenTree/plugin/helpers.py +++ b/src/backend/InvenTree/plugin/helpers.py @@ -192,7 +192,7 @@ def get_modules(pkg, path=None): if sys.version_info < (3, 12): module = finder.find_module(name).load_module(name) else: - spec = finder.find_spec(name) + spec = finder.find_spec(name) # type: ignore[missing-argument] module = module_from_spec(spec) sys.modules[name] = module spec.loader.exec_module(module) diff --git a/src/backend/InvenTree/plugin/migrations/0001_initial.py b/src/backend/InvenTree/plugin/migrations/0001_initial.py index 1dd7032f69..bdaa89afc1 100644 --- a/src/backend/InvenTree/plugin/migrations/0001_initial.py +++ b/src/backend/InvenTree/plugin/migrations/0001_initial.py @@ -16,7 +16,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('key', models.CharField(help_text='Key of plugin', max_length=255, unique=True, verbose_name='Key')), - ('name', models.CharField(blank=True, help_text='PluginName of the plugin', max_length=255, null=True, verbose_name='Name')), + ('name', models.CharField(blank=True, help_text='Name of the plugin', max_length=255, null=True, verbose_name='Name')), ('active', models.BooleanField(default=False, help_text='Is the plugin active', verbose_name='Active')), ], ), diff --git a/src/backend/InvenTree/plugin/models.py b/src/backend/InvenTree/plugin/models.py index 06923f5ba7..bed2d80c8b 100644 --- a/src/backend/InvenTree/plugin/models.py +++ b/src/backend/InvenTree/plugin/models.py @@ -24,7 +24,7 @@ class PluginConfig(InvenTree.models.MetadataMixin, models.Model): Attributes: key: slug of the plugin (this must be unique across all installed plugins!) - name: PluginName of the plugin - serves for a manual double check if the right plugin is used + name: Name of the plugin - serves for a manual double check if the right plugin is used active: Should the plugin be loaded? """ @@ -52,7 +52,7 @@ class PluginConfig(InvenTree.models.MetadataMixin, models.Model): blank=True, max_length=255, verbose_name=_('Name'), - help_text=_('PluginName of the plugin'), + help_text=_('Name of the plugin'), ) package_name = models.CharField( diff --git a/src/backend/InvenTree/plugin/plugin.py b/src/backend/InvenTree/plugin/plugin.py index 558ca3edf8..2b3f5396af 100644 --- a/src/backend/InvenTree/plugin/plugin.py +++ b/src/backend/InvenTree/plugin/plugin.py @@ -1,14 +1,17 @@ """Base Class for InvenTree plugins.""" import inspect +import json +import re import warnings from datetime import datetime -from distutils.sysconfig import get_python_lib # type: ignore[import] +from distutils.sysconfig import get_python_lib # type: ignore[unresolved-import] from importlib.metadata import PackageNotFoundError, metadata from pathlib import Path from typing import Optional from django.conf import settings +from django.contrib.staticfiles.storage import StaticFilesStorage from django.utils.text import slugify from django.utils.translation import gettext_lazy as _ @@ -92,16 +95,16 @@ class MetaBase: TITLE = None @mark_final - def get_meta_value(self, key: str, old_key: Optional[str] = None, __default=None): + def get_meta_value(self, key: str, old_key: Optional[str] = None, default=None): """Reference a meta item with a key. Args: key (str): key for the value old_key (str, optional): deprecated key - will throw warning - __default (optional): Value if nothing with key can be found. Defaults to None. + default (optional): Value if nothing with key can be found. Defaults to None. Returns: - Value referenced with key, old_key or __default if set and not value found + Value referenced with key, old_key or default if set and not value found """ value = getattr(self, key, None) @@ -117,9 +120,9 @@ class MetaBase: stacklevel=2, ) - # Use __default if still nothing set - if (value is None) and __default: - return __default + # Use default if still nothing set + if value is None and default is not None: + return default return value @mark_final @@ -578,35 +581,119 @@ class InvenTreePlugin(VersionMixin, MixinBase, MetaBase): # endregion + def get_static_path(self) -> list[str]: + """Return the path components to the plugin's static files.""" + return ['plugins', self.slug] + + def hashed_file_lookup(self, *args) -> str | None: + """Find a hashed version of the given file, if it exists. + + This is used to support cache busting for static files. + + Arguments: + *args: Path components to the static file (e.g. 'js', 'admin.js') + + Returns: + str: Path to the hashed version of the file if it exists, else None + """ + storage = StaticFilesStorage() + + # First, try to find a manifest file which maps original filenames to hashed filenames + # We only support vite manifest files - as generated by the plugin creator framework + manifest_file = str(Path(*self.get_static_path(), '.vite', 'manifest.json')) + + if not storage.exists(manifest_file): + return None + + # Read the contents of the manifest file + try: + with storage.open(manifest_file) as f: + manifest = json.load(f) + except json.JSONDecodeError: + logger.error(f"Failed to parse manifest file for plugin '{self.SLUG}'") + return None + + # Find the entry associated with the requested file + # Remove the file extension, as the manifest may contain hashed files with different extensions (e.g. .js, .css) + filename = str(args[-1] or '').split('.')[0] + pattern = re.compile(rf'{re.escape(filename)}\.(js|jsx|tsx)') + + for key, value in manifest.items(): + if re.search(pattern, key): + return value.get('file') + + return None + @mark_final - def plugin_static_file(self, *args) -> str: + def plugin_static_file( + self, *args, check_exists: bool = True, check_hash: bool = True + ) -> str: """Construct a path to a static file within the plugin directory. + Arguments: + *args: Path components to the static file (e.g. 'js', 'admin.js') + check_exists: If True, will check if the file actually exists on disk + check_hash: If True, will fallback to checking if the file has a hash in its name (for cache busting) + - This will return a URL can be used to access the static file - The path is constructed using the STATIC_URL setting and the plugin slug - Note: If the plugin is selected for "development" mode, the path will point to a vite server URL + Hash Checking: + + - Plugins may distribute static files with a hash in the filename for cache busting purposes (e.g. 'file-abc123.js'). + - If available, this file is priorities, and the non-hashed version is ignored. + - If no hashed file is available, the non-hashed version will be used (if it exists). + - If check_hash is False, the non-hashed version of the file will be used (even if a hashed version exists). + """ - import os - from django.conf import settings + from django.contrib.staticfiles.storage import StaticFilesStorage + # If the plugin is selected for development mode, use the development host + # This allows the plugin developer to run a local vite server and have the plugin load files directly from that server if ( settings.DEBUG and settings.PLUGIN_DEV_HOST and settings.PLUGIN_DEV_SLUG and self.SLUG == settings.PLUGIN_DEV_SLUG ): - # If the plugin is selected for development mode, use the development host pathname = '/'.join(list(args)) url = f'{settings.PLUGIN_DEV_HOST}/src/{pathname}' url = url.replace('.js', '.tsx') - else: - # Otherwise, construct the URL using the STATIC_URL setting - url = os.path.join(settings.STATIC_URL, 'plugins', self.SLUG, *args) + return url - if not url.startswith('/'): - url = '/' + url + storage = StaticFilesStorage() + + file_name = args[-1] or '' + + # The file may be specified with a function, e.g. 'file.js:renderFunction' + if ':' in file_name: + file_name, function_name = file_name.split(':')[:2] + else: + function_name = '' + + # Determine the preceding path to the file (if any) + file_path = args[:-1] + + # If enabled, check for a hashed version of the file + if check_hash: + file_name = self.hashed_file_lookup(*file_path, file_name) or file_name + + full_path = str(Path(*self.get_static_path(), *file_path, file_name)) + + if check_exists: + if not storage.exists(full_path): + logger.error( + f"Static file not found for plugin '{self.SLUG}': {full_path}" + ) + + # Resolve the URL to the static file + url = storage.url(full_path) + + # Re-append the function name (if provided) + if function_name: + url += f':{function_name}' return url diff --git a/src/backend/InvenTree/plugin/registry.py b/src/backend/InvenTree/plugin/registry.py index 9d92637bba..af4bf49d02 100644 --- a/src/backend/InvenTree/plugin/registry.py +++ b/src/backend/InvenTree/plugin/registry.py @@ -473,12 +473,19 @@ class PluginsRegistry: # Ensure that each loaded plugin has a valid configuration object in the database for plugin in self.plugins.values(): - config = self.get_plugin_config(plugin.slug) + if config := self.get_plugin_config(plugin.slug): + # Ensure mandatory plugins are marked as active + if config.is_mandatory() and not config.active: + config.active = True - # Ensure mandatory plugins are marked as active - if config.is_mandatory() and not config.active: - config.active = True - config.save(no_reload=True) + try: + config.save(no_reload=True) + except (OperationalError, ProgrammingError): + # Database is not ready, cannot save config + logger.warning( + "Database not ready - cannot set mandatory flag for plugin '%s'", + plugin.slug, + ) except Exception as e: logger.exception('Unexpected error during plugin reload: %s', e) @@ -774,9 +781,9 @@ class PluginsRegistry: f"Plugin '{p}' is not compatible with the current InvenTree version {v}" ) if v := plg_i.MIN_VERSION: - _msg += _(f'Plugin requires at least version {v}') # type: ignore[unsupported-operator] + _msg += _(f'Plugin requires at least version {v}') # ty:ignore[unsupported-operator] if v := plg_i.MAX_VERSION: - _msg += _(f'Plugin requires at most version {v}') # type: ignore[unsupported-operator] + _msg += _(f'Plugin requires at most version {v}') # ty:ignore[unsupported-operator] # Log to error stack log_registry_error(_msg, reference=f'{p}:init_plugin') else: diff --git a/src/backend/InvenTree/plugin/samples/integration/validation_sample.py b/src/backend/InvenTree/plugin/samples/integration/validation_sample.py index 7a8592f25d..726201668e 100644 --- a/src/backend/InvenTree/plugin/samples/integration/validation_sample.py +++ b/src/backend/InvenTree/plugin/samples/integration/validation_sample.py @@ -68,7 +68,7 @@ class SampleValidatorPlugin(SettingsMixin, ValidationMixin, InvenTreePlugin): if isinstance(instance, part.models.BomItem): if self.get_setting('BOM_ITEM_INTEGER'): - if float(instance.quantity) != int(instance.quantity): + if float(instance.quantity) != int(instance.quantity): # noqa: RUF069 self.raise_error({ 'quantity': 'Bom item quantity must be an integer' }) diff --git a/src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py b/src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py index 9fe6d8ea00..4ea7d761b8 100644 --- a/src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py +++ b/src/backend/InvenTree/plugin/samples/supplier/supplier_sample.py @@ -1,5 +1,7 @@ """Sample supplier plugin.""" +from django.conf import settings + from company.models import Company, ManufacturerPart, SupplierPart, SupplierPriceBreak from part.models import Part from plugin.mixins import SupplierMixin, supplier @@ -13,7 +15,16 @@ class SampleSupplierPlugin(SupplierMixin, InvenTreePlugin): SLUG = 'samplesupplier' TITLE = 'My sample supplier plugin' - VERSION = '0.0.1' + VERSION = '0.0.2' + + SETTINGS = { + 'DOWNLOAD_IMAGES': { + 'name': 'Download part images', + 'description': 'Enable downloading of part images during import (not recommended during testing)', + 'validator': bool, + 'default': False, + } + } def __init__(self): """Initialize the sample supplier plugin.""" @@ -108,7 +119,12 @@ class SampleSupplierPlugin(SupplierMixin, InvenTreePlugin): # If the part was created, set additional fields if created: - if data['image_url']: + # Prevent downloading images during testing, as this can lead to unreliable tests + if ( + data['image_url'] + and not settings.TESTING + and self.get_setting('DOWNLOAD_IMAGES') + ): file, fmt = self.download_image(data['image_url']) filename = f'part_{part.pk}_image.{fmt.lower()}' part.image.save(filename, file) @@ -136,7 +152,7 @@ class SampleSupplierPlugin(SupplierMixin, InvenTreePlugin): # after the template part was created, we need to refresh the part from the db because its tree id may have changed # which results in an error if saved directly part.refresh_from_db() - part.variant_of = parent_part # type: ignore + part.variant_of = parent_part part.save() return part diff --git a/src/backend/InvenTree/plugin/serializers.py b/src/backend/InvenTree/plugin/serializers.py index 88fc9f7746..5fbff385b4 100644 --- a/src/backend/InvenTree/plugin/serializers.py +++ b/src/backend/InvenTree/plugin/serializers.py @@ -149,7 +149,7 @@ class PluginConfigInstallSerializer(serializers.Serializer): if not data.get('confirm'): raise ValidationError({'confirm': _('Installation not confirmed')}) if (not data.get('url')) and (not data.get('packagename')): - msg = _('Either packagename of URL must be provided') + msg = _('Either packagename or URL must be provided') raise ValidationError({'url': msg, 'packagename': msg}) return data diff --git a/src/backend/InvenTree/plugin/test_api.py b/src/backend/InvenTree/plugin/test_api.py index 424067b8e4..ca6c312670 100644 --- a/src/backend/InvenTree/plugin/test_api.py +++ b/src/backend/InvenTree/plugin/test_api.py @@ -17,7 +17,7 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): def setUp(self): """Setup for all tests.""" - self.MSG_NO_PKG = 'Either packagename of URL must be provided' + self.MSG_NO_PKG = 'Either packagename or URL must be provided' self.PKG_NAME = 'inventree-brother-plugin' self.PKG_URL = 'git+https://github.com/inventree/inventree-brother-plugin' @@ -470,8 +470,7 @@ class PluginDetailAPITest(PluginMixin, InvenTreeAPITestCase): 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) + self.get(f'/api/plugins/{cfg.key}/metadata/', expected_code=200, follow=True) def test_settings(self): """Test settings endpoint for plugin.""" diff --git a/src/backend/InvenTree/plugin/test_plugin.py b/src/backend/InvenTree/plugin/test_plugin.py index cdabd46477..2d7c3eba04 100644 --- a/src/backend/InvenTree/plugin/test_plugin.py +++ b/src/backend/InvenTree/plugin/test_plugin.py @@ -209,6 +209,54 @@ class InvenTreePluginTests(TestCase): if plug: self.assertEqual(plug.is_active(), False) + def test_plugin_static_file_lookup(self): + """Test that the plugin static file lookup works as expected.""" + from django.contrib.staticfiles.storage import StaticFilesStorage + from django.core.files.base import ContentFile + + # Create a sample plugin with a known static file + class StaticFilePlugin(InvenTreePlugin): + NAME = 'StaticFilePlugin' + SLUG = 'static-file-test' + + def get_static_file_url(self, file_name): + return self.get_plugin_static_file(file_name) + + plugin = StaticFilePlugin() + storage = StaticFilesStorage() + + # A simple test to ensure the path is correctly resolved + self.assertEqual( + plugin.plugin_static_file( + 'sample.js', check_exists=False, check_hash=False + ), + storage.url('plugins/static-file-test/sample.js'), + ) + + manifest_path = 'plugins/static-file-test/.vite/manifest.json' + + manifest_data = textwrap.dedent("""{ + "src/sample.js": { + "file": "sample.123456.js", + "name": "sample", + "src": "src/sample.js", + "isEntry": true + } + }""") + + # A more comprehensive test - to find a hashed version of the file + # Note: This requires a manifest file to be present - let's create one + if not storage.exists(manifest_path): + storage.save(manifest_path, content=ContentFile(manifest_data)) + + lookup = plugin.plugin_static_file( + 'sample.js', check_exists=False, check_hash=True + ) + + self.assertEqual( + lookup, storage.url('plugins/static-file-test/sample.123456.js') + ) + class RegistryTests(TestQueryMixin, PluginRegistryMixin, TestCase): """Tests for registry loading methods.""" @@ -254,7 +302,7 @@ class RegistryTests(TestQueryMixin, PluginRegistryMixin, TestCase): def test_folder_loading(self): """Test that plugins in folders outside of BASE_DIR get loaded.""" # Run in temporary directory -> always a new random name - with tempfile.TemporaryDirectory() as tmp: # type: ignore[no-matching-overload] + with tempfile.TemporaryDirectory() as tmp: # Fill directory with sample data new_dir = Path(tmp).joinpath('mock') shutil.copytree(self.mockDir(), new_dir) diff --git a/src/backend/InvenTree/report/api.py b/src/backend/InvenTree/report/api.py index d54ea59d96..a02bfe74ae 100644 --- a/src/backend/InvenTree/report/api.py +++ b/src/backend/InvenTree/report/api.py @@ -18,7 +18,7 @@ import report.models import report.serializers from common.models import DataOutput from common.serializers import DataOutputSerializer -from InvenTree.api import MetadataView +from InvenTree.api import meta_path from InvenTree.filters import InvenTreeSearchFilter from InvenTree.mixins import ListCreateAPI, RetrieveUpdateDestroyAPI from plugin import PluginMixinEnum @@ -356,11 +356,7 @@ label_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=report.models.LabelTemplate), - name='api-label-template-metadata', - ), + meta_path(report.models.LabelTemplate), path( '', LabelTemplateDetail.as_view(), @@ -383,11 +379,7 @@ report_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=report.models.ReportTemplate), - name='api-report-template-metadata', - ), + meta_path(report.models.ReportTemplate), path( '', ReportTemplateDetail.as_view(), diff --git a/src/backend/InvenTree/report/apps.py b/src/backend/InvenTree/report/apps.py index 534c239546..0ef083f38c 100644 --- a/src/backend/InvenTree/report/apps.py +++ b/src/backend/InvenTree/report/apps.py @@ -7,6 +7,7 @@ from django.apps import AppConfig from django.core.exceptions import AppRegistryNotReady, ValidationError from django.core.files.base import ContentFile from django.core.files.storage import default_storage +from django.db import transaction from django.db.utils import IntegrityError, OperationalError, ProgrammingError import structlog @@ -160,9 +161,10 @@ class ReportConfig(AppConfig): # Otherwise, create a new entry try: # Create a new entry - report.models.LabelTemplate.objects.create( - **template, template=self.file_from_template('label', filename) - ) + with transaction.atomic(): + report.models.LabelTemplate.objects.create( + **template, template=self.file_from_template('label', filename) + ) logger.info("Creating new label template: '%s'", template['name']) except ValidationError: logger.warning( diff --git a/src/backend/InvenTree/report/models.py b/src/backend/InvenTree/report/models.py index 677500ea3b..8ab0168899 100644 --- a/src/backend/InvenTree/report/models.py +++ b/src/backend/InvenTree/report/models.py @@ -704,7 +704,7 @@ class LabelTemplate(TemplateUploadMixin, ReportTemplateBase): def get_context(self, instance, request=None, **kwargs): """Supply context data to the label template for rendering.""" base_context = super().get_context(instance, request, **kwargs) - label_context: LabelContextExtension = { # type: ignore[invalid-assignment] + label_context: LabelContextExtension = { 'width': self.width, 'height': self.height, 'page_style': None, diff --git a/src/backend/InvenTree/report/templatetags/report.py b/src/backend/InvenTree/report/templatetags/report.py index 6329b5a9dc..8172f2c30f 100644 --- a/src/backend/InvenTree/report/templatetags/report.py +++ b/src/backend/InvenTree/report/templatetags/report.py @@ -5,12 +5,16 @@ import logging import os from datetime import date, datetime from decimal import Decimal, InvalidOperation +from io import BytesIO +from pathlib import Path from typing import Any, Optional from django import template from django.apps.registry import apps from django.conf import settings -from django.core.exceptions import ValidationError +from django.contrib.staticfiles.storage import staticfiles_storage +from django.core.exceptions import SuspiciousFileOperation, ValidationError +from django.core.files.storage import default_storage from django.db.models import Model from django.db.models.query import QuerySet from django.utils.safestring import SafeString, mark_safe @@ -145,32 +149,154 @@ def getkey(container: dict, key: str, backup_value: Optional[Any] = None) -> Any return container.get(key, backup_value) +def media_file_exists(path: Path | str) -> bool: + """Check if a media file exists at the specified path. + + Arguments: + path: The path to the media file, relative to the media storage root + + Returns: + True if the file exists, False otherwise + """ + if not path: + return False + + try: + return default_storage.exists(str(path)) + except SuspiciousFileOperation: + # Prevent path traversal attacks + raise ValidationError(_('Invalid media file path') + f": '{path}'") + + +def static_file_exists(path: Path | str) -> bool: + """Check if a static file exists at the specified path. + + Arguments: + path: The path to the static file, relative to the static storage root + + Returns: + True if the file exists, False otherwise + """ + if not path: + return False + + try: + return staticfiles_storage.exists(str(path)) + except SuspiciousFileOperation: + # Prevent path traversal attacks + raise ValidationError(_('Invalid static file path') + f": '{path}'") + + +def get_static_file_contents( + path: Path | str, raise_error: bool = False +) -> bytes | None: + """Return the contents of a static file. + + Arguments: + path: The path to the static file, relative to the static storage root + raise_error: If True, raise an error if the file cannot be found (default = False) + + Returns: + The contents of the static file, or None if the file cannot be found + """ + if not path: + if raise_error: + raise ValueError('No static file specified') + else: + return None + + if not staticfiles_storage.exists(path): + if raise_error: + raise FileNotFoundError(f'Static file does not exist: {path!s}') + else: + return None + + with staticfiles_storage.open(str(path)) as f: + file_data = f.read() + + return file_data + + +def get_media_file_contents( + path: Path | str, raise_error: bool = False +) -> bytes | None: + """Return the fully qualified file path to an uploaded media file. + + Arguments: + path: The path to the media file, relative to the media storage root + raise_error: If True, raise an error if the file cannot be found (default = False) + + Returns: + The contents of the media file, or None if the file cannot be found + + Raises: + FileNotFoundError: If the requested media file cannot be loaded + PermissionError: If the requested media file is outside of the media root + ValidationError: If the provided path is invalid + + Notes: + - The resulting path is resolved against the media root directory + """ + if not path: + if raise_error: + raise ValueError('No media file specified') + else: + return None + + if not media_file_exists(path): + if raise_error: + raise FileNotFoundError(f'Media file does not exist: {path!s}') + else: + return None + + # Load the file - and return the contents + with default_storage.open(str(path)) as f: + file_data = f.read() + + return file_data + + @register.simple_tag() -def asset(filename): +def asset(filename: str, raise_error: bool = False) -> str | None: """Return fully-qualified path for an upload report asset file. Arguments: filename: Asset filename (relative to the 'assets' media directory) + raise_error: If True, raise an error if the file cannot be found (default = False) Raises: FileNotFoundError: If file does not exist + ValueError: If an invalid filename is provided (e.g. empty string) + ValidationError: If the filename is invalid (e.g. path traversal attempt) """ + if not filename: + if raise_error: + raise ValueError('No asset file specified') + else: + return None + if type(filename) is SafeString: # Prepend an empty string to enforce 'stringiness' filename = '' + filename - # If in debug mode, return URL to the image, not a local file - debug_mode = get_global_setting('REPORT_DEBUG_MODE', cache=False) + # Remove any leading slash characters from the filename, to prevent path traversal attacks + filename = str(filename).lstrip('/\\') - # Test if the file actually exists - full_path = settings.MEDIA_ROOT.joinpath('report', 'assets', filename).resolve() + full_path = Path('report', 'assets', filename) - if not full_path.exists() or not full_path.is_file(): - raise FileNotFoundError(_('Asset file does not exist') + f": '{filename}'") + if not media_file_exists(full_path): + if raise_error: + raise FileNotFoundError(_('Asset file not found') + f": '{filename}'") + else: + return None - if debug_mode: - return os.path.join(settings.MEDIA_URL, 'report', 'assets', filename) - return f'file://{full_path}' + # In debug mode, return a web URL to the asset file (rather than a local file path) + if get_global_setting('REPORT_DEBUG_MODE', cache=False): + return str(Path(settings.MEDIA_URL, 'report', 'assets', filename)) + + storage_path = default_storage.path(str(full_path)) + + return f'file://{storage_path}' @register.simple_tag() @@ -182,61 +308,71 @@ def uploaded_image( width: Optional[int] = None, height: Optional[int] = None, rotate: Optional[float] = None, + raise_error: bool = False, **kwargs, ) -> str: """Return raw image data from an 'uploaded' image. Arguments: - filename: The filename of the image relative to the MEDIA_ROOT directory + filename: The filename of the image relative to the media root directory replace_missing: Optionally return a placeholder image if the provided filename does not exist (default = True) replacement_file: The filename of the placeholder image (default = 'blank_image.png') validate: Optionally validate that the file is a valid image file width: Optional width of the image height: Optional height of the image rotate: Optional rotation to apply to the image + raise_error: If True, raise an error if the file cannot be found (default = False) Returns: Binary image data to be rendered directly in a tag Raises: FileNotFoundError: If the file does not exist + ValueError: If an invalid filename is provided (e.g. empty string) """ if type(filename) is SafeString: # Prepend an empty string to enforce 'stringiness' filename = '' + filename + # Strip out any leading slash characters from the filename, to prevent path traversal attacks + filename = str(filename).lstrip('/\\') + # If in debug mode, return URL to the image, not a local file debug_mode = get_global_setting('REPORT_DEBUG_MODE', cache=False) - # Check if the file exists - if not filename: - exists = False - else: - try: - full_path = settings.MEDIA_ROOT.joinpath(filename).resolve() - exists = full_path.exists() and full_path.is_file() - except Exception: # pragma: no cover - exists = False # pragma: no cover - - if exists and validate and not InvenTree.helpers.TestIfImage(full_path): - logger.warning("File '%s' is not a valid image", filename) - exists = False + # Load image data - this will check if the file exists + exists = bool(filename) and media_file_exists(filename) if not exists and not replace_missing: raise FileNotFoundError(_('Image file not found') + f": '{filename}'") + if exists: + img_data = get_media_file_contents(filename, raise_error=raise_error) + + # Check if the image data is valid + if ( + img_data + and validate + and not InvenTree.helpers.TestIfImage(BytesIO(img_data)) + ): + logger.warning("File '%s' is not a valid image", filename) + img_data = None + exists = False + else: + # Load the backup image from the static files directory + replacement_file_path = Path('img', replacement_file) + img_data = get_static_file_contents( + replacement_file_path, raise_error=raise_error + ) + if debug_mode: # In debug mode, return a web path (rather than an encoded image blob) if exists: return os.path.join(settings.MEDIA_URL, filename) return os.path.join(settings.STATIC_URL, 'img', replacement_file) - elif not exists: - full_path = settings.STATIC_ROOT.joinpath('img', replacement_file).resolve() - - # Load the image, check that it is valid - if full_path.exists() and full_path.is_file(): - img = Image.open(full_path) + if img_data: + img = Image.open(BytesIO(img_data)) else: # A placeholder image showing that the image is missing img = Image.new('RGB', (64, 64), color='red') @@ -288,22 +424,15 @@ def encode_svg_image(filename: str) -> str: # Prepend an empty string to enforce 'stringiness' filename = '' + filename - # Check if the file exists + # Remove any leading slash characters from the filename, to prevent path traversal attacks + filename = str(filename).lstrip('/\\') + if not filename: - exists = False - else: - try: - full_path = settings.MEDIA_ROOT.joinpath(filename).resolve() - exists = full_path.exists() and full_path.is_file() - except Exception: - exists = False + raise FileNotFoundError(_('No image file specified')) - if not exists: - raise FileNotFoundError(_('Image file not found') + f": '{filename}'") - - # Read the file data - with open(full_path, 'rb') as f: - data = f.read() + # Read out the file contents + # Note: This will check if the file exists, and raise an error if it does not + data = get_media_file_contents(filename) # Return the base64-encoded data return 'data:image/svg+xml;charset=utf-8;base64,' + base64.b64encode(data).decode( @@ -323,8 +452,15 @@ def part_image(part: Part, preview: bool = False, thumbnail: bool = False, **kwa Raises: TypeError: If provided part is not a Part instance """ - if type(part) is not Part: + if not part or not isinstance(part, Part): raise TypeError(_('part_image tag requires a Part instance')) + + image_filename = InvenTree.helpers.image2name(part.image, preview, thumbnail) + + if kwargs.get('check_exists'): + if not media_file_exists(image_filename): + raise FileNotFoundError(_('Image file not found') + f": '{image_filename}'") + return uploaded_image( InvenTree.helpers.image2name(part.image, preview, thumbnail), **kwargs ) @@ -350,7 +486,8 @@ def parameter( raise TypeError("parameter tag requires a Model with 'parameters' attribute") return ( - instance.parameters.prefetch_related('template') + instance.parameters + .prefetch_related('template') .filter(template__name=parameter_name) .first() ) diff --git a/src/backend/InvenTree/report/test_tags.py b/src/backend/InvenTree/report/test_tags.py index 337b46e6b2..abee2b09c8 100644 --- a/src/backend/InvenTree/report/test_tags.py +++ b/src/backend/InvenTree/report/test_tags.py @@ -14,7 +14,6 @@ from djmoney.money import Money from PIL import Image from common.models import InvenTreeSetting, Parameter, ParameterTemplate -from InvenTree.config import get_testfolder_dir from InvenTree.unit_test import InvenTreeTestCase from part.models import Part # TODO fix import: PartParameter, PartParameterTemplate from part.test_api import PartImageTestMixin @@ -62,7 +61,15 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): self.debug_mode(b) with self.assertRaises(FileNotFoundError): - report_tags.asset('bad_file.txt') + report_tags.asset('bad_file.txt', raise_error=True) + + # Test for missing file, no error + self.assertIsNone(report_tags.asset('missing.txt')) + + self.assertIsNone(report_tags.asset('')) + + with self.assertRaises(ValueError): + report_tags.asset('', raise_error=True) # Create an asset file asset_dir = settings.MEDIA_ROOT.joinpath('report', 'assets') @@ -81,7 +88,28 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): self.debug_mode(False) asset = report_tags.asset('test.txt') - self.assertEqual(asset, f'file://{asset_dir}/test.txt') + self.assertEqual(asset, f'file://{settings.MEDIA_ROOT}/report/assets/test.txt') + + # Test for attempted path traversal + with self.assertRaises(ValidationError): + report_tags.asset('../../../report/assets/test.txt') + + def test_file_access(self): + """Tests for media and static file access.""" + for fn in [None, '', '@@@@@@', 'fake_file.txt']: + self.assertFalse(report_tags.media_file_exists(fn)) + self.assertFalse(report_tags.static_file_exists(fn)) + + with self.assertRaises(FileNotFoundError): + report_tags.get_media_file_contents('dummy_file.txt', raise_error=True) + + with self.assertRaises(ValueError): + report_tags.get_static_file_contents(None, raise_error=True) + + # Try again, without throwing an error + self.assertIsNone( + report_tags.get_media_file_contents('dummy_file.txt', raise_error=False) + ) def test_uploaded_image(self): """Tests for retrieving uploaded images.""" @@ -148,6 +176,10 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): ) self.assertTrue(img.startswith('data:image/png;charset=utf-8;base64,')) + # Attempted path traversal + with self.assertRaises(ValidationError): + report_tags.uploaded_image('../../../part/images/test.jpg') + def test_part_image(self): """Unit tests for the 'part_image' tag.""" with self.assertRaises(TypeError): @@ -157,8 +189,10 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): self.create_test_image() obj.refresh_from_db() - report_tags.part_image(obj, preview=True) - report_tags.part_image(obj, thumbnail=True) + r = report_tags.part_image(obj, preview=True) + self.assertIn('data:image/png;charset=utf-8;base64,', r) + r = report_tags.part_image(obj, thumbnail=True) + self.assertIn('data:image/png;charset=utf-8;base64,', r) def test_company_image(self): """Unit tests for the 'company_image' tag.""" @@ -392,12 +426,16 @@ class ReportTagTest(PartImageTestMixin, InvenTreeTestCase): def test_encode_svg_image(self): """Test the encode_svg_image template tag.""" # Generate smallest possible SVG for testing - svg_path = get_testfolder_dir() / 'part_image_123abc.png' + # Store it in the media directory + + img_path = 'part_image_123abc.png' + svg_path = settings.MEDIA_ROOT / img_path + with open(svg_path, 'w', encoding='utf8') as f: f.write(' dict: @@ -1592,8 +1660,6 @@ class StockTrackingList( filter_backends = SEARCH_ORDER_FILTER - filterset_fields = ['item', 'user'] - ordering = '-date' ordering_fields = ['date'] @@ -1610,11 +1676,7 @@ stock_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=StockLocation), - name='api-location-metadata', - ), + meta_path(StockLocation), path('', StockLocationDetail.as_view(), name='api-location-detail'), ]), ), @@ -1628,11 +1690,7 @@ stock_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=StockLocationType), - name='api-location-type-metadata', - ), + meta_path(StockLocationType), path( '', StockLocationTypeDetail.as_view(), @@ -1659,11 +1717,7 @@ stock_api_urls = [ path( '/', include([ - path( - 'metadata/', - MetadataView.as_view(model=StockItemTestResult), - name='api-stock-test-result-metadata', - ), + meta_path(StockItemTestResult), path( '', StockItemTestResultDetail.as_view(), @@ -1701,11 +1755,7 @@ stock_api_urls = [ include([ path('convert/', StockItemConvert.as_view(), name='api-stock-item-convert'), path('install/', StockItemInstall.as_view(), name='api-stock-item-install'), - path( - 'metadata/', - MetadataView.as_view(model=StockItem), - name='api-stock-item-metadata', - ), + meta_path(StockItem), path( 'serialize/', StockItemSerialize.as_view(), diff --git a/src/backend/InvenTree/stock/filters.py b/src/backend/InvenTree/stock/filters.py index 0baf125875..e10479b580 100644 --- a/src/backend/InvenTree/stock/filters.py +++ b/src/backend/InvenTree/stock/filters.py @@ -28,7 +28,8 @@ def annotate_location_items(filter: Optional[Q] = None): return Coalesce( Subquery( - subquery.annotate( + subquery + .annotate( total=Func(F('pk'), function='COUNT', output_field=IntegerField()) ) .values('total') @@ -50,7 +51,8 @@ def annotate_sub_locations(): return Coalesce( Subquery( - subquery.annotate( + subquery + .annotate( count=Func(F('pk'), function='COUNT', output_field=IntegerField()) ) .values('count') diff --git a/src/backend/InvenTree/stock/generators.py b/src/backend/InvenTree/stock/generators.py index 526617395e..ffefa04a5a 100644 --- a/src/backend/InvenTree/stock/generators.py +++ b/src/backend/InvenTree/stock/generators.py @@ -4,8 +4,7 @@ from inspect import signature from typing import Optional from django.core.exceptions import ValidationError - -from jinja2 import Template +from django.template import Context, Template import common.models import InvenTree.exceptions @@ -76,7 +75,7 @@ def generate_batch_code(**kwargs): 'STOCK_BATCH_CODE_TEMPLATE', '' ) - return Template(batch_template).render(context) + return Template(batch_template).render(Context(context)) def generate_serial_number(part=None, quantity=1, **kwargs) -> Optional[str]: diff --git a/src/backend/InvenTree/stock/migrations/0117_stockitemtracking_part_alter_stockitemtracking_item.py b/src/backend/InvenTree/stock/migrations/0117_stockitemtracking_part_alter_stockitemtracking_item.py new file mode 100644 index 0000000000..9091c57a30 --- /dev/null +++ b/src/backend/InvenTree/stock/migrations/0117_stockitemtracking_part_alter_stockitemtracking_item.py @@ -0,0 +1,36 @@ +# Generated by Django 5.2.10 on 2026-02-05 12:17 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("part", "0146_auto_20251203_1241"), + ("stock", "0116_alter_stockitem_link"), + ] + + operations = [ + migrations.AddField( + model_name="stockitemtracking", + name="part", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="stock_tracking_info", + to="part.part", + ), + ), + migrations.AlterField( + model_name="stockitemtracking", + name="item", + field=models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="tracking_info", + to="stock.stockitem", + ), + ), + ] diff --git a/src/backend/InvenTree/stock/migrations/0118_auto_20260205_1218.py b/src/backend/InvenTree/stock/migrations/0118_auto_20260205_1218.py new file mode 100644 index 0000000000..450ecf6b7b --- /dev/null +++ b/src/backend/InvenTree/stock/migrations/0118_auto_20260205_1218.py @@ -0,0 +1,73 @@ +# Generated by Django 5.2.10 on 2026-02-05 12:18 + +from django.db import migrations + + +def add_part_links(apps, schema_editor): + """Add links to the Part model for all existing StockItemTracking entries.""" + + StockItemTracking = apps.get_model('stock', 'StockItemTracking') + + history_entries = [] + + N = StockItemTracking.objects.count() + + if N > 0: + print(f"\nUpdating {N} StockItemTracking entries with part links...") + + for tracking in StockItemTracking.objects.filter(part__isnull=True).select_related('item__part'): + + item = tracking.item + + # No item link - skip + if item is None: + continue + + part = item.part + + # No part link - skip + if part is None: + continue + + # Already linked to the correct part - skip + if tracking.part == part: + continue + + tracking.part = part + history_entries.append(tracking) + + # Process in batches to avoid issues with very large datasets + if len(history_entries) >= 100: + StockItemTracking.objects.bulk_update(history_entries, ['part']) + history_entries = [] + print(".", end='', flush=True) + + if len(history_entries) > 0: + StockItemTracking.objects.bulk_update(history_entries, ['part']) + + +def remove_null_items(apps, schema_editor): + """Reverse migration - remove any StockItemTracking entries which have a null item link.""" + + StockItemTracking = apps.get_model('stock', 'StockItemTracking') + + null_items = StockItemTracking.objects.filter(item__isnull=True) + + count = null_items.count() + + if count > 0: + null_items.delete() + print(f"\nDeleted {count} StockItemTracking entries with null item links") + +class Migration(migrations.Migration): + + dependencies = [ + ("stock", "0117_stockitemtracking_part_alter_stockitemtracking_item"), + ] + + operations = [ + migrations.RunPython( + add_part_links, + reverse_code=remove_null_items, + ) + ] diff --git a/src/backend/InvenTree/stock/models.py b/src/backend/InvenTree/stock/models.py index 07fef64c5c..a3406adb41 100644 --- a/src/backend/InvenTree/stock/models.py +++ b/src/backend/InvenTree/stock/models.py @@ -65,6 +65,8 @@ class StockLocationType(InvenTree.models.MetadataMixin, models.Model): icon: icon class """ + IMPORT_ID_FIELDS = ['name'] + class Meta: """Metaclass defines extra model properties.""" @@ -120,6 +122,7 @@ class StockLocationReportContext(report.mixins.BaseReportContext): class StockLocation( InvenTree.models.PluginValidationMixin, + InvenTree.models.InvenTreeParameterMixin, InvenTree.models.InvenTreeBarcodeMixin, report.mixins.InvenTreeReportMixin, InvenTree.models.PathStringMixin, @@ -133,8 +136,8 @@ class StockLocation( """ ITEM_PARENT_KEY = 'location' - EXTRA_PATH_FIELDS = ['icon'] + IMPORT_ID_FIELDS = ['pathstring', 'name'] objects = TreeManager() @@ -433,6 +436,7 @@ class StockItem( packaging: Description of how the StockItem is packaged (e.g. "reel", "loose", "tape" etc) """ + IMPORT_ID_FIELDS = ['serial'] STATUS_CLASS = StockStatus class Meta: @@ -517,12 +521,14 @@ class StockItem( status__in=StockStatusGroups.AVAILABLE_CODES, ) - # A query filter which can be used to filter StockItem objects which have expired - EXPIRED_FILTER = ( - IN_STOCK_FILTER - & ~Q(expiry_date=None) - & Q(expiry_date__lt=InvenTree.helpers.current_date()) - ) + @classmethod + def get_expired_filter(cls): + """A query filter which can be used to filter StockItem objects which have expired.""" + return ( + cls.IN_STOCK_FILTER + & ~Q(expiry_date=None) + & Q(expiry_date__lt=InvenTree.helpers.current_date()) + ) @classmethod def _create_serial_numbers(cls, serials: list, **kwargs) -> QuerySet: @@ -794,12 +800,28 @@ class StockItem( try: old = StockItem.objects.get(pk=self.pk) + old_custom_status = old.get_custom_status() + custom_status = self.get_custom_status() deltas = {} # Status changed? if old.status != self.status: - deltas['status'] = self.status + # Custom status changed? + # Matches custom status tracking behavior of StockChangeStatusSerializer + if old_custom_status != custom_status: + deltas['status'] = custom_status + deltas['status_logical'] = self.status + else: + deltas['status'] = self.status + deltas['status_logical'] = self.status + + if old_custom_status: + deltas['old_status'] = old_custom_status + deltas['old_status_logical'] = old.status + else: + deltas['old_status'] = old.status + deltas['old_status_logical'] = old.status if add_note and len(deltas) > 0: self.add_tracking_entry( @@ -1343,7 +1365,7 @@ class StockItem( item.save(add_note=False) code = StockHistoryCode.SENT_TO_CUSTOMER - deltas = {} + deltas = {'quantity': float(quantity)} if customer is not None: deltas['customer'] = customer.pk @@ -1424,7 +1446,11 @@ class StockItem( # Split the stock item item = self.splitStock(quantity, None, user) - tracking_info = {} + tracking_info = { + 'quantity': float(quantity) + if quantity is not None + else float(item.quantity) + } if location: tracking_info['location'] = location.pk @@ -1445,8 +1471,17 @@ class StockItem( if status := kwargs.pop('status', None): if not item.compare_status(status): + old_custom_status = item.get_custom_status() + old_status_logical = item.status item.set_status(status) - tracking_info['status'] = status + tracking_info['status'] = status # may be a custom value + tracking_info['status_logical'] = ( + item.status + ) # always the logical value + tracking_info['old_status'] = ( + old_custom_status if old_custom_status else old_status_logical + ) + tracking_info['old_status_logical'] = old_status_logical item.save() @@ -1625,7 +1660,7 @@ class StockItem( stock_item.location = None stock_item.save(add_note=False) - deltas = {'stockitem': self.pk} + deltas = {'stockitem': self.pk, 'quantity': float(quantity)} if build is not None: deltas['buildorder'] = build.pk @@ -1640,7 +1675,7 @@ class StockItem( StockHistoryCode.INSTALLED_CHILD_ITEM, user, notes=notes, - deltas={'stockitem': stock_item.pk}, + deltas={'stockitem': stock_item.pk, 'quantity': float(quantity)}, ) trigger_event( @@ -1666,11 +1701,14 @@ class StockItem( self.belongs_to.add_tracking_entry( StockHistoryCode.REMOVED_CHILD_ITEM, user, - deltas={'stockitem': self.pk}, + deltas={'stockitem': self.pk, 'quantity': float(self.quantity)}, notes=notes, ) - tracking_info = {'stockitem': self.belongs_to.pk} + tracking_info = { + 'stockitem': self.belongs_to.pk, + 'quantity': float(self.quantity), + } self.add_tracking_entry( StockHistoryCode.REMOVED_FROM_ASSEMBLY, @@ -1779,7 +1817,7 @@ class StockItem( user (User): The user performing this action deltas (dict, optional): A map of the changes made to the model. Defaults to None. notes (str, optional): URL associated with this tracking entry. Defaults to ''. - commit (boolm optional): If True, save the entry to the database. Defaults to True. + commit (bool, optional): If True, save the entry to the database. Defaults to True. Returns: StockItemTracking: The created tracking entry @@ -1809,6 +1847,7 @@ class StockItem( entry = StockItemTracking( item=self, + part=self.part, tracking_type=entry_type.value, user=user, date=InvenTree.helpers.current_time(), @@ -1938,7 +1977,7 @@ class StockItem( # Remove the equivalent number of items self.take_stock( - quantity, user, code=StockHistoryCode.STOCK_SERIZALIZED, notes=notes + quantity, user, code=StockHistoryCode.STOCK_SERIALIZED, notes=notes ) return items @@ -2149,7 +2188,10 @@ class StockItem( user, quantity=self.quantity, notes=notes, - deltas={'location': location.pk if location else None}, + deltas={ + 'location': location.pk if location else None, + 'quantity': self.quantity, + }, ) # Update the location of the item @@ -2267,8 +2309,26 @@ class StockItem( # Optional fields which can be supplied in a 'move' call for field in StockItem.optional_transfer_fields(): if field in kwargs: - setattr(new_stock, field, kwargs[field]) - deltas[field] = kwargs[field] + # handle specific case for status deltas + if field == 'status': + status = kwargs[field] + if not new_stock.compare_status(status): + old_custom_status = new_stock.get_custom_status() + old_status_logical = new_stock.status + new_stock.set_status(status) + deltas['status'] = status # may be a custom value + deltas['status_logical'] = ( + new_stock.status + ) # always the logical value + deltas['old_status'] = ( + old_custom_status + if old_custom_status + else old_status_logical + ) + deltas['old_status_logical'] = old_status_logical + else: + setattr(new_stock, field, kwargs[field]) + deltas[field] = kwargs[field] new_stock.save(add_note=False) @@ -2372,7 +2432,7 @@ class StockItem( self.location = location - tracking_info = {} + tracking_info = {'quantity': float(quantity)} tracking_code = StockHistoryCode.STOCK_MOVE @@ -2384,8 +2444,15 @@ class StockItem( status = kwargs.pop('status', None) or kwargs.pop('status_custom_key', None) if status and not self.compare_status(status): + old_custom_status = self.get_custom_status() + old_status_logical = self.status self.set_status(status) - tracking_info['status'] = status + tracking_info['status'] = status # may be a custom value + tracking_info['status_logical'] = self.status # always the logical value + tracking_info['old_status'] = ( + old_custom_status if old_custom_status else old_status_logical + ) + tracking_info['old_status_logical'] = old_status_logical # Optional fields which can be supplied in a 'move' call for field in StockItem.optional_transfer_fields(): @@ -2436,7 +2503,7 @@ class StockItem( return False - self.save() + self.save(add_note=False) trigger_event( StockEvents.ITEM_QUANTITY_UPDATED, id=self.id, quantity=float(self.quantity) @@ -2469,8 +2536,15 @@ class StockItem( status = kwargs.pop('status', None) or kwargs.pop('status_custom_key', None) if status and not self.compare_status(status): + old_custom_status = self.get_custom_status() + old_status_logical = self.status self.set_status(status) - tracking_info['status'] = status + tracking_info['status'] = status # may be a custom value + tracking_info['status_logical'] = self.status # always the logical value + tracking_info['old_status'] = ( + old_custom_status if old_custom_status else old_status_logical + ) + tracking_info['old_status_logical'] = old_status_logical if self.updateQuantity(count): tracking_info['quantity'] = float(count) @@ -2532,8 +2606,15 @@ class StockItem( status = kwargs.pop('status', None) or kwargs.pop('status_custom_key', None) if status and not self.compare_status(status): + old_custom_status = self.get_custom_status() + old_status_logical = self.status self.set_status(status) - tracking_info['status'] = status + tracking_info['status'] = status # may be a custom value + tracking_info['status_logical'] = self.status # always the logical value + tracking_info['old_status'] = ( + old_custom_status if old_custom_status else old_status_logical + ) + tracking_info['old_status_logical'] = old_status_logical if self.updateQuantity(self.quantity + quantity): tracking_info['added'] = float(quantity) @@ -2586,8 +2667,15 @@ class StockItem( status = kwargs.pop('status', None) or kwargs.pop('status_custom_key', None) if status and not self.compare_status(status): + old_custom_status = self.get_custom_status() + old_status_logical = self.status self.set_status(status) - deltas['status'] = status + deltas['status'] = status # may be a custom value + deltas['status_logical'] = self.status # always the logical value + deltas['old_status'] = ( + old_custom_status if old_custom_status else old_status_logical + ) + deltas['old_status_logical'] = old_status_logical if self.updateQuantity(self.quantity - quantity): deltas['removed'] = float(quantity) @@ -2797,21 +2885,18 @@ def after_save_stock_item(sender, instance: StockItem, created, **kwargs): class StockItemTracking(InvenTree.models.InvenTreeModel): """Stock tracking entry - used for tracking history of a particular StockItem. - Note: 2021-05-11 - The legacy StockTrackingItem model contained very little information about the "history" of the item. - In fact, only the "quantity" of the item was recorded at each interaction. - Also, the "title" was translated at time of generation, and thus was not really translatable. - The "new" system tracks all 'delta' changes to the model, - and tracks change "type" which can then later be translated - - Attributes: item: ForeignKey reference to a particular StockItem + part: ForeignKey reference to the Part associated with this StockItem date: Date that this tracking info was created tracking_type: The type of tracking information notes: Associated notes (input by user) user: The user associated with this tracking info deltas: The changes associated with this history item + + Notes: + If the underlying stock item is deleted, the "item" field will be set to null, but the tracking information will be retained. + The tracking data will be removed if the associated part is deleted, as the tracking information is not relevant without the part context. """ class Meta: @@ -2824,6 +2909,13 @@ class StockItemTracking(InvenTree.models.InvenTreeModel): """Return API url.""" return reverse('api-stock-tracking-list') + def save(self, *args, **kwargs): + """Ensure that the 'part' link is always correct.""" + if self.item: + self.part = self.item.part + + super().save(*args, **kwargs) + def get_absolute_url(self): """Return url for instance.""" return InvenTree.helpers.pui_url(f'/stock/item/{self.item.id}') @@ -2838,7 +2930,19 @@ class StockItemTracking(InvenTree.models.InvenTreeModel): tracking_type = models.IntegerField(default=StockHistoryCode.LEGACY) item = models.ForeignKey( - StockItem, on_delete=models.CASCADE, related_name='tracking_info' + StockItem, + on_delete=models.SET_NULL, + null=True, + blank=False, + related_name='tracking_info', + ) + + part = models.ForeignKey( + 'part.part', + on_delete=models.CASCADE, + related_name='stock_tracking_info', + null=True, + blank=True, ) date = models.DateTimeField(auto_now_add=True, editable=False) diff --git a/src/backend/InvenTree/stock/serializers.py b/src/backend/InvenTree/stock/serializers.py index f8d76e543a..ded3441338 100644 --- a/src/backend/InvenTree/stock/serializers.py +++ b/src/backend/InvenTree/stock/serializers.py @@ -413,6 +413,8 @@ class StockItemSerializer( parent = serializers.PrimaryKeyRelatedField( many=False, read_only=True, + required=False, + allow_null=True, label=_('Parent Item'), help_text=_('Parent stock item'), ) @@ -463,12 +465,16 @@ class StockItemSerializer( status_custom_key = validated_data.pop('status_custom_key', None) status = validated_data.pop('status', None) - instance = super().update(instance, validated_data=validated_data) - if status_code := status_custom_key or status: - if not instance.compare_status(status_code): - instance.set_status(status_code) - instance.save() + # avoid a second .save() call and perform both status updates at once (to support `old_status` in tracking event) + # by setting the values in validated_data as computed by set_status() + instance.set_status(status_code) + validated_data['status'] = instance.status + validated_data['status_custom_key'] = ( + status_code # for compatibility with custom "leader/follower" concept in super().update() + ) + + instance = super().update(instance, validated_data=validated_data) return instance @@ -489,14 +495,13 @@ class StockItemSerializer( ), 'parent', 'part__category', - 'part__pricing_data', 'supplier_part', 'supplier_part__manufacturer_part', 'customer', 'belongs_to', 'sales_order', 'consumed_by', - ).select_related('part') + ).select_related('part', 'part__pricing_data') # Annotate the queryset with the total allocated to sales orders queryset = queryset.annotate( @@ -513,7 +518,7 @@ class StockItemSerializer( queryset = queryset.annotate( expired=Case( When( - StockItem.EXPIRED_FILTER, + StockItem.get_expired_filter(), then=Value(True, output_field=BooleanField()), ), default=Value(False, output_field=BooleanField()), @@ -1054,8 +1059,6 @@ class StockChangeStatusSerializer(serializers.Serializer): transaction_notes = [] - deltas = {'status': status} - now = InvenTree.helpers.current_time() # Instead of performing database updates for each item, @@ -1073,9 +1076,22 @@ class StockChangeStatusSerializer(serializers.Serializer): if status == custom_status or custom_status is None: continue + deltas = {'status': status} + + # before save, track old status logical + deltas['old_status_logical'] = item.status + + if item.get_custom_status(): + deltas['old_status'] = item.get_custom_status() + else: + deltas['old_status'] = item.status + item.set_status(status, custom_values=custom_status_codes) item.save(add_note=False) + # after save, can track new status_logical + deltas['status_logical'] = item.status + # Create a new transaction note for each item transaction_notes.append( StockItemTracking( @@ -1159,8 +1175,10 @@ class LocationSerializer( 'structural', 'external', 'location_type', + # Optional fields 'location_type_detail', 'tags', + 'parameters', ] read_only_fields = ['barcode_hash', 'icon', 'level', 'pathstring'] @@ -1205,6 +1223,8 @@ class LocationSerializer( filter_name='path_detail', ) + parameters = common.filters.enable_parameters_filter() + # explicitly set this field, so it gets included for AutoSchema icon = serializers.CharField(read_only=True) @@ -1230,6 +1250,8 @@ class StockTrackingSerializer( 'pk', 'item', 'item_detail', + 'part', + 'part_detail', 'date', 'deltas', 'label', @@ -1238,13 +1260,21 @@ class StockTrackingSerializer( 'user', 'user_detail', ] - read_only_fields = ['date', 'user', 'label', 'tracking_type'] + read_only_fields = ['date', 'part', 'user', 'label', 'tracking_type'] label = serializers.CharField(read_only=True) item_detail = enable_filter( StockItemSerializer(source='item', many=False, read_only=True, allow_null=True), - prefetch_fields=['item'], + prefetch_fields=['item', 'item__part'], + ) + + part_detail = enable_filter( + part_serializers.PartBriefSerializer( + source='part', many=False, read_only=True, allow_null=True + ), + default_include=False, + prefetch_fields=['part'], ) user_detail = enable_filter( diff --git a/src/backend/InvenTree/stock/status_codes.py b/src/backend/InvenTree/stock/status_codes.py index 978bca0b0e..50cad87a90 100644 --- a/src/backend/InvenTree/stock/status_codes.py +++ b/src/backend/InvenTree/stock/status_codes.py @@ -53,7 +53,7 @@ class StockHistoryCode(StatusCode): STOCK_COUNT = 10, _('Stock counted') STOCK_ADD = 11, _('Stock manually added') STOCK_REMOVE = 12, _('Stock manually removed') - STOCK_SERIZALIZED = 13, _('Serialized stock items') + STOCK_SERIALIZED = 13, _('Serialized stock items') RETURNED_TO_STOCK = 15, _('Returned to stock') # Stock item returned to stock diff --git a/src/backend/InvenTree/stock/tasks.py b/src/backend/InvenTree/stock/tasks.py index e3b4f5e4ab..d8b647152f 100644 --- a/src/backend/InvenTree/stock/tasks.py +++ b/src/backend/InvenTree/stock/tasks.py @@ -1,8 +1,13 @@ """Background tasks for the stock app.""" +from datetime import datetime, timedelta + import structlog from opentelemetry import trace +from common.settings import get_global_setting +from InvenTree.tasks import ScheduledTask, offload_task, scheduled_task + tracer = trace.get_tracer(__name__) logger = structlog.get_logger('inventree') @@ -43,7 +48,6 @@ def rebuild_stock_item_tree(tree_id: int, rebuild_on_fail: bool = True) -> bool: """ from InvenTree.exceptions import log_error from InvenTree.sentry import report_exception - from InvenTree.tasks import offload_task from stock.models import StockItem if tree_id: @@ -65,3 +69,27 @@ def rebuild_stock_item_tree(tree_id: int, rebuild_on_fail: bool = True) -> bool: # No tree_id provided, so rebuild the entire tree StockItem.objects.rebuild() return True + + +@tracer.start_as_current_span('delete_old_stock_tracking') +@scheduled_task(ScheduledTask.DAILY) +def delete_old_stock_tracking(): + """Remove old stock tracking entries before a certain date.""" + from stock.models import StockItemTracking + + if not get_global_setting('STOCK_TRACKING_DELETE_OLD_ENTRIES', False): + return + + delete_n_days = int(get_global_setting('STOCK_TRACKING_DELETE_DAYS', 365)) + + threshold = datetime.now() - timedelta(days=delete_n_days) + + old_entries = StockItemTracking.objects.filter(date__lte=threshold) + + if old_entries.exists(): + logger.info( + 'Deleting old stock tracking entries', + count=old_entries.count(), + threshold=threshold, + ) + old_entries.delete() diff --git a/src/backend/InvenTree/stock/test_api.py b/src/backend/InvenTree/stock/test_api.py index 7b267facb2..1434a0e3f0 100644 --- a/src/backend/InvenTree/stock/test_api.py +++ b/src/backend/InvenTree/stock/test_api.py @@ -68,6 +68,11 @@ class StockLocationTest(StockAPITestCase): # Add some stock locations StockLocation.objects.create(name='top', description='top category') + def test_ordering(self): + """Test ordering options for the StockLocation list endpoint.""" + for ordering in ['name', 'pathstring', 'level', 'tree_id']: + self.run_ordering_test(self.list_url, ordering) + def test_list(self): """Test the StockLocationList API endpoint.""" test_cases = [ @@ -565,6 +570,86 @@ class StockItemListTest(StockAPITestCase): # Return JSON data return response.data + def test_ordering(self): + """Run ordering tests against the StockItem list endpoint.""" + for ordering in ['part', 'location', 'stock', 'status', 'IPN', 'MPN', 'SKU']: + self.run_ordering_test(self.list_url, ordering) + + def test_pagination(self): + """Test that pagination boundaries are observed correctly. + + Ref: https://github.com/inventree/InvenTree/issues/11442 + """ + location = StockLocation.objects.first() + part = Part.objects.first() + + items = [] + + # Delete all existing stock item objects + for item in StockItem.objects.all(): + item.delete() + + for idx in range(1000): + items.append( + StockItem( + part=part, + location=location, + quantity=idx % 10, + level=0, + lft=0, + rght=0, + tree_id=0, + ) + ) + + if len(items) >= 100: + StockItem.objects.bulk_create(items) + items = [] + + self.assertEqual(StockItem.objects.count(), 1000) + + url = reverse('api-stock-list') + + # Keep track of the unique PKs we have seen in the results + unique_pks = set() + + for idx in range(0, 100, 10): + data = self.get(url, {'limit': 10, 'offset': idx}).data + self.assertEqual(data['count'], 1000) + self.assertEqual(len(data['results']), 10) + + for item in data['results']: + self.assertNotIn( + item['pk'], + unique_pks, + f'Duplicate PK {item["pk"]} found in paginated results @ page {idx // 10}', + ) + unique_pks.add(item['pk']) + + self.assertEqual( + len(unique_pks), 100, 'Expected to see 100 unique PKs in paginated results' + ) + + # Run same test again, with reverse ordering on part IPN + unique_pks = set() + + for idx in range(0, 100, 10): + data = self.get(url, {'limit': 10, 'offset': idx, 'ordering': '-IPN'}).data + self.assertEqual(data['count'], 1000) + self.assertEqual(len(data['results']), 10) + + for item in data['results']: + self.assertNotIn( + item['pk'], + unique_pks, + f'Duplicate PK {item["pk"]} found in paginated results @ page {idx // 10} with reverse ordering', + ) + unique_pks.add(item['pk']) + + self.assertEqual( + len(unique_pks), 100, 'Expected to see 100 unique PKs in paginated results' + ) + def test_top_level_filtering(self): """Test filtering against "top level" stock location.""" # No filters, should return *all* items @@ -867,9 +952,13 @@ class StockItemListTest(StockAPITestCase): excluded_headers = ['metadata'] - filters = {} + filters = { + 'part_detail': True, + 'location_detail': True, + 'supplier_part_detail': True, + } - with self.export_data(self.list_url, filters) as data_file: + with self.export_data(self.list_url, params=filters) as data_file: self.process_csv( data_file, required_cols=required_headers, @@ -881,7 +970,7 @@ class StockItemListTest(StockAPITestCase): filters['location'] = 1 filters['cascade'] = True - with self.export_data(self.list_url, filters) as data_file: + with self.export_data(self.list_url, params=filters) as data_file: data = self.process_csv(data_file, required_rows=9) for row in data: @@ -909,6 +998,53 @@ class StockItemListTest(StockAPITestCase): with self.export_data(self.list_url, {'part': 25}) as data_file: self.process_csv(data_file, required_rows=items.count()) + def test_large_export(self): + """Test export of very large dataset. + + - Ensure that the time taken to export a large dataset is reasonable. + - Ensure that the number of DB queries is reasonable. + """ + # Create a large number of stock items + locations = list(StockLocation.objects.all()) + parts = list(Part.objects.filter(virtual=False)) + + idx = 0 + + N_LOCATIONS = len(locations) + N_PARTS = len(parts) + + stock_items = [] + + while idx < 2500: + part = parts[idx % N_PARTS] + location = locations[idx % N_LOCATIONS] + + item = StockItem( + part=part, + location=location, + quantity=10, + level=0, + tree_id=0, + lft=0, + rght=0, + ) + stock_items.append(item) + idx += 1 + + StockItem.objects.bulk_create(stock_items) + + self.assertGreaterEqual(StockItem.objects.count(), 2500) + + # Note: While the export is quick on pgsql, it is still quite slow on sqlite3 + with self.export_data( + self.list_url, + max_query_count=50, + max_query_time=12.0, # Test time increased due to worker variability + ) as data_file: + data = self.process_csv(data_file) + + self.assertGreaterEqual(len(data), 2500) + def test_filter_by_allocated(self): """Test that we can filter by "allocated" status. @@ -1122,7 +1258,7 @@ class CustomStockItemStatusTest(StockAPITestCase): name='OK - advanced', label='OK - adv.', color='secondary', - logical_key=10, + logical_key=StockStatus.OK.value, model=ContentType.objects.get(model='stockitem'), reference_status='StockStatus', ) @@ -1131,14 +1267,55 @@ class CustomStockItemStatusTest(StockAPITestCase): name='attention 2', label='attention 2', color='secondary', - logical_key=50, + logical_key=StockStatus.ATTENTION.value, model=ContentType.objects.get(model='stockitem'), reference_status='StockStatus', ) def test_custom_status(self): """Tests interaction with states.""" + part = Part.objects.filter(virtual=False).first() + + # Try creating a new stock item with an invalid status code + response = self.post( + reverse('api-stock-list'), + {'part': part.pk, 'quantity': 10, 'status_custom_key': 'xyz'}, + ) + + data = response.data[0] + + # An invalid status value has been set to the default value + self.assertEqual(data['status'], StockStatus.OK.value) + + # Create a stock item with a non-default, built-in status value + response = self.post( + reverse('api-stock-list'), + { + 'part': part.pk, + 'quantity': 10, + 'status_custom_key': StockStatus.QUARANTINED.value, + }, + ) + + data = response.data[0] + + self.assertEqual(data['status'], StockStatus.QUARANTINED.value) + self.assertEqual(data['status_custom_key'], StockStatus.QUARANTINED.value) + self.assertEqual(data['status_text'], 'Quarantined') + + # Create a stock item with a custom status value + response = self.post( + reverse('api-stock-list'), + {'part': part.pk, 'quantity': 10, 'status_custom_key': self.status2.key}, + ) + + data = response.data[0] + + self.assertEqual(data['status'], StockStatus.ATTENTION.value) + self.assertEqual(data['status_custom_key'], self.status2.key) + # Create a stock item with the custom status code via the API + # Note: We test with a string value here response = self.post( self.list_url, { @@ -1146,7 +1323,7 @@ class CustomStockItemStatusTest(StockAPITestCase): 'description': 'Test desc 1', 'quantity': 1, 'part': 1, - 'status_custom_key': self.status.key, + 'status_custom_key': str(self.status.key), }, expected_code=201, ) @@ -1225,16 +1402,34 @@ class StockItemTest(StockAPITestCase): StockLocation.objects.create(name='B', description='location b', parent=top) StockLocation.objects.create(name='C', description='location c', parent=top) + # Create a custom status + self.inspect_custom_status = InvenTreeCustomUserStateModel.objects.create( + key=150, + name='INSPECT', + label='Incoming goods inspection', + color='warning', + logical_key=50, + model=ContentType.objects.get(model='stockitem'), + reference_status='StockStatus', + ) + def test_create_default_location(self): """Test the default location functionality, if a 'location' is not specified in the creation request.""" # The part 'R_4K7_0603' (pk=4) has a default location specified + # Create a new StockItem instance response = self.post( self.list_url, data={'part': 4, 'quantity': 10}, expected_code=201 ) self.assertEqual(response.data[0]['location'], 2) + # Check that the item was associated with the correct user + item = StockItem.objects.get(pk=response.data[0]['pk']) + self.assertEqual(item.tracking_info_count, 1) + tracking = item.tracking_info.first() + self.assertEqual(tracking.user, self.user) + # What if we explicitly set the location to a different value? response = self.post( @@ -1730,6 +1925,15 @@ class StockItemTest(StockAPITestCase): item.refresh_from_db() self.assertEqual(item.status, StockStatus.DAMAGED.value) self.assertEqual(item.tracking_info.count(), 2) + tracking = item.tracking_info.last() + self.assertEqual(tracking.deltas['old_status'], StockStatus.OK.value) + self.assertEqual( + tracking.deltas['old_status_logical'], StockStatus.OK.value + ) + self.assertEqual(tracking.deltas['status'], StockStatus.DAMAGED.value) + self.assertEqual( + tracking.deltas['status_logical'], StockStatus.DAMAGED.value + ) # Same test, but with one item unchanged items[0].set_status(StockStatus.ATTENTION.value) @@ -1747,6 +1951,95 @@ class StockItemTest(StockAPITestCase): tracking = item.tracking_info.last() self.assertEqual(tracking.tracking_type, StockHistoryCode.EDITED.value) + def test_set_custom_status(self): + """Test API endpoint for setting StockItem custom status.""" + url = reverse('api-stock-change-status') + + prt = Part.objects.first() + + # Number of items to create + N_ITEMS = 10 + + # Create a bunch of items + items = [ + StockItem.objects.create(part=prt, quantity=10) for _ in range(N_ITEMS) + ] + + for item in items: + item.refresh_from_db() + self.assertEqual(item.status, StockStatus.OK.value) + self.assertEqual(item.tracking_info.count(), 1) + + # Test tracking with custom status + # *from* standard *to* custom + data = { + 'items': [item.pk for item in items], + 'status': self.inspect_custom_status.key, + } + + self.post(url, data, expected_code=201) + + for item in items: + item.refresh_from_db() + self.assertEqual(item.status, self.inspect_custom_status.logical_key) + self.assertEqual(item.get_custom_status(), self.inspect_custom_status.key) + tracking = item.tracking_info.last() + self.assertEqual(tracking.deltas['old_status'], StockStatus.OK.value) + self.assertEqual( + tracking.deltas['old_status_logical'], StockStatus.OK.value + ) + self.assertEqual(tracking.deltas['status'], self.inspect_custom_status.key) + self.assertEqual( + tracking.deltas['status_logical'], + self.inspect_custom_status.logical_key, + ) + + # reverse case + # *from* custom *to* standard + data['status'] = StockStatus.OK.value + self.post(url, data, expected_code=201) + for item in items: + item.refresh_from_db() + self.assertEqual(item.status, StockStatus.OK.value) + self.assertIsNone(item.get_custom_status()) + tracking = item.tracking_info.last() + self.assertEqual( + tracking.deltas['old_status'], self.inspect_custom_status.key + ) + self.assertEqual( + tracking.deltas['old_status_logical'], + self.inspect_custom_status.logical_key, + ) + self.assertEqual(tracking.deltas['status'], StockStatus.OK.value) + self.assertEqual(tracking.deltas['status_logical'], StockStatus.OK.value) + + def test_bulk_batch_change(self): + """Test that we can bulk-change batch code for a set of stock items.""" + url = reverse('api-stock-list') + + # Find the first 10 stock items + items = StockItem.objects.all()[:10] + self.assertEqual(len(items), 10) + + response = self.patch( + url, + data={'items': [item.pk for item in items], 'batch': 'NEW-BATCH-CODE'}, + max_query_count=300, + ) + + data = response.data + + self.assertEqual(data['success'], 'Updated 10 items') + self.assertEqual(len(data['items']), 10) + + for item in data['items']: + self.assertEqual(item['batch'], 'NEW-BATCH-CODE') + + # Check database items also + for item in items: + item.refresh_from_db() + self.assertEqual(item.batch, 'NEW-BATCH-CODE') + class StocktakeTest(StockAPITestCase): """Series of tests for the Stocktake API.""" @@ -2141,17 +2434,7 @@ class StockTestResultTest(StockAPITestCase): self.delete(url, {}, expected_code=400) # Now, let's delete all the newly created items with a single API request - # However, we will provide incorrect filters - response = self.delete( - url, {'items': tests, 'filters': {'stock_item': 10}}, expected_code=400 - ) - - self.assertEqual(StockItemTestResult.objects.count(), n + 50) - - # Try again, but with the correct filters this time - response = self.delete( - url, {'items': tests, 'filters': {'stock_item': 1}}, expected_code=200 - ) + response = self.delete(url, {'items': tests}, expected_code=200) self.assertEqual(StockItemTestResult.objects.count(), n) @@ -2516,40 +2799,39 @@ class StockMetadataAPITest(InvenTreeAPITestCase): roles = ['stock.change', 'stock_location.change'] - def metatester(self, apikey, model): + def metatester(self, raw_url: str, model): """Generic tester.""" modeldata = model.objects.first() # Useless test unless a model object is found self.assertIsNotNone(modeldata) - url = reverse(apikey, kwargs={'pk': modeldata.pk}) + url = raw_url.format(pk=modeldata.pk) # Metadata is initially null self.assertIsNone(modeldata.metadata) - numstr = f'12{len(apikey)}' + numstr = f'12{len(raw_url)}' + target_key = f'abc-{numstr}' + target_value = f'xyz-{raw_url}-{numstr}' - self.patch( - url, - {'metadata': {f'abc-{numstr}': f'xyz-{apikey}-{numstr}'}}, - expected_code=200, - ) + # Create / update metadata entry (first try via old addresses) + data = {'metadata': {target_key: target_value}} + rsp = self.patch(url, data, expected_code=301) + self.patch(rsp.url, data, expected_code=200) - # Refresh + # Refresh and check that metadata has been updated modeldata.refresh_from_db() - self.assertEqual( - modeldata.get_metadata(f'abc-{numstr}'), f'xyz-{apikey}-{numstr}' - ) + self.assertEqual(modeldata.get_metadata(target_key), target_value) def test_metadata(self): """Test all endpoints.""" - for apikey, model in { - 'api-location-metadata': StockLocation, - 'api-stock-test-result-metadata': StockItemTestResult, - 'api-stock-item-metadata': StockItem, + for raw_url, model in { + '/api/stock/location/{pk}/metadata/': StockLocation, + '/api/stock/test/{pk}/metadata/': StockItemTestResult, + '/api/stock/{pk}/metadata/': StockItem, }.items(): - self.metatester(apikey, model) + self.metatester(raw_url, model) class StockApiPerformanceTest(StockAPITestCase, InvenTreeAPIPerformanceTestCase): diff --git a/src/backend/InvenTree/stock/tests.py b/src/backend/InvenTree/stock/tests.py index 514e8f0ec3..9495432366 100644 --- a/src/backend/InvenTree/stock/tests.py +++ b/src/backend/InvenTree/stock/tests.py @@ -838,10 +838,17 @@ class StockBarcodeTest(StockTestBase): # Render simple barcode data for the StockItem barcode = item.barcode - self.assertEqual(barcode, '{"stockitem": 1}') + self.assertEqual(barcode, 'INV-SI1') def test_location_barcode_basics(self): """Simple tests for the StockLocation barcode integration.""" + # Set the barcode plugin to use the legacy barcode format + from plugin.registry import registry + + plugin = registry.get_plugin('inventreebarcode') + + plugin.set_setting('INTERNAL_BARCODE_FORMAT', 'json') + self.assertEqual(StockLocation.barcode_model_type(), 'stocklocation') loc = StockLocation.objects.get(pk=1) @@ -849,6 +856,9 @@ class StockBarcodeTest(StockTestBase): barcode = loc.format_barcode() self.assertEqual('{"stocklocation": 1}', barcode) + # Revert the barcode format to the default + plugin.set_setting('INTERNAL_BARCODE_FORMAT', 'short') + class VariantTest(StockTestBase): """Tests for calculation stock counts against templates / variants.""" @@ -867,6 +877,16 @@ class VariantTest(StockTestBase): self.assertEqual(green.stock_entries(include_variants=False).count(), 0) self.assertEqual(green.stock_entries().count(), 3) + # Test with an "external" location + entry = green.stock_entries().first() + entry.location = StockLocation.objects.create( + name='External Location', description='An external location', external=True + ) + entry.save() + + self.assertEqual(green.stock_entries(include_external=True).count(), 3) + self.assertEqual(green.stock_entries(include_external=False).count(), 2) + def test_serial_numbers(self): """Test serial number functionality for variant / template parts.""" InvenTreeSetting.set_setting('SERIAL_NUMBER_GLOBALLY_UNIQUE', False, self.user) diff --git a/src/backend/InvenTree/users/api.py b/src/backend/InvenTree/users/api.py index 42201ed095..37434fbcff 100644 --- a/src/backend/InvenTree/users/api.py +++ b/src/backend/InvenTree/users/api.py @@ -367,49 +367,44 @@ class GetAuthToken(GenericAPIView): - Existing tokens are *never* exposed again via the API - Once the token is provided, it can be used for auth until it expires """ - if request.user.is_authenticated: - user = request.user - name = request.query_params.get('name', '') + if not request.user.is_authenticated: + raise exceptions.NotAuthenticated() # pragma: no cover - name = ApiToken.sanitize_name(name) + user = request.user + name = request.query_params.get('name', '') - today = datetime.date.today() + name = ApiToken.sanitize_name(name) - # Find existing token, which has not expired - token = ApiToken.objects.filter( - user=user, name=name, revoked=False, expiry__gte=today - ).first() + today = datetime.date.today() - if not token: - # User is authenticated, and requesting a token against the provided name. - token = ApiToken.objects.create(user=request.user, name=name) + # Find existing token, which has not expired + token = ApiToken.objects.filter( + user=user, name=name, revoked=False, expiry__gte=today + ).first() - logger.info( - "Created new API token for user '%s' (name='%s')", - user.username, - name, - ) + if not token: + # User is authenticated, and requesting a token against the provided name. + token = ApiToken.objects.create(user=request.user, name=name) + + logger.info( + "Created new API token for user '%s' (name='%s')", user.username, name + ) # Add some metadata about the request - token.set_metadata('user_agent', request.headers.get('user-agent', '')) - token.set_metadata('remote_addr', request.META.get('REMOTE_ADDR', '')) - token.set_metadata('remote_host', request.META.get('REMOTE_HOST', '')) - token.set_metadata('remote_user', request.META.get('REMOTE_USER', '')) - token.set_metadata('server_name', request.META.get('SERVER_NAME', '')) - token.set_metadata('server_port', request.META.get('SERVER_PORT', '')) + token.set_metadata('user_agent', request.headers.get('user-agent', '')) + token.set_metadata('remote_addr', request.META.get('REMOTE_ADDR', '')) + token.set_metadata('remote_host', request.META.get('REMOTE_HOST', '')) + token.set_metadata('remote_user', request.META.get('REMOTE_USER', '')) + token.set_metadata('server_name', request.META.get('SERVER_NAME', '')) + token.set_metadata('server_port', request.META.get('SERVER_PORT', '')) - data = {'token': token.key, 'name': token.name, 'expiry': token.expiry} + data = {'token': token.key, 'name': token.name, 'expiry': token.expiry} - # Ensure that the users session is logged in - if not get_user(request).is_authenticated: - login( - request, user, backend='django.contrib.auth.backends.ModelBackend' - ) + # Ensure that the users session is logged in + if not get_user(request).is_authenticated: + login(request, user, backend='django.contrib.auth.backends.ModelBackend') - return Response(data) - - else: - raise exceptions.NotAuthenticated() # pragma: no cover + return Response(data) class TokenMixin: diff --git a/src/backend/InvenTree/users/models.py b/src/backend/InvenTree/users/models.py index 3ead74515d..a9df02432f 100644 --- a/src/backend/InvenTree/users/models.py +++ b/src/backend/InvenTree/users/models.py @@ -600,6 +600,10 @@ class UserProfile(InvenTree.models.MetadataMixin): @receiver(post_save, sender=User) def create_or_update_user_profile(sender, instance, created, **kwargs): """Create or update user profile when user is saved.""" + # Disable profile creation if importing data from file + if isImportingData(): + return + if created: UserProfile.objects.create(user=instance) instance.profile.save() @@ -629,6 +633,10 @@ def validate_primary_group_on_delete(sender, instance, **kwargs): @receiver(m2m_changed, sender=User.groups.through) def validate_primary_group_on_group_change(sender, instance, action, **kwargs): """Validate primary_group on user profiles when a group is added or removed.""" + # Disable user profile validation if importing data from file + if isImportingData(): + return + if action in ['post_add', 'post_remove']: profile = instance.profile if profile.primary_group and profile.primary_group not in instance.groups.all(): diff --git a/src/backend/InvenTree/users/permissions.py b/src/backend/InvenTree/users/permissions.py index 67b735ae4b..7c93f5ec97 100644 --- a/src/backend/InvenTree/users/permissions.py +++ b/src/backend/InvenTree/users/permissions.py @@ -130,7 +130,11 @@ def check_user_role( def check_user_permission( - user: User, model: models.Model, permission: str, allow_inactive: bool = False + user: User, + model: models.Model, + permission: str, + allow_inactive: bool = False, + groups: Optional[QuerySet] = None, ) -> bool: """Check if the user has a particular permission against a given model type. @@ -139,6 +143,7 @@ def check_user_permission( model: The model class to check (e.g. 'part') permission: The permission to check (e.g. 'view' / 'delete') allow_inactive: If False, disallow inactive users from having permissions + groups: Optional cached queryset of groups to check (defaults to user's groups) Returns: bool: True if the user has the specified permission @@ -160,9 +165,11 @@ def check_user_permission( if table_name in get_ruleset_ignore(): return True + groups = groups or prefetch_rule_sets(user) + for role, table_names in get_ruleset_models().items(): if table_name in table_names: - if check_user_role(user, role, permission): + if check_user_role(user, role, permission, groups=groups): return True # Check for children models which inherits from parent role @@ -172,7 +179,7 @@ def check_user_permission( if parent_child_string == table_name: # Check if parent role has change permission - if check_user_role(user, parent, 'change'): + if check_user_role(user, parent, 'change', groups=groups): return True # Generate the permission name based on the model and permission diff --git a/src/backend/InvenTree/users/ruleset.py b/src/backend/InvenTree/users/ruleset.py index 7beb4f1eec..ed70b79b4d 100644 --- a/src/backend/InvenTree/users/ruleset.py +++ b/src/backend/InvenTree/users/ruleset.py @@ -74,6 +74,7 @@ def get_ruleset_models() -> dict: 'oauth2_provider_idtoken', 'oauth2_provider_accesstoken', 'oauth2_provider_refreshtoken', + 'oauth2_provider_devicegrant', # Plugins 'plugin_pluginconfig', 'plugin_pluginsetting', diff --git a/src/backend/requirements-3.14.txt b/src/backend/requirements-3.14.txt new file mode 100644 index 0000000000..d270523e5e --- /dev/null +++ b/src/backend/requirements-3.14.txt @@ -0,0 +1,2353 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile src/backend/requirements.in -o src/backend/requirements-3.14.txt --python-version=3.14 -c src/backend/requirements.txt +asgiref==3.11.1 \ + --hash=sha256:5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce \ + --hash=sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133 + # via + # -c src/backend/requirements.txt + # django + # django-allauth + # django-cors-headers + # django-structlog +attrs==25.4.0 \ + --hash=sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11 \ + --hash=sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373 + # via + # -c src/backend/requirements.txt + # jsonschema + # referencing +babel==2.18.0 \ + --hash=sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d \ + --hash=sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35 + # via + # -c src/backend/requirements.txt + # py-moneyed +bcrypt==5.0.0 \ + --hash=sha256:046ad6db88edb3c5ece4369af997938fb1c19d6a699b9c1b27b0db432faae4c4 \ + --hash=sha256:0c418ca99fd47e9c59a301744d63328f17798b5947b0f791e9af3c1c499c2d0a \ + --hash=sha256:0c8e093ea2532601a6f686edbc2c6b2ec24131ff5c52f7610dd64fa4553b5464 \ + --hash=sha256:0cae4cb350934dfd74c020525eeae0a5f79257e8a201c0c176f4b84fdbf2a4b4 \ + --hash=sha256:137c5156524328a24b9fac1cb5db0ba618bc97d11970b39184c1d87dc4bf1746 \ + --hash=sha256:200af71bc25f22006f4069060c88ed36f8aa4ff7f53e67ff04d2ab3f1e79a5b2 \ + --hash=sha256:212139484ab3207b1f0c00633d3be92fef3c5f0af17cad155679d03ff2ee1e41 \ + --hash=sha256:2b732e7d388fa22d48920baa267ba5d97cca38070b69c0e2d37087b381c681fd \ + --hash=sha256:35a77ec55b541e5e583eb3436ffbbf53b0ffa1fa16ca6782279daf95d146dcd9 \ + --hash=sha256:38cac74101777a6a7d3b3e3cfefa57089b5ada650dce2baf0cbdd9d65db22a9e \ + --hash=sha256:3abeb543874b2c0524ff40c57a4e14e5d3a66ff33fb423529c88f180fd756538 \ + --hash=sha256:3ca8a166b1140436e058298a34d88032ab62f15aae1c598580333dc21d27ef10 \ + --hash=sha256:3cf67a804fc66fc217e6914a5635000259fbbbb12e78a99488e4d5ba445a71eb \ + --hash=sha256:4870a52610537037adb382444fefd3706d96d663ac44cbb2f37e3919dca3d7ef \ + --hash=sha256:48f753100931605686f74e27a7b49238122aa761a9aefe9373265b8b7aa43ea4 \ + --hash=sha256:4bfd2a34de661f34d0bda43c3e4e79df586e4716ef401fe31ea39d69d581ef23 \ + --hash=sha256:560ddb6ec730386e7b3b26b8b4c88197aaed924430e7b74666a586ac997249ef \ + --hash=sha256:5b1589f4839a0899c146e8892efe320c0fa096568abd9b95593efac50a87cb75 \ + --hash=sha256:5feebf85a9cefda32966d8171f5db7e3ba964b77fdfe31919622256f80f9cf42 \ + --hash=sha256:611f0a17aa4a25a69362dcc299fda5c8a3d4f160e2abb3831041feb77393a14a \ + --hash=sha256:61afc381250c3182d9078551e3ac3a41da14154fbff647ddf52a769f588c4172 \ + --hash=sha256:64d7ce196203e468c457c37ec22390f1a61c85c6f0b8160fd752940ccfb3a683 \ + --hash=sha256:64ee8434b0da054d830fa8e89e1c8bf30061d539044a39524ff7dec90481e5c2 \ + --hash=sha256:6b8f520b61e8781efee73cba14e3e8c9556ccfb375623f4f97429544734545b4 \ + --hash=sha256:741449132f64b3524e95cd30e5cd3343006ce146088f074f31ab26b94e6c75ba \ + --hash=sha256:744d3c6b164caa658adcb72cb8cc9ad9b4b75c7db507ab4bc2480474a51989da \ + --hash=sha256:79cfa161eda8d2ddf29acad370356b47f02387153b11d46042e93a0a95127493 \ + --hash=sha256:7aeef54b60ceddb6f30ee3db090351ecf0d40ec6e2abf41430997407a46d2254 \ + --hash=sha256:7edda91d5ab52b15636d9c30da87d2cc84f426c72b9dba7a9b4fe142ba11f534 \ + --hash=sha256:7f277a4b3390ab4bebe597800a90da0edae882c6196d3038a73adf446c4f969f \ + --hash=sha256:7f4c94dec1b5ab5d522750cb059bb9409ea8872d4494fd152b53cca99f1ddd8c \ + --hash=sha256:801cad5ccb6b87d1b430f183269b94c24f248dddbbc5c1f78b6ed231743e001c \ + --hash=sha256:83e787d7a84dbbfba6f250dd7a5efd689e935f03dd83b0f919d39349e1f23f83 \ + --hash=sha256:89042e61b5e808b67daf24a434d89bab164d4de1746b37a8d173b6b14f3db9ff \ + --hash=sha256:92864f54fb48b4c718fc92a32825d0e42265a627f956bc0361fe869f1adc3e7d \ + --hash=sha256:9d52ed507c2488eddd6a95bccee4e808d3234fa78dd370e24bac65a21212b861 \ + --hash=sha256:9fffdb387abe6aa775af36ef16f55e318dcda4194ddbf82007a6f21da29de8f5 \ + --hash=sha256:a28bc05039bdf3289d757f49d616ab3efe8cf40d8e8001ccdd621cd4f98f4fc9 \ + --hash=sha256:a5393eae5722bcef046a990b84dff02b954904c36a194f6cfc817d7dca6c6f0b \ + --hash=sha256:a71f70ee269671460b37a449f5ff26982a6f2ba493b3eabdd687b4bf35f875ac \ + --hash=sha256:b17366316c654e1ad0306a6858e189fc835eca39f7eb2cafd6aaca8ce0c40a2e \ + --hash=sha256:baade0a5657654c2984468efb7d6c110db87ea63ef5a4b54732e7e337253e44f \ + --hash=sha256:c2388ca94ffee269b6038d48747f4ce8df0ffbea43f31abfa18ac72f0218effb \ + --hash=sha256:c58b56cdfb03202b3bcc9fd8daee8e8e9b6d7e3163aa97c631dfcfcc24d36c86 \ + --hash=sha256:cde08734f12c6a4e28dc6755cd11d3bdfea608d93d958fffbe95a7026ebe4980 \ + --hash=sha256:d79e5c65dcc9af213594d6f7f1fa2c98ad3fc10431e7aa53c176b441943efbdd \ + --hash=sha256:d8d65b564ec849643d9f7ea05c6d9f0cd7ca23bdd4ac0c2dbef1104ab504543d \ + --hash=sha256:db99dca3b1fdc3db87d7c57eac0c82281242d1eabf19dcb8a6b10eb29a2e72d1 \ + --hash=sha256:dcd58e2b3a908b5ecc9b9df2f0085592506ac2d5110786018ee5e160f28e0911 \ + --hash=sha256:dd19cf5184a90c873009244586396a6a884d591a5323f0e8a5922560718d4993 \ + --hash=sha256:ddb4e1500f6efdd402218ffe34d040a1196c072e07929b9820f363a1fd1f4191 \ + --hash=sha256:e3cf5b2560c7b5a142286f69bde914494b6d8f901aaa71e453078388a50881c4 \ + --hash=sha256:ed2e1365e31fc73f1825fa830f1c8f8917ca1b3ca6185773b349c20fd606cec2 \ + --hash=sha256:edfcdcedd0d0f05850c52ba3127b1fce70b9f89e0fe5ff16517df7e81fa3cbb8 \ + --hash=sha256:f0ce778135f60799d89c9693b9b398819d15f1921ba15fe719acb3178215a7db \ + --hash=sha256:f2347d3534e76bf50bca5500989d6c1d05ed64b440408057a37673282c654927 \ + --hash=sha256:f3c08197f3039bec79cee59a606d62b96b16669cff3949f21e74796b6e3cd2be \ + --hash=sha256:f632fd56fc4e61564f78b46a2269153122db34988e78b6be8b32d28507b7eaeb \ + --hash=sha256:f6984a24db30548fd39a44360532898c33528b74aedf81c26cf29c51ee47057e \ + --hash=sha256:f70aadb7a809305226daedf75d90379c397b094755a710d7014b8b117df1ebbf \ + --hash=sha256:f748f7c2d6fd375cc93d3fba7ef4a9e3a092421b8dbf34d8d4dc06be9492dfdd \ + --hash=sha256:f8429e1c410b4073944f03bd778a9e066e7fad723564a52ff91841d278dfc822 \ + --hash=sha256:fc746432b951e92b58317af8e0ca746efe93e66555f1b40888865ef5bf56446b + # via + # -c src/backend/requirements.txt + # paramiko +bleach[css]==6.3.0 \ + --hash=sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22 \ + --hash=sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6 + # via + # -c src/backend/requirements.txt + # django-markdownify +blessed==1.32.0 \ + --hash=sha256:c6fdc18838491ebc7f0460234917eff4e172074934f5f80e82672417bd74be70 \ + --hash=sha256:d4090e9908cf86bea15a5275845c8bfc69c4c34eb6d22de07c65d26f1e54a918 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +boto3==1.42.62 \ + --hash=sha256:6b26ff56c458685caec3d42adde0549f6a55410e557e1f51bebde5c8abcf3037 \ + --hash=sha256:eef0ee08f30e5ed16d8296719808801a827fa0f3126a3e2a9ef9be9eb5e6a313 + # via + # -c src/backend/requirements.txt + # django-anymail + # django-storages +botocore==1.42.62 \ + --hash=sha256:86d327fded96775268ffe8d8bd6ed96c4a1db86cf24eb64ff85233db12dbc287 \ + --hash=sha256:c210dc93b0b81bf72cfe745a7b1c8df765d04bd90b4ac6c8707fbb6714141dae + # via + # -c src/backend/requirements.txt + # boto3 + # s3transfer +brotli==1.2.0 \ + --hash=sha256:022426c9e99fd65d9475dce5c195526f04bb8be8907607e27e747893f6ee3e24 \ + --hash=sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f \ + --hash=sha256:09ac247501d1909e9ee47d309be760c89c990defbb2e0240845c892ea5ff0de4 \ + --hash=sha256:0bbd5b5ccd157ae7913750476d48099aaf507a79841c0d04a9db4415b14842de \ + --hash=sha256:0cf8c3b8ba93d496b2fae778039e2f5ecc7cff99df84df337ca31d8f2252896c \ + --hash=sha256:14ef29fc5f310d34fc7696426071067462c9292ed98b5ff5a27ac70a200e5470 \ + --hash=sha256:15b33fe93cedc4caaff8a0bd1eb7e3dab1c61bb22a0bf5bdfdfd97cd7da79744 \ + --hash=sha256:1b1d6a4efedd53671c793be6dd760fcf2107da3a52331ad9ea429edf0902f27a \ + --hash=sha256:1b557b29782a643420e08d75aea889462a4a8796e9a6cf5621ab05a3f7da8ef2 \ + --hash=sha256:1b71754d5b6eda54d16fbbed7fce2d8bc6c052a1b91a35c320247946ee103502 \ + --hash=sha256:1ce223652fd4ed3eb2b7f78fbea31c52314baecfac68db44037bb4167062a937 \ + --hash=sha256:1e68cdf321ad05797ee41d1d09169e09d40fdf51a725bb148bff892ce04583d7 \ + --hash=sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca \ + --hash=sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6 \ + --hash=sha256:2881416badd2a88a7a14d981c103a52a23a276a553a8aacc1346c2ff47c8dc17 \ + --hash=sha256:29b7e6716ee4ea0c59e3b241f682204105f7da084d6254ec61886508efeb43bc \ + --hash=sha256:2a7f1d03727130fc875448b65b127a9ec5d06d19d0148e7554384229706f9d1b \ + --hash=sha256:2d39b54b968f4b49b5e845758e202b1035f948b0561ff5e6385e855c96625971 \ + --hash=sha256:2e1ad3fda65ae0d93fec742a128d72e145c9c7a99ee2fcd667785d99eb25a7fe \ + --hash=sha256:3173e1e57cebb6d1de186e46b5680afbd82fd4301d7b2465beebe83ed317066d \ + --hash=sha256:3219bd9e69868e57183316ee19c84e03e8f8b5a1d1f2667e1aa8c2f91cb061ac \ + --hash=sha256:350c8348f0e76fff0a0fd6c26755d2653863279d086d3aa2c290a6a7251135dd \ + --hash=sha256:35d382625778834a7f3061b15423919aa03e4f5da34ac8e02c074e4b75ab4f84 \ + --hash=sha256:3b90b767916ac44e93a8e28ce6adf8d551e43affb512f2377c732d486ac6514e \ + --hash=sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18 \ + --hash=sha256:3ebe801e0f4e56d17cd386ca6600573e3706ce1845376307f5d2cbd32149b69a \ + --hash=sha256:3f3c908bcc404c90c77d5a073e55271a0a498f4e0756e48127c35d91cf155947 \ + --hash=sha256:40d918bce2b427a0c4ba189df7a006ac0c7277c180aee4617d99e9ccaaf59e6a \ + --hash=sha256:465a0d012b3d3e4f1d6146ea019b5c11e3e87f03d1676da1cc3833462e672fb0 \ + --hash=sha256:4735a10f738cb5516905a121f32b24ce196ab82cfc1e4ba2e3ad1b371085fd46 \ + --hash=sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48 \ + --hash=sha256:50b1b799f45da91292ffaa21a473ab3a3054fa78560e8ff67082a185274431c8 \ + --hash=sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5 \ + --hash=sha256:5732eff8973dd995549a18ecbd8acd692ac611c5c0bb3f59fa3541ae27b33be3 \ + --hash=sha256:598e88c736f63a0efec8363f9eb34e5b5536b7b6b1821e401afcb501d881f59a \ + --hash=sha256:640fe199048f24c474ec6f3eae67c48d286de12911110437a36a87d7c89573a6 \ + --hash=sha256:66c02c187ad250513c2f4fce973ef402d22f80e0adce734ee4e4efd657b6cb64 \ + --hash=sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c \ + --hash=sha256:6be67c19e0b0c56365c6a76e393b932fb0e78b3b56b711d180dd7013cb1fd984 \ + --hash=sha256:6c12dad5cd04530323e723787ff762bac749a7b256a5bece32b2243dd5c27b21 \ + --hash=sha256:71a66c1c9be66595d628467401d5976158c97888c2c9379c034e1e2312c5b4f5 \ + --hash=sha256:7274942e69b17f9cef76691bcf38f2b2d4c8a5f5dba6ec10958363dcb3308a0a \ + --hash=sha256:7547369c4392b47d30a3467fe8c3330b4f2e0f7730e45e3103d7d636678a808b \ + --hash=sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7 \ + --hash=sha256:7a61c06b334bd99bc5ae84f1eeb36bfe01400264b3c352f968c6e30a10f9d08b \ + --hash=sha256:7ad8cec81f34edf44a1c6a7edf28e7b7806dfb8886e371d95dcf789ccd4e4982 \ + --hash=sha256:7e9053f5fb4e0dfab89243079b3e217f2aea4085e4d58c5c06115fc34823707f \ + --hash=sha256:7fa18d65a213abcfbb2f6cafbb4c58863a8bd6f2103d65203c520ac117d1944b \ + --hash=sha256:81da1b229b1889f25adadc929aeb9dbc4e922bd18561b65b08dd9343cfccca84 \ + --hash=sha256:82676c2781ecf0ab23833796062786db04648b7aae8be139f6b8065e5e7b1518 \ + --hash=sha256:832c115a020e463c2f67664560449a7bea26b0c1fdd690352addad6d0a08714d \ + --hash=sha256:844a8ceb8483fefafc412f85c14f2aae2fb69567bf2a0de53cdb88b73e7c43ae \ + --hash=sha256:865cedc7c7c303df5fad14a57bc5db1d4f4f9b2b4d0a7523ddd206f00c121a16 \ + --hash=sha256:88ef7d55b7bcf3331572634c3fd0ed327d237ceb9be6066810d39020a3ebac7a \ + --hash=sha256:898be2be399c221d2671d29eed26b6b2713a02c2119168ed914e7d00ceadb56f \ + --hash=sha256:8d4f47f284bdd28629481c97b5f29ad67544fa258d9091a6ed1fda47c7347cd1 \ + --hash=sha256:92edab1e2fd6cd5ca605f57d4545b6599ced5dea0fd90b2bcdf8b247a12bd190 \ + --hash=sha256:9322b9f8656782414b37e6af884146869d46ab85158201d82bab9abbcb971dc7 \ + --hash=sha256:95db242754c21a88a79e01504912e537808504465974ebb92931cfca2510469e \ + --hash=sha256:963a08f3bebd8b75ac57661045402da15991468a621f014be54e50f53a58d19e \ + --hash=sha256:96fbe82a58cdb2f872fa5d87dedc8477a12993626c446de794ea025bbda625ea \ + --hash=sha256:99cfa69813d79492f0e5d52a20fd18395bc82e671d5d40bd5a91d13e75e468e8 \ + --hash=sha256:9c79f57faa25d97900bfb119480806d783fba83cd09ee0b33c17623935b05fa3 \ + --hash=sha256:9e5825ba2c9998375530504578fd4d5d1059d09621a02065d1b6bfc41a8e05ab \ + --hash=sha256:9fe11467c42c133f38d42289d0861b6b4f9da31e8087ca2c0d7ebb4543625526 \ + --hash=sha256:a1778532b978d2536e79c05dac2d8cd857f6c55cd0c95ace5b03740824e0e2f1 \ + --hash=sha256:a387225a67f619bf16bd504c37655930f910eb03675730fc2ad69d3d8b5e7e92 \ + --hash=sha256:a56ef534b66a749759ebd091c19c03ef81eb8cd96f0d1d16b59127eaf1b97a12 \ + --hash=sha256:aa47441fa3026543513139cb8926a92a8e305ee9c71a6209ef7a97d91640ea03 \ + --hash=sha256:ac27a70bda257ae3f380ec8310b0a06680236bea547756c277b5dfe55a2452a8 \ + --hash=sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d \ + --hash=sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28 \ + --hash=sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036 \ + --hash=sha256:b232029d100d393ae3c603c8ffd7e3fe6f798c5e28ddca5feabb8e8fdb732997 \ + --hash=sha256:b35c13ce241abdd44cb8ca70683f20c0c079728a36a996297adb5334adfc1c44 \ + --hash=sha256:b63daa43d82f0cdabf98dee215b375b4058cce72871fd07934f179885aad16e8 \ + --hash=sha256:b908d1a7b28bc72dfb743be0d4d3f8931f8309f810af66c906ae6cd4127c93cb \ + --hash=sha256:ba76177fd318ab7b3b9bf6522be5e84c2ae798754b6cc028665490f6e66b5533 \ + --hash=sha256:bba6e7e6cfe1e6cb6eb0b7c2736a6059461de1fa2c0ad26cf845de6c078d16c8 \ + --hash=sha256:c0d6770111d1879881432f81c369de5cde6e9467be7c682a983747ec800544e2 \ + --hash=sha256:c16ab1ef7bb55651f5836e8e62db1f711d55b82ea08c3b8083ff037157171a69 \ + --hash=sha256:c1702888c9f3383cc2f09eb3e88b8babf5965a54afb79649458ec7c3c7a63e96 \ + --hash=sha256:c25332657dee6052ca470626f18349fc1fe8855a56218e19bd7a8c6ad4952c49 \ + --hash=sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f \ + --hash=sha256:cf9cba6f5b78a2071ec6fb1e7bd39acf35071d90a81231d67e92d637776a6a63 \ + --hash=sha256:d206a36b4140fbb5373bf1eb73fb9de589bb06afd0d22376de23c5e91d0ab35f \ + --hash=sha256:d2d085ded05278d1c7f65560aae97b3160aeb2ea2c0b3e26204856beccb60888 \ + --hash=sha256:d8c05b1dfb61af28ef37624385b0029df902ca896a639881f594060b30ffc9a7 \ + --hash=sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a \ + --hash=sha256:e7c0af964e0b4e3412a0ebf341ea26ec767fa0b4cf81abb5e897c9338b5ad6a3 \ + --hash=sha256:e80a28f2b150774844c8b454dd288be90d76ba6109670fe33d7ff54d96eb5cb8 \ + --hash=sha256:e813da3d2d865e9793ef681d3a6b66fa4b7c19244a45b817d0cceda67e615990 \ + --hash=sha256:e85190da223337a6b7431d92c799fca3e2982abd44e7b8dec69938dcc81c8e9e \ + --hash=sha256:e99befa0b48f3cd293dafeacdd0d191804d105d279e0b387a32054c1180f3161 \ + --hash=sha256:eda5a6d042c698e28bda2507a89b16555b9aa954ef1d750e1c20473481aff675 \ + --hash=sha256:ef87b8ab2704da227e83a246356a2b179ef826f550f794b2c52cddb4efbd0196 \ + --hash=sha256:f16dace5e4d3596eaeb8af334b4d2c820d34b8278da633ce4a00020b2eac981c \ + --hash=sha256:f8d635cafbbb0c61327f942df2e3f474dde1cff16c3cd0580564774eaba1ee13 \ + --hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \ + --hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d + # via + # -c src/backend/requirements.txt + # fonttools +certifi==2026.2.25 \ + --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ + --hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7 + # via + # -c src/backend/requirements.txt + # requests + # sentry-sdk +cffi==2.0.0 \ + --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ + --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ + --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ + --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ + --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ + --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ + --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ + --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ + --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ + --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ + --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ + --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ + --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ + --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ + --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ + --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ + --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ + --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ + --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ + --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ + --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ + --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ + --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ + --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ + --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ + --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ + --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ + --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ + --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ + --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ + --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ + --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ + --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ + --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ + --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ + --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ + --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ + --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ + --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ + --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ + --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ + --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ + --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ + --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ + --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ + --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ + --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ + --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ + --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ + --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ + --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ + --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ + --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ + --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ + --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ + --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ + --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ + --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ + --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ + --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ + --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ + --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ + --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ + --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ + --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ + --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ + --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ + --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ + --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ + --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ + --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ + --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ + --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ + --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ + --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ + --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ + --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf + # via + # -c src/backend/requirements.txt + # cryptography + # pynacl + # weasyprint +charset-normalizer==3.4.5 \ + --hash=sha256:014837af6fabf57121b6254fa8ade10dceabc3528b27b721a64bbc7b8b1d4eb4 \ + --hash=sha256:01a1ed54b953303ca7e310fafe0fe347aab348bd81834a0bcd602eb538f89d66 \ + --hash=sha256:0294916d6ccf2d069727d65973c3a1ca477d68708db25fd758dd28b0827cff54 \ + --hash=sha256:02a9d1b01c1e12c27883b0c9349e0bcd9ae92e727ff1a277207e1a262b1cbf05 \ + --hash=sha256:036c079aa08a6a592b82487f97c60b439428320ed1b2ea0b3912e99d30c77765 \ + --hash=sha256:039215608ac7b358c4da0191d10fc76868567fbf276d54c14721bdedeb6de064 \ + --hash=sha256:0625665e4ebdddb553ab185de5db7054393af8879fb0c87bd5690d14379d6819 \ + --hash=sha256:0a45e504f5e1be0bd385935a8e1507c442349ca36f511a47057a71c9d1d6ea9e \ + --hash=sha256:0b362bcd27819f9c07cbf23db4e0e8cd4b44c5ecd900c2ff907b2b92274a7412 \ + --hash=sha256:0c300cefd9b0970381a46394902cd18eaf2aa00163f999590ace991989dcd0fc \ + --hash=sha256:1088345bcc93c58d8d8f3d783eca4a6e7a7752bbff26c3eee7e73c597c191c2e \ + --hash=sha256:10b473fc8dca1c3ad8559985794815f06ca3fc71942c969129070f2c3cdf7281 \ + --hash=sha256:131716d6786ad5e3dc542f5cc6f397ba3339dc0fb87f87ac30e550e8987756af \ + --hash=sha256:14498a429321de554b140013142abe7608f9d8ccc04d7baf2ad60498374aefa2 \ + --hash=sha256:149ec69866c3d6c2fb6f758dbc014ecb09f30b35a5ca90b6a8a2d4e54e18fdfe \ + --hash=sha256:165c7b21d19365464e8f70e5ce5e12524c58b48c78c1f5a57524603c1ab003f8 \ + --hash=sha256:1827734a5b308b65ac54e86a618de66f935a4f63a8a462ff1e19a6788d6c2262 \ + --hash=sha256:19092dde50335accf365cce21998a1c6dd8eafd42c7b226eb54b2747cdce2fac \ + --hash=sha256:1a374cc0b88aa710e8865dc1bd6edb3743c59f27830f0293ab101e4cf3ce9f85 \ + --hash=sha256:1d1401945cb77787dbd3af2446ff2d75912327c4c3a1526ab7955ecf8600687c \ + --hash=sha256:1f2da5cbb9becfcd607757a169e38fb82aa5fd86fae6653dea716e7b613fe2cf \ + --hash=sha256:259cd1ca995ad525f638e131dbcc2353a586564c038fc548a3fe450a91882139 \ + --hash=sha256:2820a98460c83663dd8ec015d9ddfd1e4879f12e06bb7d0500f044fb477d2770 \ + --hash=sha256:28269983f25a4da0425743d0d257a2d6921ea7d9b83599d4039486ec5b9f911d \ + --hash=sha256:2b970382e4a36bed897c19f310f31d7d13489c11b4f468ddfba42d41cddfb918 \ + --hash=sha256:2da4eedcb6338e2321e831a0165759c0c620e37f8cd044a263ff67493be8ffb3 \ + --hash=sha256:30987f4a8ed169983f93e1be8ffeea5214a779e27ed0b059835c7afe96550ad7 \ + --hash=sha256:30a2b1a48478c3428d047ed9690d57c23038dac838a87ad624c85c0a78ebeb39 \ + --hash=sha256:340810d34ef83af92148e96e3e44cb2d3f910d2bf95e5618a5c467d9f102231d \ + --hash=sha256:3f64c6bf8f32f9133b668c7f7a7cbdbc453412bc95ecdbd157f3b1e377a92990 \ + --hash=sha256:4167a621a9a1a986c73777dbc15d4b5eac8ac5c10393374109a343d4013ec765 \ + --hash=sha256:4354e401eb6dab9aed3c7b4030514328a6c748d05e1c3e19175008ca7de84fb1 \ + --hash=sha256:4481e6da1830c8a1cc0b746b47f603b653dadb690bcd851d039ffaefe70533aa \ + --hash=sha256:4b8551b6e6531e156db71193771c93bda78ffc4d1e6372517fe58ad3b91e4659 \ + --hash=sha256:4cd966c2559f501c6fd69294d082c2934c8dd4719deb32c22961a5ac6db0df1d \ + --hash=sha256:50bcbca6603c06a1dcc7b056ed45c37715fb5d2768feb3bcd37d2313c587a5b9 \ + --hash=sha256:530beedcec9b6e027e7a4b6ce26eed36678aa39e17da85e6e03d7bd9e8e9d7c9 \ + --hash=sha256:568e3c34b58422075a1b49575a6abc616d9751b4d61b23f712e12ebb78fe47b2 \ + --hash=sha256:573ef5814c4b7c0d59a7710aa920eaaaef383bd71626aa420fba27b5cab92e8d \ + --hash=sha256:58ad8270cfa5d4bef1bc85bd387217e14ff154d6630e976c6f56f9a040757475 \ + --hash=sha256:597d10dec876923e5c59e48dbd366e852eacb2b806029491d307daea6b917d7c \ + --hash=sha256:5bcb3227c3d9aaf73eaaab1db7ccd80a8995c509ee9941e2aae060ca6e4e5d81 \ + --hash=sha256:5cffde4032a197bd3b42fd0b9509ec60fb70918d6970e4cc773f20fc9180ca67 \ + --hash=sha256:5fea359734b140d0d6741189fea5478c6091b54ffc69d7ce119e0a05637d8c99 \ + --hash=sha256:60d68e820af339df4ae8358c7a2e7596badeb61e544438e489035f9fbf3246a5 \ + --hash=sha256:610f72c0ee565dfb8ae1241b666119582fdbfe7c0975c175be719f940e110694 \ + --hash=sha256:65a126fb4b070d05340a84fc709dd9e7c75d9b063b610ece8a60197a291d0adf \ + --hash=sha256:65b3c403a5b6b8034b655e7385de4f72b7b244869a22b32d4030b99a60593eca \ + --hash=sha256:66dee73039277eb35380d1b82cccc69cc82b13a66f9f4a18da32d573acf02b7c \ + --hash=sha256:708c7acde173eedd4bfa4028484426ba689d2103b28588c513b9db2cd5ecde9c \ + --hash=sha256:728c6a963dfab66ef865f49286e45239384249672cd598576765acc2a640a636 \ + --hash=sha256:754f96058e61a5e22e91483f823e07df16416ce76afa4ebf306f8e1d1296d43f \ + --hash=sha256:75dfd1afe0b1647449e852f4fb428195a7ed0588947218f7ba929f6538487f02 \ + --hash=sha256:75ee9c1cce2911581a70a3c0919d8bccf5b1cbc9b0e5171400ec736b4b569497 \ + --hash=sha256:76a9d0de4d0eab387822e7b35d8f89367dd237c72e82ab42b9f7bf5e15ada00f \ + --hash=sha256:77be992288f720306ab4108fe5c74797de327f3248368dfc7e1a916d6ed9e5a2 \ + --hash=sha256:7ad83b8f9379176c841f8865884f3514d905bcd2a9a3b210eaa446e7d2223e4d \ + --hash=sha256:8197abe5ca1ffb7d91e78360f915eef5addff270f8a71c1fc5be24a56f3e4873 \ + --hash=sha256:82cc7c2ad42faec8b574351f8bc2a0c049043893853317bd9bb309f5aba6cb5a \ + --hash=sha256:8a28afb04baa55abf26df544e3e5c6534245d3daa5178bc4a8eeb48202060d0e \ + --hash=sha256:8b78d8a609a4b82c273257ee9d631ded7fac0d875bdcdccc109f3ee8328cfcb1 \ + --hash=sha256:8ce11cd4d62d11166f2b441e30ace226c19a3899a7cf0796f668fba49a9fb123 \ + --hash=sha256:8fff79bf5978c693c9b1a4d71e4a94fddfb5fe744eb062a318e15f4a2f63a550 \ + --hash=sha256:92263f7eca2f4af326cd20de8d16728d2602f7cfea02e790dcde9d83c365d7cc \ + --hash=sha256:93b3b2cc5cf1b8743660ce77a4f45f3f6d1172068207c1defc779a36eea6bb36 \ + --hash=sha256:95adae7b6c42a6c5b5b559b1a99149f090a57128155daeea91732c8d970d8644 \ + --hash=sha256:97ab7787092eb9b50fb47fa04f24c75b768a606af1bcba1957f07f128a7219e4 \ + --hash=sha256:9db5e3fcdcee89a78c04dffb3fe33c79f77bd741a624946db2591c81b2fc85b0 \ + --hash=sha256:a118e2e0b5ae6b0120d5efa5f866e58f2bb826067a646431da4d6a2bdae7950e \ + --hash=sha256:a2aecdb364b8a1802afdc7f9327d55dad5366bc97d8502d0f5854e50712dbc5f \ + --hash=sha256:a66aa5022bf81ab4b1bebfb009db4fd68e0c6d4307a1ce5ef6a26e5878dfc9e4 \ + --hash=sha256:a68766a3c58fde7f9aaa22b3786276f62ab2f594efb02d0a1421b6282e852e98 \ + --hash=sha256:aa2f963b4da26daf46231d9b9e0e2c9408a751f8f0d0f44d2de56d3caf51d294 \ + --hash=sha256:aa92ec1102eaff840ccd1021478af176a831f1bccb08e526ce844b7ddda85c22 \ + --hash=sha256:ac59c15e3f1465f722607800c68713f9fbc2f672b9eb649fe831da4019ae9b23 \ + --hash=sha256:ae8b03427410731469c4033934cf473426faff3e04b69d2dfb64a4281a3719f8 \ + --hash=sha256:afca7f78067dd27c2b848f1b234623d26b87529296c6c5652168cc1954f2f3b2 \ + --hash=sha256:b2d37d78297b39a9eb9eb92c0f6df98c706467282055419df141389b23f93362 \ + --hash=sha256:b3e71afc578b98512bfe7bdb822dd6bc57d4b0093b4b6e5487c1e96ad4ace242 \ + --hash=sha256:ba20bdf69bd127f66d0174d6f2a93e69045e0b4036dc1ca78e091bcc765830c4 \ + --hash=sha256:c108f8619e504140569ee7de3f97d234f0fbae338a7f9f360455071ef9855a95 \ + --hash=sha256:c23eb3263356d94858655b3e63f85ac5d50970c6e8febcdde7830209139cc37d \ + --hash=sha256:c5af897b45fa606b12464ccbe0014bbf8c09191e0a66aab6aa9d5cf6e77e0c94 \ + --hash=sha256:c7a80a9242963416bd81f99349d5f3fce1843c303bd404f204918b6d75a75fd6 \ + --hash=sha256:c7e84e0c0005e3bdc1a9211cd4e62c78ba80bc37b2365ef4410cd2007a9047f2 \ + --hash=sha256:cace89841c0599d736d3d74a27bc5821288bb47c5441923277afc6059d7fbcb4 \ + --hash=sha256:cd2d0f0ec9aa977a27731a3209ebbcacebebaf41f902bd453a928bfd281cf7f8 \ + --hash=sha256:d01de5e768328646e6a3fa9e562706f8f6641708c115c62588aef2b941a4f88e \ + --hash=sha256:d1028de43596a315e2720a9849ee79007ab742c06ad8b45a50db8cdb7ed4a82a \ + --hash=sha256:d27ce22ec453564770d29d03a9506d449efbb9fa13c00842262b2f6801c48cce \ + --hash=sha256:d29dd9c016f2078b43d0c357511e87eee5b05108f3dd603423cb389b89813969 \ + --hash=sha256:d31f0d1671e1534e395f9eb84a68e0fb670e1edb1fe819a9d7f564ae3bc4e53f \ + --hash=sha256:d4eb8ac7469b2a5d64b5b8c04f84d8bf3ad340f4514b98523805cbf46e3b3923 \ + --hash=sha256:d5e52d127045d6ae01a1e821acfad2f3a1866c54d0e837828538fabe8d9d1bd6 \ + --hash=sha256:d77f97e515688bd615c1d1f795d540f32542d514242067adcb8ef532504cb9ee \ + --hash=sha256:d8ed79b8f6372ca4254955005830fd61c1ccdd8c0fac6603e2c145c61dd95db6 \ + --hash=sha256:dc57a0baa3eeedd99fafaef7511b5a6ef4581494e8168ee086031744e2679467 \ + --hash=sha256:e09f671a54ce70b79a1fc1dc6da3072b7ef7251fadb894ed92d9aa8218465a5f \ + --hash=sha256:e22d1059b951e7ae7c20ef6b06afd10fb95e3c41bf3c4fbc874dba113321c193 \ + --hash=sha256:e37bd100d2c5d3ba35db9c7c5ba5a9228cbcffe5c4778dc824b164e5257813d7 \ + --hash=sha256:e51ae7d81c825761d941962450f50d041db028b7278e7b08930b4541b3e45cb9 \ + --hash=sha256:e545b51da9f9af5c67815ca0eb40676c0f016d0b0381c86f20451e35696c5f95 \ + --hash=sha256:e6302ca4ae283deb0af68d2fbf467474b8b6aedcd3dab4db187e07f94c109763 \ + --hash=sha256:e71bbb595973622b817c042bd943c3f3667e9c9983ce3d205f973f486fec98a7 \ + --hash=sha256:ec56a2266f32bc06ed3c3e2a8f58417ce02f7e0356edc89786e52db13c593c98 \ + --hash=sha256:ed1a9a204f317ef879b32f9af507d47e49cd5e7f8e8d5d96358c98373314fc60 \ + --hash=sha256:ed97c282ee4f994ef814042423a529df9497e3c666dca19be1d4cd1129dc7ade \ + --hash=sha256:ed98364e1c262cf5f9363c3eca8c2df37024f52a8fa1180a3610014f26eac51c \ + --hash=sha256:ee57b926940ba00bca7ba7041e665cc956e55ef482f851b9b65acb20d867e7a2 \ + --hash=sha256:f1d725b754e967e648046f00c4facc42d414840f5ccc670c5670f59f83693e4f \ + --hash=sha256:f8102ae93c0bc863b1d41ea0f4499c20a83229f52ed870850892df555187154a \ + --hash=sha256:fc1c64934b8faf7584924143eb9db4770bbdb16659626e1a1a4d9efbcb68d947 \ + --hash=sha256:ff95a9283de8a457e6b12989de3f9f5193430f375d64297d323a615ea52cbdb3 + # via + # -c src/backend/requirements.txt + # requests +cryptography==46.0.5 \ + --hash=sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72 \ + --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ + --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ + --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ + --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ + --hash=sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad \ + --hash=sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4 \ + --hash=sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c \ + --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ + --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ + --hash=sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31 \ + --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ + --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ + --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ + --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ + --hash=sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4 \ + --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ + --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ + --hash=sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595 \ + --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ + --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ + --hash=sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48 \ + --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ + --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ + --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ + --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ + --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ + --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ + --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ + --hash=sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7 \ + --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ + --hash=sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2 \ + --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ + --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ + --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ + --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ + --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ + --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ + --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ + --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ + --hash=sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a \ + --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ + --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ + --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ + --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ + --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ + --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ + --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ + --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in + # django-anymail + # djangorestframework-simplejwt + # fido2 + # jwcrypto + # paramiko + # pyjwt +cssselect2==0.9.0 \ + --hash=sha256:6a99e5f91f9a016a304dd929b0966ca464bcfda15177b6fb4a118fc0fb5d9563 \ + --hash=sha256:759aa22c216326356f65e62e791d66160a0f9c91d1424e8d8adc5e74dddfc6fb + # via + # -c src/backend/requirements.txt + # weasyprint +defusedxml==0.7.1 \ + --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ + --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 + # via + # -c src/backend/requirements.txt + # python3-openid +django==5.2.12 \ + --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ + --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in + # django-allauth + # django-anymail + # django-cors-headers + # django-dbbackup + # django-error-report-2 + # django-filter + # django-flags + # django-ical + # django-js-asset + # django-markdownify + # django-money + # django-oauth-toolkit + # django-otp + # django-picklefield + # django-q2 + # django-recurrence + # django-redis + # django-sesame + # django-sql-utils + # django-sslserver + # django-stdimage + # django-storages + # django-structlog + # django-taggit + # django-xforwardedfor-middleware + # djangorestframework + # djangorestframework-simplejwt + # drf-spectacular +django-allauth[headless, mfa, openid, saml, socialaccount]==65.14.3 \ + --hash=sha256:1d8e1127bdffceb8001bdd9bafbf97661f81e92f4b7bd4f6e799167b0311286d \ + --hash=sha256:548eef76ab85f6e48f46f98437abf22acf0e834f73e9915fb6cc3f31a0dcdf4d + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-anymail[amazon-ses, postal]==14.0 \ + --hash=sha256:98e5575bcff231952a92117b7d0a4dd37fab582333a343de302d415a31dc72b1 \ + --hash=sha256:ca42e52da62d2c96ce92412f9d68ef6d2067d96a384096b6e932d6a247e9fd61 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-cleanup==9.0.0 \ + --hash=sha256:19f8b0e830233f9f0f683b17181f414672a0f48afe3ea3cc80ba47ae40ad880c \ + --hash=sha256:bb9fb560aaf62959c81e31fa40885c36bbd5854d5aa21b90df2c7e4ba633531e + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-cors-headers==4.9.0 \ + --hash=sha256:15c7f20727f90044dcee2216a9fd7303741a864865f0c3657e28b7056f61b449 \ + --hash=sha256:fe5d7cb59fdc2c8c646ce84b727ac2bca8912a247e6e68e1fb507372178e59e8 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-dbbackup==5.2.0 \ + --hash=sha256:540948869e44778b5b33333cbab0cfe44279defd47df635d309ede8666894370 \ + --hash=sha256:72b11dd31758abcf8f2d405fd2efbc49c9624bc17196f8c68542d3dc8d8d53c3 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-error-report-2==0.4.2 \ + --hash=sha256:1dd99c497af09b7ea99f5fbaf910501838150a9d5390796ea00e187bc62f6c1b \ + --hash=sha256:603e1e3b24d01bbfeab6379af948893b2b034031c80fa8b45cf1c4735341c04b + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-filter==25.2 \ + --hash=sha256:760e984a931f4468d096f5541787efb8998c61217b73006163bf2f9523fe8f23 \ + --hash=sha256:9c0f8609057309bba611062fe1b720b4a873652541192d232dd28970383633e3 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-flags==5.2.0 \ + --hash=sha256:a3aee5e0d11e24e35f5ae4a423d52cad721f639181c1b1251e0148d8530a3f81 \ + --hash=sha256:aa22543410f68a4082c576f3be469ea67a51c933f8a43eb8b10f6236f158e17e + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-ical==1.9.2 \ + --hash=sha256:44c9b6fa90d09f25e9ebaa91ed9eb007f079afbc23d6aac909cfc18188a8e90c \ + --hash=sha256:74a16bca05735f91a00120cad7250f3c3aa292a9f698a6cfdc544a922c11de70 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-ipware==7.0.1 \ + --hash=sha256:d9ec43d2bf7cdf216fed8d494a084deb5761a54860a53b2e74346a4f384cff47 \ + --hash=sha256:db16bbee920f661ae7f678e4270460c85850f03c6761a4eaeb489bdc91f64709 + # via + # -c src/backend/requirements.txt + # django-structlog +django-js-asset==3.1.2 \ + --hash=sha256:1fc7584199ed1941ed7c8e7b87ca5524bb0f2ba941561d2a104e88ee9f07bedd \ + --hash=sha256:b5ffe376aebbd73b7af886d675ac9f43ca63b39540190fa8409c9f8e79145f68 + # via + # -c src/backend/requirements.txt + # django-mptt +django-mailbox==4.10.1 \ + --hash=sha256:9060a4ddc81d16aa699e266649c12eaf4f29671b5266352e2fad3043a6832b52 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-maintenance-mode==0.22.0 \ + --hash=sha256:502f04f845d6996e8add321186b3b9236c3702de7cb0ab14952890af6523b9e5 \ + --hash=sha256:a9cf2ba79c9945bd67f98755a6cfd281869d39b3745bbb5d1f571d058657aa85 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-markdownify==0.9.6 \ + --hash=sha256:9863b2bfa6d159ad1423dc93bf0d6eadc6413776de304049aa9fcfa5edd2ce1c \ + --hash=sha256:edcf47b2026d55a8439049d35c8b54e11066a4856c4fad1060e139cb3d2eee52 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-money==3.6.0 \ + --hash=sha256:94402f2831f2726b94ef2da35b4059441b4c0aedfc47b312472200d4ffdf8d73 \ + --hash=sha256:a8d249bf3ce6ad7fb953530c920cc85ea7f1137c0fde747a74204ea24ec97ab1 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-mptt==0.18.0 \ + --hash=sha256:bfa3f01627e3966a1df901aeca74570a3e933e66809ebf58d9df673e63627afb \ + --hash=sha256:cf5661357ff22bc64e20d3341c26e538aa54583aea0763cfe6aaec0ab8e3a8ee + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-oauth-toolkit==3.2.0 \ + --hash=sha256:bd2cd2719b010231a2f370f927dbcc740454fb1d0dd7e7f4138f36227363dc26 \ + --hash=sha256:c36761ae6810083d95a652e9c820046cde0d45a2e2a5574bbe7202656ec20bb6 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-otp==1.3.0 \ + --hash=sha256:5277731bc05b6cdbf96aa84ac46018e30ed5fb248086053b0146f925de059060 \ + --hash=sha256:8f4156a3c14ce2aaa31379385eadf388925cd50fc4b5d20a3b944f454c98ff7c + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-picklefield==3.4.0 \ + --hash=sha256:3a1f740536c0e60d0dba43aa89ccdbe86760d4c3f8ec47799eae122baa741d0a \ + --hash=sha256:929bcfbae5b48bd22a52bc04521fdfdd152eee36abb9f20228f9480f9df65f45 + # via + # -c src/backend/requirements.txt + # django-q2 +django-q-sentry==0.1.6 \ + --hash=sha256:9b8b4d7fad253a7d9a47f2c2ab0d9dea83078b7ef45c8849dbb1e4176ef8d050 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-q2==1.9.0 \ + --hash=sha256:4eded27644b0ffb291839c9f9c12fea6c0dec63ebd891fa6881b0b446098a49d \ + --hash=sha256:ef7facca96fae9c11ddf2c5252d3817975c7a9a6d989fa0d65487d8823d57799 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-recurrence==1.14 \ + --hash=sha256:154a6221bd6667c35250d9fa89bbc4792b3f1ec5dc8dff0f5872186b6df3cf76 \ + --hash=sha256:3e7420a38c7fa2f5073598e2a4236c65a983213f30f4413618448b43514649cd + # via + # -c src/backend/requirements.txt + # django-ical +django-redis==6.0.0 \ + --hash=sha256:20bf0063a8abee567eb5f77f375143c32810c8700c0674ced34737f8de4e36c0 \ + --hash=sha256:2d9cb12a20424a4c4dde082c6122f486628bae2d9c2bee4c0126a4de7fda00dd + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-sesame==3.2.3 \ + --hash=sha256:09977a1c55bdbcce0a024c712c4d683e1a69543a217626ffa1d5f7ef7ebffc58 \ + --hash=sha256:5da0210a57a8f48dd61a6c8125e61121403042ed000c96187e4188a8241496d6 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-sql-utils==0.7.0 \ + --hash=sha256:9371ff28eaf326836a7c52887259123cdd3fbffb7b738e42ae1a21258be0feb6 \ + --hash=sha256:fefc40c826896b60fcf33e35b6e30b523fc958955a16006438cd3ba6d795a532 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-sslserver==0.22 \ + --hash=sha256:c598a363d2ccdc2421c08ddb3d8b0973f80e8e47a3a5b74e4a2896f21c2947c5 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-stdimage==6.0.2 \ + --hash=sha256:880ab14828be56b53f711c3afae83c219ddd5d9af00850626736feb48382bf7f \ + --hash=sha256:9a73f7da48c48074580e2b032d5bdb7164935dbe4b9dc4fb88a7e112f3d521c8 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-storages[s3, sftp]==1.14.6 \ + --hash=sha256:11b7b6200e1cb5ffcd9962bd3673a39c7d6a6109e8096f0e03d46fab3d3aabd9 \ + --hash=sha256:7a25ce8f4214f69ac9c7ce87e2603887f7ae99326c316bc8d2d75375e09341c9 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-structlog==10.0.0 \ + --hash=sha256:4e3fa4a930697fb9b649470e389419bb73b916a1ecf4f4bf2f8727f5cbfdb002 \ + --hash=sha256:4f9db3cb7b308df6aa4afe1353d9c19d5bac757022ddbbb5c24f3d0d6a91a240 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-taggit==6.1.0 \ + --hash=sha256:ab776264bbc76cb3d7e49e1bf9054962457831bd21c3a42db9138b41956e4cf0 \ + --hash=sha256:c4d1199e6df34125dd36db5eb0efe545b254dec3980ce5dd80e6bab3e78757c3 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +django-xforwardedfor-middleware==2.0 \ + --hash=sha256:16fd1cb27f33a5541b6f3e0b43afb1b7334a76f27a1255b69e14ec5c440f0b24 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +djangorestframework==3.17.0 \ + --hash=sha256:456fd992a33f9e64c9d0f47e85d9787db0efb44f894c1e513315b5e74765bd4c \ + --hash=sha256:d84fe85f30b7ac6e8c0076ce9ff635e4eaedca5912f8d7d2926ce448c08533ba + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in + # djangorestframework-simplejwt + # drf-spectacular +djangorestframework-simplejwt[crypto]==5.5.1 \ + --hash=sha256:2c30f3707053d384e9f315d11c2daccfcb548d4faa453111ca19a542b732e469 \ + --hash=sha256:e72c5572f51d7803021288e2057afcbd03f17fe11d484096f40a460abc76e87f + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +docutils==0.22.4 \ + --hash=sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968 \ + --hash=sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +drf-spectacular==0.29.0 \ + --hash=sha256:0a069339ea390ce7f14a75e8b5af4a0860a46e833fd4af027411a3e94fc1a0cc \ + --hash=sha256:d1ee7c9535d89848affb4427347f7c4a22c5d22530b8842ef133d7b72e19b41a + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +dulwich==1.1.0 \ + --hash=sha256:06c18293fb2c715f035052f0c74f56e5ff52925ad4d0b5a0ebf16118daa5e340 \ + --hash=sha256:0890fff677c617efbac0cd4584bec9753388e6cd6336e7131338ea034b47e899 \ + --hash=sha256:1b1b9adaf82301fd7b360a5fa521cec1623cb9d77a0c5a09d04396637b39eb48 \ + --hash=sha256:2f5a455e67f9ddd018299ce8dd05861a2696d35c6af91e9acdb4af0767bc0b8b \ + --hash=sha256:2f6dd0c5fc45c84790d4a48d168d07f0aa817fcb879d2632e6cee603e98a843c \ + --hash=sha256:333b0f93b289b14f98870317fb0583fdf73d5341f21fd09c694aa88bb06ad911 \ + --hash=sha256:37be136c7a85a64ae0cf8030f4fb2fa4860cff653ad3bcf13c49bf59fea2020c \ + --hash=sha256:3ba0cb28848dd8fd80d4389d1b83968da172376cea34f9bdb39043970fa1a045 \ + --hash=sha256:49c39844b4abe53612d18add7762faf886ade70384a101912e0849f56f885913 \ + --hash=sha256:518307ab080746ee9c32fc13e76ad4f7df8f7665bb85922e974037dd9415541a \ + --hash=sha256:59e10ca543b752fa4b467a9ce420ad95b65e232f817f91809e64fe76eb8e27c6 \ + --hash=sha256:5a662942f123614077f14bc31e66f6adce09561cc25da1ef716c13be8dba56c5 \ + --hash=sha256:693c450a5d327a6a5276f5292d3dd0bc473066d2fd2a2d69a990d7738535deb6 \ + --hash=sha256:6d5a0be4a84cc6ad23b6dcf2f9cbf2a0a65dd907612ad38312b2259ebe7bae56 \ + --hash=sha256:6e318970e405987d10c1fd8d1e45f4e8c75874e771a5512f6fbb51b13d5a3108 \ + --hash=sha256:8cf55f0de4cf90155aa3ab228c8ef9e7e10f7c785339f1688fb71f6adaae302c \ + --hash=sha256:904f09ae3364dc8c026812b0478f2411a973f404aa2654ea18d9f340b3915872 \ + --hash=sha256:941735c87b3657019d197bb72f0e9ec03cbdbf959dc0869e672f5c6871597442 \ + --hash=sha256:9a32f92c2eb86c84a175261f8fb983b6765bb31618d79d0c0dd68fab6f6ca94a \ + --hash=sha256:9aa855db9fee0a7065ae9ffb38e14e353876d82f17e33e1a1fb3830eb8d0cf43 \ + --hash=sha256:9b1bbb785f29f9eb51cddb9d80f82dac03939b7444961283b09adac19a823e88 \ + --hash=sha256:a05a1049b3928205672913f4c490cf7b08afaa3e7ee7e55e15476e696412672f \ + --hash=sha256:a0f3421802225caedd11e95ce40f6a8d3c7a5df906489b6a5f49a20f88f62928 \ + --hash=sha256:a1959be27d8201fcee8612da8afecd8e7992d8db8767dcef8704264db09db2ad \ + --hash=sha256:b223d00cf564c99986945bd18a74e2e9ef85e713cfe5ad61d04184c386d52fed \ + --hash=sha256:ba6f3f0807868f788b7f1d53b9ac0be3e425136b16563994f5ef6ecf5b7c7863 \ + --hash=sha256:bcd67e7f9bdffb4b660330c4597d251cd33e74f5df6898a2c1e6a1730a62af06 \ + --hash=sha256:be593608a57f5cfa2a1b9927c1b486c3007f5a6f34ff251feaeca3a6a43d4780 \ + --hash=sha256:c9752d25f01e92587f8db52e50daf3e970deb49555340653ea44ba5e60f0f416 \ + --hash=sha256:cb5e28210e34e6473d982cdf99e420dd2791e7af4d9be796fa760055951d82df \ + --hash=sha256:d491e05d434a403f2ed7454002f39ce6fb9ae8de93bded368721bdb9a1f41778 \ + --hash=sha256:dff1b67e0f76fcaae8f7345c05b1c4f00c11a6c42ace20864e80e7964af31827 \ + --hash=sha256:e738163865dfccf155ef5fa3a2b2c849f38dadc6f009d2be355864233899bb4b \ + --hash=sha256:eb5440145bb2bbab71cdfa149fd297a8b7d4db889ab90c58d7a07009a73c1d28 \ + --hash=sha256:f8789e14981be2d33c3c36a14ec55ae06780c0a865e9df107016c4489a4a022a \ + --hash=sha256:fc38cc6f60c5e475fa61dcd2b743113f35377602c1ba1c82264898d97a7d3c48 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +et-xmlfile==2.0.0 \ + --hash=sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa \ + --hash=sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54 + # via + # -c src/backend/requirements.txt + # openpyxl +feedparser==6.0.12 \ + --hash=sha256:64f76ce90ae3e8ef5d1ede0f8d3b50ce26bcce71dd8ae5e82b1cd2d4a5f94228 \ + --hash=sha256:6bbff10f5a52662c00a2e3f86a38928c37c48f77b3c511aedcd51de933549324 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +fido2==2.1.1 \ + --hash=sha256:f1379f845870cc7fc64c7f07323c3ce41e8c96c37054e79e0acd5630b3fec5ac \ + --hash=sha256:f85c16c8084abf6530b6c6ec3a0cf8575943321842e06916686943a8b784182c + # via + # -c src/backend/requirements.txt + # django-allauth +flexcache==0.3 \ + --hash=sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656 \ + --hash=sha256:d43c9fea82336af6e0115e308d9d33a185390b8346a017564611f1466dcd2e32 + # via + # -c src/backend/requirements.txt + # pint +flexparser==0.4 \ + --hash=sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2 \ + --hash=sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846 + # via + # -c src/backend/requirements.txt + # pint +fonttools[woff]==4.61.1 \ + --hash=sha256:0de30bfe7745c0d1ffa2b0b7048fb7123ad0d71107e10ee090fa0b16b9452e87 \ + --hash=sha256:10d88e55330e092940584774ee5e8a6971b01fc2f4d3466a1d6c158230880796 \ + --hash=sha256:11f35ad7805edba3aac1a3710d104592df59f4b957e30108ae0ba6c10b11dd75 \ + --hash=sha256:15acc09befd16a0fb8a8f62bc147e1a82817542d72184acca9ce6e0aeda9fa6d \ + --hash=sha256:17d2bf5d541add43822bcf0c43d7d847b160c9bb01d15d5007d84e2217aaa371 \ + --hash=sha256:2180f14c141d2f0f3da43f3a81bc8aa4684860f6b0e6f9e165a4831f24e6a23b \ + --hash=sha256:21e7c8d76f62ab13c9472ccf74515ca5b9a761d1bde3265152a6dc58700d895b \ + --hash=sha256:41a7170d042e8c0024703ed13b71893519a1a6d6e18e933e3ec7507a2c26a4b2 \ + --hash=sha256:41ed4b5ec103bd306bb68f81dc166e77409e5209443e5773cb4ed837bcc9b0d3 \ + --hash=sha256:497c31ce314219888c0e2fce5ad9178ca83fe5230b01a5006726cdf3ac9f24d9 \ + --hash=sha256:4c1b526c8d3f615a7b1867f38a9410849c8f4aef078535742198e942fba0e9bd \ + --hash=sha256:4d7092bb38c53bbc78e9255a59158b150bcdc115a1e3b3ce0b5f267dc35dd63c \ + --hash=sha256:4f5686e1fe5fce75d82d93c47a438a25bf0d1319d2843a926f741140b2b16e0c \ + --hash=sha256:58b0ee0ab5b1fc9921eccfe11d1435added19d6494dde14e323f25ad2bc30c56 \ + --hash=sha256:5ce02f38a754f207f2f06557523cd39a06438ba3aafc0639c477ac409fc64e37 \ + --hash=sha256:5fade934607a523614726119164ff621e8c30e8fa1ffffbbd358662056ba69f0 \ + --hash=sha256:5fe9fd43882620017add5eabb781ebfbc6998ee49b35bd7f8f79af1f9f99a958 \ + --hash=sha256:64102ca87e84261419c3747a0d20f396eb024bdbeb04c2bfb37e2891f5fadcb5 \ + --hash=sha256:664c5a68ec406f6b1547946683008576ef8b38275608e1cee6c061828171c118 \ + --hash=sha256:6675329885c44657f826ef01d9e4fb33b9158e9d93c537d84ad8399539bc6f69 \ + --hash=sha256:75c1a6dfac6abd407634420c93864a1e274ebc1c7531346d9254c0d8f6ca00f9 \ + --hash=sha256:75da8f28eff26defba42c52986de97b22106cb8f26515b7c22443ebc9c2d3261 \ + --hash=sha256:77efb033d8d7ff233385f30c62c7c79271c8885d5c9657d967ede124671bbdfb \ + --hash=sha256:78a7d3ab09dc47ac1a363a493e6112d8cabed7ba7caad5f54dbe2f08676d1b47 \ + --hash=sha256:7c7db70d57e5e1089a274cbb2b1fd635c9a24de809a231b154965d415d6c6d24 \ + --hash=sha256:8c56c488ab471628ff3bfa80964372fc13504ece601e0d97a78ee74126b2045c \ + --hash=sha256:91669ccac46bbc1d09e9273546181919064e8df73488ea087dcac3e2968df9ba \ + --hash=sha256:9b666a475a65f4e839d3d10473fad6d47e0a9db14a2f4a224029c5bfde58ad2c \ + --hash=sha256:9cfef3ab326780c04d6646f68d4b4742aae222e8b8ea1d627c74e38afcbc9d91 \ + --hash=sha256:a13fc8aeb24bad755eea8f7f9d409438eb94e82cf86b08fe77a03fbc8f6a96b1 \ + --hash=sha256:a75c301f96db737e1c5ed5fd7d77d9c34466de16095a266509e13da09751bd19 \ + --hash=sha256:a76d4cb80f41ba94a6691264be76435e5f72f2cb3cab0b092a6212855f71c2f6 \ + --hash=sha256:aed04cabe26f30c1647ef0e8fbb207516fd40fe9472e9439695f5c6998e60ac5 \ + --hash=sha256:b148b56f5de675ee16d45e769e69f87623a4944f7443850bf9a9376e628a89d2 \ + --hash=sha256:b501c862d4901792adaec7c25b1ecc749e2662543f68bb194c42ba18d6eec98d \ + --hash=sha256:b846a1fcf8beadeb9ea4f44ec5bdde393e2f1569e17d700bfc49cd69bde75881 \ + --hash=sha256:b931ae8f62db78861b0ff1ac017851764602288575d65b8e8ff1963fed419063 \ + --hash=sha256:c33ab3ca9d3ccd581d58e989d67554e42d8d4ded94ab3ade3508455fe70e65f7 \ + --hash=sha256:c6604b735bb12fef8e0efd5578c9fb5d3d8532d5001ea13a19cddf295673ee09 \ + --hash=sha256:d8db08051fc9e7d8bc622f2112511b8107d8f27cd89e2f64ec45e9825e8288da \ + --hash=sha256:d9203500f7c63545b4ce3799319fe4d9feb1a1b89b28d3cb5abd11b9dd64147e \ + --hash=sha256:dc492779501fa723b04d0ab1f5be046797fee17d27700476edc7ee9ae535a61e \ + --hash=sha256:e6bcdf33aec38d16508ce61fd81838f24c83c90a1d1b8c68982857038673d6b8 \ + --hash=sha256:e76ce097e3c57c4bcb67c5aa24a0ecdbd9f74ea9219997a707a4061fbe2707aa \ + --hash=sha256:eff1ac3cc66c2ac7cda1e64b4e2f3ffef474b7335f92fc3833fc632d595fcee6 \ + --hash=sha256:f3cb4a569029b9f291f88aafc927dd53683757e640081ca8c412781ea144565e \ + --hash=sha256:f79b168428351d11e10c5aeb61a74e1851ec221081299f4cf56036a95431c43a \ + --hash=sha256:fa646ecec9528bef693415c79a86e733c70a4965dd938e9a226b0fc64c9d2e6c \ + --hash=sha256:fe2efccb324948a11dd09d22136fe2ac8a97d6c1347cf0b58a911dcd529f66b7 \ + --hash=sha256:fff4f534200a04b4a36e7ae3cb74493afe807b517a09e99cb4faa89a34ed6ecd + # via + # -c src/backend/requirements.txt + # weasyprint +googleapis-common-protos==1.73.0 \ + --hash=sha256:778d07cd4fbeff84c6f7c72102f0daf98fa2bfd3fa8bea426edc545588da0b5a \ + --hash=sha256:dfdaaa2e860f242046be561e6d6cb5c5f1541ae02cfbcb034371aadb2942b4e8 + # via + # -c src/backend/requirements.txt + # opentelemetry-exporter-otlp-proto-grpc + # opentelemetry-exporter-otlp-proto-http +grpcio==1.78.0 \ + --hash=sha256:082653eecbdf290e6e3e2c276ab2c54b9e7c299e07f4221872380312d8cf395e \ + --hash=sha256:10a9a644b5dd5aec3b82b5b0b90d41c0fa94c85ef42cb42cf78a23291ddb5e7d \ + --hash=sha256:12a771591ae40bc65ba67048fa52ef4f0e6db8279e595fd349f9dfddeef571f9 \ + --hash=sha256:185dea0d5260cbb2d224c507bf2a5444d5abbb1fa3594c1ed7e4c709d5eb8383 \ + --hash=sha256:1afa62af6e23f88629f2b29ec9e52ec7c65a7176c1e0a83292b93c76ca882558 \ + --hash=sha256:2045397e63a7a0ee7957c25f7dbb36ddc110e0cfb418403d110c0a7a68a844e9 \ + --hash=sha256:207db540302c884b8848036b80db352a832b99dfdf41db1eb554c2c2c7800f65 \ + --hash=sha256:271c73e6e5676afe4fc52907686670c7cea22ab2310b76a59b678403ed40d670 \ + --hash=sha256:2777b783f6c13b92bd7b716667452c329eefd646bfb3f2e9dabea2e05dbd34f6 \ + --hash=sha256:2bf5e2e163b356978b23652c4818ce4759d40f4712ee9ec5a83c4be6f8c23a3a \ + --hash=sha256:35eb275bf1751d2ffbd8f57cdbc46058e857cf3971041521b78b7db94bdaf127 \ + --hash=sha256:391e93548644e6b2726f1bb84ed60048d4bcc424ce5e4af0843d28ca0b754fec \ + --hash=sha256:3c586ac70e855c721bda8f548d38c3ca66ac791dc49b66a8281a1f99db85e452 \ + --hash=sha256:3f8904a8165ab21e07e58bf3e30a73f4dffc7a1e0dbc32d51c61b5360d26f43e \ + --hash=sha256:459ab414b35f4496138d0ecd735fed26f1318af5e52cb1efbc82a09f0d5aa911 \ + --hash=sha256:4c5533d03a6cbd7f56acfc9cfb44ea64f63d29091e40e44010d34178d392d7eb \ + --hash=sha256:51b13f9aed9d59ee389ad666b8c2214cc87b5de258fa712f9ab05f922e3896c6 \ + --hash=sha256:5361a0630a7fdb58a6a97638ab70e1dae2893c4d08d7aba64ded28bb9e7a29df \ + --hash=sha256:5397fff416b79e4b284959642a4e95ac4b0f1ece82c9993658e0e477d40551ec \ + --hash=sha256:57bab6deef2f4f1ca76cc04565df38dc5713ae6c17de690721bdf30cb1e0545c \ + --hash=sha256:6092beabe1966a3229f599d7088b38dfc8ffa1608b5b5cdda31e591e6500f856 \ + --hash=sha256:684083fd383e9dc04c794adb838d4faea08b291ce81f64ecd08e4577c7398adf \ + --hash=sha256:735e38e176a88ce41840c21bb49098ab66177c64c82426e24e0082500cc68af5 \ + --hash=sha256:7382b95189546f375c174f53a5fa873cef91c4b8005faa05cc5b3beea9c4f1c5 \ + --hash=sha256:748b6138585379c737adc08aeffd21222abbda1a86a0dca2a39682feb9196c20 \ + --hash=sha256:74be1268d1439eaaf552c698cdb11cd594f0c49295ae6bb72c34ee31abbe611b \ + --hash=sha256:7cc47943d524ee0096f973e1081cb8f4f17a4615f2116882a5f1416e4cfe92b5 \ + --hash=sha256:859b13906ce098c0b493af92142ad051bf64c7870fa58a123911c88606714996 \ + --hash=sha256:85f93781028ec63f383f6bc90db785a016319c561cc11151fbb7b34e0d012303 \ + --hash=sha256:86ce2371bfd7f212cf60d8517e5e854475c2c43ce14aa910e136ace72c6db6c1 \ + --hash=sha256:86f85dd7c947baa707078a236288a289044836d4b640962018ceb9cd1f899af5 \ + --hash=sha256:8dfffba826efcf366b1e3ccc37e67afe676f290e13a3b48d31a46739f80a8724 \ + --hash=sha256:8f2ac84905d12918e4e55a16da17939eb63e433dc11b677267c35568aa63fc84 \ + --hash=sha256:94309f498bcc07e5a7d16089ab984d42ad96af1d94b5a4eb966a266d9fcabf68 \ + --hash=sha256:94f95cf5d532d0e717eed4fc1810e8e6eded04621342ec54c89a7c2f14b581bf \ + --hash=sha256:9566fe4ababbb2610c39190791e5b829869351d14369603702e890ef3ad2d06e \ + --hash=sha256:9dca934f24c732750389ce49d638069c3892ad065df86cb465b3fa3012b70c9e \ + --hash=sha256:a9f136fbafe7ccf4ac7e8e0c28b31066e810be52d6e344ef954a3a70234e1702 \ + --hash=sha256:ab399ef5e3cd2a721b1038a0f3021001f19c5ab279f145e1146bb0b9f1b2b12c \ + --hash=sha256:b0c689c02947d636bc7fab3e30cc3a3445cca99c834dfb77cd4a6cabfc1c5597 \ + --hash=sha256:b2342d87af32790f934a79c3112641e7b27d63c261b8b4395350dad43eff1dc7 \ + --hash=sha256:b58f37edab4a3881bc6c9bca52670610e0c9ca14e2ea3cf9debf185b870457fb \ + --hash=sha256:bd8cb8026e5f5b50498a3c4f196f57f9db344dad829ffae16b82e4fdbaea2813 \ + --hash=sha256:be63c88b32e6c0f1429f1398ca5c09bc64b0d80950c8bb7807d7d7fb36fb84c7 \ + --hash=sha256:c3f293fdc675ccba4db5a561048cca627b5e7bd1c8a6973ffedabe7d116e22e2 \ + --hash=sha256:c41bc64626db62e72afec66b0c8a0da76491510015417c127bfc53b2fe6d7f7f \ + --hash=sha256:ce3a90455492bf8bfa38e56fbbe1dbd4f872a3d8eeaf7337dc3b1c8aa28c271b \ + --hash=sha256:ce7599575eeb25c0f4dc1be59cada6219f3b56176f799627f44088b21381a28a \ + --hash=sha256:dce09d6116df20a96acfdbf85e4866258c3758180e8c49845d6ba8248b6d0bbb \ + --hash=sha256:de8cb00d1483a412a06394b8303feec5dcb3b55f81d83aa216dbb6a0b86a94f5 \ + --hash=sha256:df2c8f3141f7cbd112a6ebbd760290b5849cda01884554f7c67acc14e7b1758a \ + --hash=sha256:e87cbc002b6f440482b3519e36e1313eb5443e9e9e73d6a52d43bd2004fcfd8e \ + --hash=sha256:e888474dee2f59ff68130f8a397792d8cb8e17e6b3434339657ba4ee90845a8c \ + --hash=sha256:f12857d24d98441af6a1d5c87442d624411db486f7ba12550b07788f74b67b04 \ + --hash=sha256:f2d4e43ee362adfc05994ed479334d5a451ab7bc3f3fee1b796b8ca66895acb4 \ + --hash=sha256:f3d6379493e18ad4d39537a82371c5281e153e963cecb13f953ebac155756525 \ + --hash=sha256:f8dff3d9777e5d2703a962ee5c286c239bf0ba173877cc68dc02c17d042e29de \ + --hash=sha256:f9ab915a267fc47c7e88c387a3a28325b58c898e23d4995f765728f4e3dedb97 \ + --hash=sha256:fbe6e89c7ffb48518384068321621b2a69cab509f58e40e4399fdd378fa6d074 \ + --hash=sha256:fd5f135b1bd58ab088930b3c613455796dfa0393626a6972663ccdda5b4ac6ce \ + --hash=sha256:ff870aebe9a93a85283837801d35cd5f8814fe2ad01e606861a7fb47c762a2b7 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in + # opentelemetry-exporter-otlp-proto-grpc +gunicorn==25.1.0 \ + --hash=sha256:1426611d959fa77e7de89f8c0f32eed6aa03ee735f98c01efba3e281b1c47616 \ + --hash=sha256:d0b1236ccf27f72cfe14bce7caadf467186f19e865094ca84221424e839b8b8b + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +icalendar==7.0.3 \ + --hash=sha256:8c9fea6d3a89671bba8b6938d8565b4d0ec465c6a2796ef0f92790dcb9e627cd \ + --hash=sha256:95027ece087ab87184d765f03761f25875821f74cdd18d3b57e9c868216d8fde + # via + # -c src/backend/requirements.txt + # django-ical +idna==3.11 \ + --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ + --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902 + # via + # -c src/backend/requirements.txt + # django-anymail + # requests +importlib-metadata==8.7.1 \ + --hash=sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb \ + --hash=sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151 + # via + # -c src/backend/requirements.txt + # opentelemetry-api +inflection==0.5.1 \ + --hash=sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417 \ + --hash=sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2 + # via + # -c src/backend/requirements.txt + # drf-spectacular +invoke==2.2.1 \ + --hash=sha256:2413bc441b376e5cd3f55bb5d364f973ad8bdd7bf87e53c79de3c11bf3feecc8 \ + --hash=sha256:515bf49b4a48932b79b024590348da22f39c4942dff991ad1fb8b8baea1be707 + # via + # -c src/backend/requirements.txt + # paramiko +isodate==0.7.2 \ + --hash=sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15 \ + --hash=sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6 + # via + # -c src/backend/requirements.txt + # python3-saml +jinja2==3.1.6 \ + --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ + --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +jmespath==1.1.0 \ + --hash=sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d \ + --hash=sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64 + # via + # -c src/backend/requirements.txt + # boto3 + # botocore +jsonschema==4.26.0 \ + --hash=sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326 \ + --hash=sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce + # via + # -c src/backend/requirements.txt + # drf-spectacular +jsonschema-specifications==2025.9.1 \ + --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ + --hash=sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d + # via + # -c src/backend/requirements.txt + # jsonschema +jwcrypto==1.5.6 \ + --hash=sha256:150d2b0ebbdb8f40b77f543fb44ffd2baeff48788be71f67f03566692fd55789 \ + --hash=sha256:771a87762a0c081ae6166958a954f80848820b2ab066937dc8b8379d65b1b039 + # via + # -c src/backend/requirements.txt + # django-oauth-toolkit +lxml==6.0.2 \ + --hash=sha256:058027e261afed589eddcfe530fcc6f3402d7fd7e89bfd0532df82ebc1563dba \ + --hash=sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8 \ + --hash=sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0 \ + --hash=sha256:08b9d5e803c2e4725ae9e8559ee880e5328ed61aa0935244e0515d7d9dbec0aa \ + --hash=sha256:0a3c150a95fbe5ac91de323aa756219ef9cf7fde5a3f00e2281e30f33fa5fa4f \ + --hash=sha256:0aa7070978f893954008ab73bb9e3c24a7c56c054e00566a21b553dc18105fca \ + --hash=sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf \ + --hash=sha256:13e35cbc684aadf05d8711a5d1b5857c92e5e580efa9a0d2be197199c8def607 \ + --hash=sha256:17f68764f35fd78d7c4cc4ef209a184c38b65440378013d24b8aecd327c3e0c8 \ + --hash=sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452 \ + --hash=sha256:1c06035eafa8404b5cf475bb37a9f6088b0aca288d4ccc9d69389750d5543700 \ + --hash=sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d \ + --hash=sha256:1e786a464c191ca43b133906c6903a7e4d56bef376b75d97ccbb8ec5cf1f0a4b \ + --hash=sha256:1ea99340b3c729beea786f78c38f60f4795622f36e305d9c9be402201efdc3b7 \ + --hash=sha256:200069a593c5e40b8f6fc0d84d86d970ba43138c3e68619ffa234bc9bb806a4d \ + --hash=sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6 \ + --hash=sha256:21c73b476d3cfe836be731225ec3421fa2f048d84f6df6a8e70433dff1376d5a \ + --hash=sha256:24a8e756c982c001ca8d59e87c80c4d9dcd4d9b44a4cbeb8d9be4482c514d41d \ + --hash=sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca \ + --hash=sha256:2593c77efde7bfea7f6389f1ab249b15ed4aa5bc5cb5131faa3b843c429fbedb \ + --hash=sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed \ + --hash=sha256:2613e67de13d619fd283d58bda40bff0ee07739f624ffee8b13b631abf33083d \ + --hash=sha256:27220da5be049e936c3aca06f174e8827ca6445a4353a1995584311487fc4e3e \ + --hash=sha256:2c8458c2cdd29589a8367c09c8f030f1d202be673f0ca224ec18590b3b9fb694 \ + --hash=sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd \ + --hash=sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659 \ + --hash=sha256:2ed6c667fcbb8c19c6791bbf40b7268ef8ddf5a96940ba9404b9f9a304832f6c \ + --hash=sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314 \ + --hash=sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5 \ + --hash=sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849 \ + --hash=sha256:3b1675e096e17c6fe9c0e8c81434f5736c0739ff9ac6123c87c2d452f48fc938 \ + --hash=sha256:3e3cb08855967a20f553ff32d147e14329b3ae70ced6edc2f282b94afbc74b2a \ + --hash=sha256:3efe1b21c7801ffa29a1112fab3b0f643628c30472d507f39544fd48e9549e34 \ + --hash=sha256:3fee0851639d06276e6b387f1c190eb9d7f06f7f53514e966b26bae46481ec90 \ + --hash=sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6 \ + --hash=sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba \ + --hash=sha256:4197fb2534ee05fd3e7afaab5d8bfd6c2e186f65ea7f9cd6a82809c887bd1285 \ + --hash=sha256:442de7530296ef5e188373a1ea5789a46ce90c4847e597856570439621d9c553 \ + --hash=sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d \ + --hash=sha256:452b899faa64f1805943ec1c0c9ebeaece01a1af83e130b69cdefeda180bb42c \ + --hash=sha256:45f93e6f75123f88d7f0cfd90f2d05f441b808562bf0bc01070a00f53f5028b5 \ + --hash=sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601 \ + --hash=sha256:4ddb1049fa0579d0cbd00503ad8c58b9ab34d1254c77bc6a5576d96ec7853dba \ + --hash=sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37 \ + --hash=sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f \ + --hash=sha256:5921d924aa5468c939d95c9814fa9f9b5935a6ff4e679e26aaf2951f74043512 \ + --hash=sha256:59c45e125140b2c4b33920d21d83681940ca29f0b83f8629ea1a2196dc8cfe6a \ + --hash=sha256:5aa0fc67ae19d7a64c3fe725dc9a1bb11f80e01f78289d05c6f62545affec438 \ + --hash=sha256:5d444858b9f07cefff6455b983aea9a67f7462ba1f6cbe4a21e8bf6791bf2153 \ + --hash=sha256:60fa43be34f78bebb27812ed90f1925ec99560b0fa1decdb7d12b84d857d31e9 \ + --hash=sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d \ + --hash=sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6 \ + --hash=sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f \ + --hash=sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534 \ + --hash=sha256:6605c604e6daa9e0d7f0a2137bdc47a2e93b59c60a65466353e37f8272f47c46 \ + --hash=sha256:66328dabea70b5ba7e53d94aa774b733cf66686535f3bc9250a7aab53a91caaf \ + --hash=sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f \ + --hash=sha256:6cdaefac66e8b8f30e37a9b4768a391e1f8a16a7526d5bc77a7928408ef68e93 \ + --hash=sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8 \ + --hash=sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f \ + --hash=sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1 \ + --hash=sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322 \ + --hash=sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f \ + --hash=sha256:71695772df6acea9f3c0e59e44ba8ac50c4f125217e84aab21074a1a55e7e5c9 \ + --hash=sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f \ + --hash=sha256:7d2de809c2ee3b888b59f995625385f74629707c9355e0ff856445cdcae682b7 \ + --hash=sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f \ + --hash=sha256:817ef43a0c0b4a77bd166dc9a09a555394105ff3374777ad41f453526e37f9cb \ + --hash=sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916 \ + --hash=sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec \ + --hash=sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9 \ + --hash=sha256:8ac6e5811ae2870953390452e3476694196f98d447573234592d30488147404d \ + --hash=sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679 \ + --hash=sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0 \ + --hash=sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192 \ + --hash=sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917 \ + --hash=sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c \ + --hash=sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d \ + --hash=sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338 \ + --hash=sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d \ + --hash=sha256:995e783eb0374c120f528f807443ad5a83a656a8624c467ea73781fc5f8a8304 \ + --hash=sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77 \ + --hash=sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba \ + --hash=sha256:a59f5448ba2ceccd06995c95ea59a7674a10de0810f2ce90c9006f3cbc044456 \ + --hash=sha256:a656ca105115f6b766bba324f23a67914d9c728dafec57638e2b92a9dcd76c62 \ + --hash=sha256:a6b5b39cc7e2998f968f05309e666103b53e2edd01df8dc51b90d734c0825444 \ + --hash=sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a \ + --hash=sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f \ + --hash=sha256:a8ffaeec5dfea5881d4c9d8913a32d10cfe3923495386106e4a24d45300ef79c \ + --hash=sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d \ + --hash=sha256:ac02dc29fd397608f8eb15ac1610ae2f2f0154b03f631e6d724d9e2ad4ee2c84 \ + --hash=sha256:af85529ae8d2a453feee4c780d9406a5e3b17cee0dd75c18bd31adcd584debc3 \ + --hash=sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe \ + --hash=sha256:b2142a376b40b6736dfc214fd2902409e9e3857eff554fed2d3c60f097e62a62 \ + --hash=sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8 \ + --hash=sha256:b2c3da8d93cf5db60e8858c17684c47d01fee6405e554fb55018dd85fc23b178 \ + --hash=sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0 \ + --hash=sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7 \ + --hash=sha256:b42f4d86b451c2f9d06ffb4f8bbc776e04df3ba070b9fe2657804b1b40277c48 \ + --hash=sha256:b738f7e648735714bbb82bdfd030203360cfeab7f6e8a34772b3c8c8b820568c \ + --hash=sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9 \ + --hash=sha256:b8f18914faec94132e5b91e69d76a5c1d7b0c73e2489ea8929c4aaa10b76bbf7 \ + --hash=sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048 \ + --hash=sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c \ + --hash=sha256:bc456d04db0515ce3320d714a1eac7a97774ff0849e7718b492d957da4631dd4 \ + --hash=sha256:bc532422ff26b304cfb62b328826bd995c96154ffd2bac4544f37dbb95ecaa8f \ + --hash=sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b \ + --hash=sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0 \ + --hash=sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564 \ + --hash=sha256:c54d83a2188a10ebdba573f16bd97135d06c9ef60c3dc495315c7a28c80a263f \ + --hash=sha256:c7d13103045de1bdd6fe5d61802565f1a3537d70cd3abf596aa0af62761921ee \ + --hash=sha256:cb233f9c95f83707dae461b12b720c1af9c28c2d19208e1be03387222151daf5 \ + --hash=sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62 \ + --hash=sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272 \ + --hash=sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9 \ + --hash=sha256:d4aec24d6b72ee457ec665344a29acb2d35937d5192faebe429ea02633151aad \ + --hash=sha256:d6690ec5ec1cce0385cb20896b16be35247ac8c2046e493d03232f1c2414d321 \ + --hash=sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a \ + --hash=sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312 \ + --hash=sha256:dacf3c64ef3f7440e3167aa4b49aa9e0fb99e0aa4f9ff03795640bf94531bcb0 \ + --hash=sha256:daf42de090d59db025af61ce6bdb2521f0f102ea0e6ea310f13c17610a97da4c \ + --hash=sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37 \ + --hash=sha256:de496365750cc472b4e7902a485d3f152ecf57bd3ba03ddd5578ed8ceb4c5964 \ + --hash=sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484 \ + --hash=sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e \ + --hash=sha256:e237b807d68a61fc3b1e845407e27e5eb8ef69bc93fe8505337c1acb4ee300b6 \ + --hash=sha256:e5867f2651016a3afd8dd2c8238baa66f1e2802f44bc17e236f547ace6647078 \ + --hash=sha256:e748d4cf8fef2526bb2a589a417eba0c8674e29ffcb570ce2ceca44f1e567bf6 \ + --hash=sha256:e77dd455b9a16bbd2a5036a63ddbd479c19572af81b624e79ef422f929eef388 \ + --hash=sha256:e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924 \ + --hash=sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2 \ + --hash=sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df \ + --hash=sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd \ + --hash=sha256:f2a50c3c1d11cad0ebebbac357a97b26aa79d2bcaf46f256551152aa85d3a4d1 \ + --hash=sha256:f2e3b1a6bb38de0bc713edd4d612969dd250ca8b724be8d460001a387507021c \ + --hash=sha256:f952dacaa552f3bb8834908dddd500ba7d508e6ea6eb8c52eb2d28f48ca06a31 \ + --hash=sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed \ + --hash=sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2 \ + --hash=sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092 \ + --hash=sha256:fe659f6b5d10fb5a17f00a50eb903eb277a71ee35df4615db573c069bcf967ac + # via + # -c src/backend/requirements.txt + # python3-saml + # xmlsec +markdown==3.10.2 \ + --hash=sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950 \ + --hash=sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36 + # via + # -c src/backend/requirements.txt + # django-markdownify +markupsafe==3.0.3 \ + --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ + --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \ + --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \ + --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \ + --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \ + --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \ + --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \ + --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \ + --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \ + --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \ + --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \ + --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \ + --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \ + --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \ + --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \ + --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \ + --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \ + --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \ + --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \ + --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \ + --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \ + --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \ + --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \ + --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \ + --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \ + --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \ + --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \ + --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \ + --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \ + --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \ + --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \ + --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \ + --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \ + --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \ + --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \ + --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \ + --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \ + --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \ + --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \ + --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \ + --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \ + --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \ + --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \ + --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \ + --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \ + --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \ + --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \ + --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \ + --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \ + --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \ + --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \ + --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \ + --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \ + --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \ + --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \ + --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \ + --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \ + --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \ + --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \ + --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \ + --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \ + --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \ + --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \ + --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \ + --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \ + --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \ + --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \ + --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \ + --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \ + --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \ + --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \ + --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \ + --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \ + --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \ + --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \ + --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \ + --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \ + --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \ + --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \ + --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \ + --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \ + --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \ + --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \ + --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \ + --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \ + --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \ + --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \ + --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ + --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 + # via + # -c src/backend/requirements.txt + # jinja2 +oauthlib==3.3.1 \ + --hash=sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9 \ + --hash=sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 + # via + # -c src/backend/requirements.txt + # django-allauth + # django-oauth-toolkit +openpyxl==3.1.5 \ + --hash=sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2 \ + --hash=sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050 + # via + # -c src/backend/requirements.txt + # tablib +opentelemetry-api==1.40.0 \ + --hash=sha256:159be641c0b04d11e9ecd576906462773eb97ae1b657730f0ecf64d32071569f \ + --hash=sha256:82dd69331ae74b06f6a874704be0cfaa49a1650e1537d4a813b86ecef7d0ecf9 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in + # opentelemetry-exporter-otlp-proto-grpc + # opentelemetry-exporter-otlp-proto-http + # opentelemetry-instrumentation + # opentelemetry-instrumentation-dbapi + # opentelemetry-instrumentation-django + # opentelemetry-instrumentation-psycopg + # opentelemetry-instrumentation-pymysql + # opentelemetry-instrumentation-redis + # opentelemetry-instrumentation-requests + # opentelemetry-instrumentation-sqlite3 + # opentelemetry-instrumentation-system-metrics + # opentelemetry-instrumentation-wsgi + # opentelemetry-sdk + # opentelemetry-semantic-conventions +opentelemetry-exporter-otlp==1.40.0 \ + --hash=sha256:48c87e539ec9afb30dc443775a1334cc5487de2f72a770a4c00b1610bf6c697d \ + --hash=sha256:7caa0870b95e2fcb59d64e16e2b639ecffb07771b6cd0000b5d12e5e4fef765a + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +opentelemetry-exporter-otlp-proto-common==1.40.0 \ + --hash=sha256:1cbee86a4064790b362a86601ee7934f368b81cd4cc2f2e163902a6e7818a0fa \ + --hash=sha256:7081ff453835a82417bf38dccf122c827c3cbc94f2079b03bba02a3165f25149 + # via + # -c src/backend/requirements.txt + # opentelemetry-exporter-otlp-proto-grpc + # opentelemetry-exporter-otlp-proto-http +opentelemetry-exporter-otlp-proto-grpc==1.40.0 \ + --hash=sha256:2aa0ca53483fe0cf6405087a7491472b70335bc5c7944378a0a8e72e86995c52 \ + --hash=sha256:bd4015183e40b635b3dab8da528b27161ba83bf4ef545776b196f0fb4ec47740 + # via + # -c src/backend/requirements.txt + # opentelemetry-exporter-otlp +opentelemetry-exporter-otlp-proto-http==1.40.0 \ + --hash=sha256:a8d1dab28f504c5d96577d6509f80a8150e44e8f45f82cdbe0e34c99ab040069 \ + --hash=sha256:db48f5e0f33217588bbc00274a31517ba830da576e59503507c839b38fa0869c + # via + # -c src/backend/requirements.txt + # opentelemetry-exporter-otlp +opentelemetry-instrumentation==0.61b0 \ + --hash=sha256:92a93a280e69788e8f88391247cc530fd81f16f2b011979d4d6398f805cfbc63 \ + --hash=sha256:cb21b48db738c9de196eba6b805b4ff9de3b7f187e4bbf9a466fa170514f1fc7 + # via + # -c src/backend/requirements.txt + # opentelemetry-instrumentation-dbapi + # opentelemetry-instrumentation-django + # opentelemetry-instrumentation-psycopg + # opentelemetry-instrumentation-pymysql + # opentelemetry-instrumentation-redis + # opentelemetry-instrumentation-requests + # opentelemetry-instrumentation-sqlite3 + # opentelemetry-instrumentation-system-metrics + # opentelemetry-instrumentation-wsgi +opentelemetry-instrumentation-dbapi==0.61b0 \ + --hash=sha256:02fa800682c1de87dcad0e59f2092b3b6fb8b8ea0636518f989e1166b418dcb9 \ + --hash=sha256:8f762c39c8edd20c6aef3282550a2cfbfec76c3f431bf5c36327dcf9ece2e5a0 + # via + # -c src/backend/requirements.txt + # opentelemetry-instrumentation-psycopg + # opentelemetry-instrumentation-pymysql + # opentelemetry-instrumentation-sqlite3 +opentelemetry-instrumentation-django==0.61b0 \ + --hash=sha256:26c1b0b325a9783d4a2f4df660ba05cf929c3eda2ae9b07916b649bb44e1c5b6 \ + --hash=sha256:9885154dc128578de0e6b5ce49e965c786f8ab071175bec005dcd454510be951 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +opentelemetry-instrumentation-psycopg==0.61b0 \ + --hash=sha256:74e9fed3802945f7ae335cffc30fd18cf58c34a4d0619315f799fa21eb5c74ff \ + --hash=sha256:a3e242cad56c0ad4f4f872017c73ce7e6c7012081dda6bd0d776c127fedc358a + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +opentelemetry-instrumentation-pymysql==0.61b0 \ + --hash=sha256:00aca55c3fd767ebe484affa2f0c2f47edd4095038b509c6aca1a4cfed78af15 \ + --hash=sha256:60ba66a806e4664308bd86fe45f329a6f3bb520c3e9759f68f379b7c9466047f + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +opentelemetry-instrumentation-redis==0.61b0 \ + --hash=sha256:8d4e850bbb5f8eeafa44c0eac3a007990c7125de187bc9c3659e29ff7e091172 \ + --hash=sha256:ae0fbb56be9a641e621d55b02a7d62977a2c77c5ee760addd79b9b266e46e523 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +opentelemetry-instrumentation-requests==0.61b0 \ + --hash=sha256:15f879ce8fb206bd7e6fdc61663ea63481040a845218c0cf42902ce70bd7e9d9 \ + --hash=sha256:cce19b379949fe637eb73ba39b02c57d2d0805447ca6d86534aa33fcb141f683 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +opentelemetry-instrumentation-sqlite3==0.61b0 \ + --hash=sha256:202a18e7f9d231bfa44771fdb068bff16f24a6fa5e424a0df4d9232b1a818693 \ + --hash=sha256:96d4f0fa35ba7ee9aa683aa17726cb358c8029cc7b3cf55668ccc77254c29ca5 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +opentelemetry-instrumentation-system-metrics==0.61b0 \ + --hash=sha256:3eb55f9a058797cf915946cbb7445e00b31316ac3e55050475792edf3367c321 \ + --hash=sha256:7d4fe3e0ce14e0e6eb18f5826100d6cc1af662e5a8ebc74e9b91fe23f192f3e8 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +opentelemetry-instrumentation-wsgi==0.61b0 \ + --hash=sha256:380f2ae61714e5303275a80b2e14c58571573cd1fddf496d8c39fb9551c5e532 \ + --hash=sha256:bd33b0824166f24134a3400648805e8d2e6a7951f070241294e8b8866611d7fa + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in + # opentelemetry-instrumentation-django +opentelemetry-proto==1.40.0 \ + --hash=sha256:03f639ca129ba513f5819810f5b1f42bcb371391405d99c168fe6937c62febcd \ + --hash=sha256:266c4385d88923a23d63e353e9761af0f47a6ed0d486979777fe4de59dc9b25f + # via + # -c src/backend/requirements.txt + # opentelemetry-exporter-otlp-proto-common + # opentelemetry-exporter-otlp-proto-grpc + # opentelemetry-exporter-otlp-proto-http +opentelemetry-sdk==1.40.0 \ + --hash=sha256:18e9f5ec20d859d268c7cb3c5198c8d105d073714db3de50b593b8c1345a48f2 \ + --hash=sha256:787d2154a71f4b3d81f20524a8ce061b7db667d24e46753f32a7bc48f1c1f3f1 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in + # opentelemetry-exporter-otlp-proto-grpc + # opentelemetry-exporter-otlp-proto-http +opentelemetry-semantic-conventions==0.61b0 \ + --hash=sha256:072f65473c5d7c6dc0355b27d6c9d1a679d63b6d4b4b16a9773062cb7e31192a \ + --hash=sha256:fa530a96be229795f8cef353739b618148b0fe2b4b3f005e60e262926c4d38e2 + # via + # -c src/backend/requirements.txt + # opentelemetry-instrumentation + # opentelemetry-instrumentation-dbapi + # opentelemetry-instrumentation-django + # opentelemetry-instrumentation-redis + # opentelemetry-instrumentation-requests + # opentelemetry-instrumentation-wsgi + # opentelemetry-sdk +opentelemetry-util-http==0.61b0 \ + --hash=sha256:1039cb891334ad2731affdf034d8fb8b48c239af9b6dd295e5fabd07f1c95572 \ + --hash=sha256:8e715e848233e9527ea47e275659ea60a57a75edf5206a3b937e236a6da5fc33 + # via + # -c src/backend/requirements.txt + # opentelemetry-instrumentation-django + # opentelemetry-instrumentation-requests + # opentelemetry-instrumentation-wsgi +packaging==26.0 \ + --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ + --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 + # via + # -c src/backend/requirements.txt + # gunicorn + # opentelemetry-instrumentation +paramiko==4.0.0 \ + --hash=sha256:0e20e00ac666503bf0b4eda3b6d833465a2b7aff2e2b3d79a8bba5ef144ee3b9 \ + --hash=sha256:6a25f07b380cc9c9a88d2b920ad37167ac4667f8d9886ccebd8f90f654b5d69f + # via + # -c src/backend/requirements.txt + # django-storages +pdf2image==1.17.0 \ + --hash=sha256:eaa959bc116b420dd7ec415fcae49b98100dda3dd18cd2fdfa86d09f112f6d57 \ + --hash=sha256:ecdd58d7afb810dffe21ef2b1bbc057ef434dabbac6c33778a38a3f7744a27e2 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +pillow==12.1.1 \ + --hash=sha256:02f84dfad02693676692746df05b89cf25597560db2857363a208e393429f5e9 \ + --hash=sha256:0330d233c1a0ead844fc097a7d16c0abff4c12e856c0b325f231820fee1f39da \ + --hash=sha256:03edcc34d688572014ff223c125a3f77fb08091e4607e7745002fc214070b35f \ + --hash=sha256:097690ba1f2efdeb165a20469d59d8bb03c55fb6621eb2041a060ae8ea3e9642 \ + --hash=sha256:178aa072084bd88ec759052feca8e56cbb14a60b39322b99a049e58090479713 \ + --hash=sha256:18e5bddd742a44b7e6b1e773ab5db102bd7a94c32555ba656e76d319d19c3850 \ + --hash=sha256:1a9b0ee305220b392e1124a764ee4265bd063e54a751a6b62eff69992f457fa9 \ + --hash=sha256:1f1625b72740fdda5d77b4def688eb8fd6490975d06b909fd19f13f391e077e0 \ + --hash=sha256:1f1be78ce9466a7ee64bfda57bdba0f7cc499d9794d518b854816c41bf0aa4e9 \ + --hash=sha256:1f90cff8aa76835cba5769f0b3121a22bd4eb9e6884cfe338216e557a9a548b8 \ + --hash=sha256:21329ec8c96c6e979cd0dfd29406c40c1d52521a90544463057d2aaa937d66a6 \ + --hash=sha256:2815a87ab27848db0321fb78c7f0b2c8649dee134b7f2b80c6a45c6831d75ccd \ + --hash=sha256:2c1fc0f2ca5f96a3c8407e41cca26a16e46b21060fe6d5b099d2cb01412222f5 \ + --hash=sha256:2e0c664be47252947d870ac0d327fea7e63985a08794758aa8af5b6cb6ec0c9c \ + --hash=sha256:339ffdcb7cbeaa08221cd401d517d4b1fe7a9ed5d400e4a8039719238620ca35 \ + --hash=sha256:344cf1e3dab3be4b1fa08e449323d98a2a3f819ad20f4b22e77a0ede31f0faa1 \ + --hash=sha256:36341d06738a9f66c8287cf8b876d24b18db9bd8740fa0672c74e259ad408cff \ + --hash=sha256:365b10bb9417dd4498c0e3b128018c4a624dc11c7b97d8cc54effe3b096f4c38 \ + --hash=sha256:3a5cbdcddad0af3da87cb16b60d23648bc3b51967eb07223e9fed77a82b457c4 \ + --hash=sha256:417423db963cb4be8bac3fc1204fe61610f6abeed1580a7a2cbb2fbda20f12af \ + --hash=sha256:42fc1f4677106188ad9a55562bbade416f8b55456f522430fadab3cef7cd4e60 \ + --hash=sha256:44ce27545b6efcf0fdbdceb31c9a5bdea9333e664cda58a7e674bb74608b3986 \ + --hash=sha256:472a8d7ded663e6162dafdf20015c486a7009483ca671cece7a9279b512fcb13 \ + --hash=sha256:47b94983da0c642de92ced1702c5b6c292a84bd3a8e1d1702ff923f183594717 \ + --hash=sha256:495c302af3aad1ca67420ddd5c7bd480c8867ad173528767d906428057a11f0e \ + --hash=sha256:4ceb838d4bd9dab43e06c363cab2eebf63846d6a4aeaea283bbdfd8f1a8ed58b \ + --hash=sha256:50480dcd74fa63b8e78235957d302d98d98d82ccbfac4c7e12108ba9ecbdba15 \ + --hash=sha256:518a48c2aab7ce596d3bf79d0e275661b846e86e4d0e7dec34712c30fe07f02a \ + --hash=sha256:559b38da23606e68681337ad74622c4dbba02254fc9cb4488a305dd5975c7eeb \ + --hash=sha256:578510d88c6229d735855e1f278aa305270438d36a05031dfaae5067cc8eb04d \ + --hash=sha256:597bd9c8419bc7c6af5604e55847789b69123bbe25d65cc6ad3012b4f3c98d8b \ + --hash=sha256:5a8eb7ed8d4198bccbd07058416eeec51686b498e784eda166395a23eb99138e \ + --hash=sha256:5c0dd1636633e7e6a0afe7bf6a51a14992b7f8e60de5789018ebbdfae55b040a \ + --hash=sha256:5cb1785d97b0c3d1d1a16bc1d710c4a0049daefc4935f3a8f31f827f4d3d2e7f \ + --hash=sha256:5d1f9575a12bed9e9eedd9a4972834b08c97a352bd17955ccdebfeca5913fa0a \ + --hash=sha256:5d8c41325b382c07799a3682c1c258469ea2ff97103c53717b7893862d0c98ce \ + --hash=sha256:5dae5f21afb91322f2ff791895ddd8889e5e947ff59f71b46041c8ce6db790bc \ + --hash=sha256:600fd103672b925fe62ed08e0d874ea34d692474df6f4bf7ebe148b30f89f39f \ + --hash=sha256:6408a7b064595afcab0a49393a413732a35788f2a5092fdc6266952ed67de586 \ + --hash=sha256:652a2c9ccfb556235b2b501a3a7cf3742148cd22e04b5625c5fe057ea3e3191f \ + --hash=sha256:665e1b916b043cef294bc54d47bf02d87e13f769bc4bc5fa225a24b3a6c5aca9 \ + --hash=sha256:691ab2ac363b8217f7d31b3497108fb1f50faab2f75dfb03284ec2f217e87bf8 \ + --hash=sha256:6c52f062424c523d6c4db85518774cc3d50f5539dd6eed32b8f6229b26f24d40 \ + --hash=sha256:6c6db3b84c87d48d0088943bf33440e0c42370b99b1c2a7989216f7b42eede60 \ + --hash=sha256:7311c0a0dcadb89b36b7025dfd8326ecfa36964e29913074d47382706e516a7c \ + --hash=sha256:7aac39bcf8d4770d089588a2e1dd111cbaa42df5a94be3114222057d68336bd0 \ + --hash=sha256:7b03048319bfc6170e93bd60728a1af51d3dd7704935feb228c4d4faab35d334 \ + --hash=sha256:7e7976bf1910a8116b523b9f9f58bf410f3e8aa330cd9a2bb2953f9266ab49af \ + --hash=sha256:8089c852a56c2966cf18835db62d9b34fef7ba74c726ad943928d494fa7f4735 \ + --hash=sha256:86172b0831b82ce4f7877f280055892b31179e1576aa00d0df3bb1bbf8c3e524 \ + --hash=sha256:89b54027a766529136a06cfebeecb3a04900397a3590fd252160b888479517bf \ + --hash=sha256:89c7e895002bbe49cdc5426150377cbbc04767d7547ed145473f496dfa40408b \ + --hash=sha256:8b7e5304e34942bf62e15184219a7b5ad4ff7f3bb5cca4d984f37df1a0e1aee2 \ + --hash=sha256:8fd420ef0c52c88b5a035a0886f367748c72147b2b8f384c9d12656678dfdfa9 \ + --hash=sha256:98edb152429ab62a1818039744d8fbb3ccab98a7c29fc3d5fcef158f3f1f68b7 \ + --hash=sha256:99c1506ea77c11531d75e3a412832a13a71c7ebc8192ab9e4b2e355555920e3e \ + --hash=sha256:9ad8fa5937ab05218e2b6a4cff30295ad35afd2f83ac592e68c0d871bb0fdbc4 \ + --hash=sha256:9f51079765661884a486727f0729d29054242f74b46186026582b4e4769918e4 \ + --hash=sha256:a003d7422449f6d1e3a34e3dd4110c22148336918ddbfc6a32581cd54b2e0b2b \ + --hash=sha256:a0b1cd6232e2b618adcc54d9882e4e662a089d5768cd188f7c245b4c8c44a397 \ + --hash=sha256:a285e3eb7a5a45a2ff504e31f4a8d1b12ef62e84e5411c6804a42197c1cf586c \ + --hash=sha256:a37691702ed687799de29a518d63d4682d9016932db66d4e90c345831b02fb4e \ + --hash=sha256:a550ae29b95c6dc13cf69e2c9dc5747f814c54eeb2e32d683e5e93af56caa029 \ + --hash=sha256:ab174cd7d29a62dd139c44bf74b698039328f45cb03b4596c43473a46656b2f3 \ + --hash=sha256:ab323b787d6e18b3d91a72fc99b1a2c28651e4358749842b8f8dfacd28ef2052 \ + --hash=sha256:adebb5bee0f0af4909c30db0d890c773d1a92ffe83da908e2e9e720f8edf3984 \ + --hash=sha256:aee2810642b2898bb187ced9b349e95d2a7272930796e022efaf12e99dccd293 \ + --hash=sha256:af9a332e572978f0218686636610555ae3defd1633597be015ed50289a03c523 \ + --hash=sha256:b574c51cf7d5d62e9be37ba446224b59a2da26dc4c1bb2ecbe936a4fb1a7cb7f \ + --hash=sha256:b66e95d05ba806247aaa1561f080abc7975daf715c30780ff92a20e4ec546e1b \ + --hash=sha256:b81b5e3511211631b3f672a595e3221252c90af017e399056d0faabb9538aa80 \ + --hash=sha256:b957b71c6b2387610f556a7eb0828afbe40b4a98036fc0d2acfa5a44a0c2036f \ + --hash=sha256:bb66b7cc26f50977108790e2456b7921e773f23db5630261102233eb355a3b79 \ + --hash=sha256:c6008de247150668a705a6338156efb92334113421ceecf7438a12c9a12dab23 \ + --hash=sha256:c7697918b5be27424e9ce568193efd13d925c4481dd364e43f5dff72d33e10f8 \ + --hash=sha256:cb9bb857b2d057c6dfc72ac5f3b44836924ba15721882ef103cecb40d002d80e \ + --hash=sha256:cc7d296b5ea4d29e6570dabeaed58d31c3fea35a633a69679fb03d7664f43fb3 \ + --hash=sha256:d242e8ac078781f1de88bf823d70c1a9b3c7950a44cdf4b7c012e22ccbcd8e4e \ + --hash=sha256:d2912fd8114fc5545aa3a4b5576512f64c55a03f3ebcca4c10194d593d43ea36 \ + --hash=sha256:d470ab1178551dd17fdba0fef463359c41aaa613cdcd7ff8373f54be629f9f8f \ + --hash=sha256:d4ce8e329c93845720cd2014659ca67eac35f6433fd3050393d85f3ecef0dad5 \ + --hash=sha256:d6e4571eedf43af33d0fc233a382a76e849badbccdf1ac438841308652a08e1f \ + --hash=sha256:e65498daf4b583091ccbb2556c7000abf0f3349fcd57ef7adc9a84a394ed29f6 \ + --hash=sha256:e879bb6cd5c73848ef3b2b48b8af9ff08c5b71ecda8048b7dd22d8a33f60be32 \ + --hash=sha256:e9e8064fb1cc019296958595f6db671fba95209e3ceb0c4734c9baf97de04b20 \ + --hash=sha256:f7ed2c6543bad5a7d5530eb9e78c53132f93dfa44a28492db88b41cdab885202 \ + --hash=sha256:f95c00d5d6700b2b890479664a06e754974848afaae5e21beb4d83c106923fd0 \ + --hash=sha256:f975aa7ef9684ce7e2c18a3aa8f8e2106ce1e46b94ab713d156b2898811651d3 \ + --hash=sha256:fbfa2a7c10cc2623f412753cddf391c7f971c52ca40a3f65dc5039b2939e8563 \ + --hash=sha256:fc354a04072b765eccf2204f588a7a532c9511e8b9c7f900e1b64e3e33487090 \ + --hash=sha256:fc44ef1f3de4f45b50ccf9136999d71abb99dca7706bc75d222ed350b9fd2289 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in + # django-stdimage + # pdf2image + # python-barcode + # qrcode + # weasyprint +pint==0.25.2 \ + --hash=sha256:85a45d1da8fe9c9f7477fed8aef59ad2b939af3d6611507e1a9cbdacdcd3450a \ + --hash=sha256:ca35ab1d8eeeb6f7d9942b3cb5f34ca42b61cdd5fb3eae79531553dcca04dda7 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +pip-licenses==5.5.1 \ + --hash=sha256:7df370e6e5024a3f7449abf8e4321ef868ba9a795698ad24ab6851f3e7fc65a7 \ + --hash=sha256:ed5e229a93760e529cfa7edaec6630b5a2cd3874c1bddb8019e5f18a723fdead + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +platformdirs==4.9.4 \ + --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ + --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 + # via + # -c src/backend/requirements.txt + # pint +ppf-datamatrix==0.2 \ + --hash=sha256:819be65eae444b760e178d5761853f78f8e5fca14fec2809b5e3369978fa9244 \ + --hash=sha256:8f034d9c90e408f60f8b10a273baab81014c9a81c983dc1ebdc31d4ca5ac5582 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +prettytable==3.17.0 \ + --hash=sha256:59f2590776527f3c9e8cf9fe7b66dd215837cca96a9c39567414cbc632e8ddb0 \ + --hash=sha256:aad69b294ddbe3e1f95ef8886a060ed1666a0b83018bbf56295f6f226c43d287 + # via + # -c src/backend/requirements.txt + # pip-licenses +protobuf==6.33.5 \ + --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ + --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ + --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ + --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ + --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ + --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ + --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ + --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ + --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ + --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b + # via + # -c src/backend/requirements.txt + # googleapis-common-protos + # opentelemetry-proto +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 + # via + # -c src/backend/requirements.txt + # opentelemetry-instrumentation-system-metrics +py-moneyed==3.0 \ + --hash=sha256:4906f0f02cf2b91edba2e156f2d4e9a78f224059ab8c8fa2ff26230c75d894e8 \ + --hash=sha256:9583a14f99c05b46196193d8185206e9b73c8439fc8a5eee9cfc7e733676d9bb + # via + # -c src/backend/requirements.txt + # django-money +pycparser==3.0 \ + --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ + --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 + # via + # -c src/backend/requirements.txt + # cffi +pydyf==0.12.1 \ + --hash=sha256:ea25b4e1fe7911195cb57067560daaa266639184e8335365cc3ee5214e7eaadc \ + --hash=sha256:fbd7e759541ac725c29c506612003de393249b94310ea78ae44cb1d04b220095 + # via + # -c src/backend/requirements.txt + # weasyprint +pyjwt[crypto]==2.12.1 \ + --hash=sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c \ + --hash=sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b + # via + # -c src/backend/requirements.txt + # django-allauth + # djangorestframework-simplejwt +pynacl==1.6.2 \ + --hash=sha256:018494d6d696ae03c7e656e5e74cdfd8ea1326962cc401bcf018f1ed8436811c \ + --hash=sha256:04316d1fc625d860b6c162fff704eb8426b1a8bcd3abacea11142cbd99a6b574 \ + --hash=sha256:22de65bb9010a725b0dac248f353bb072969c94fa8d6b1f34b87d7953cf7bbe4 \ + --hash=sha256:26bfcd00dcf2cf160f122186af731ae30ab120c18e8375684ec2670dccd28130 \ + --hash=sha256:2fef529ef3ee487ad8113d287a593fa26f48ee3620d92ecc6f1d09ea38e0709b \ + --hash=sha256:320ef68a41c87547c91a8b58903c9caa641ab01e8512ce291085b5fe2fcb7590 \ + --hash=sha256:3bffb6d0f6becacb6526f8f42adfb5efb26337056ee0831fb9a7044d1a964444 \ + --hash=sha256:44081faff368d6c5553ccf55322ef2819abb40e25afaec7e740f159f74813634 \ + --hash=sha256:46065496ab748469cdd999246d17e301b2c24ae2fdf739132e580a0e94c94a87 \ + --hash=sha256:5811c72b473b2f38f7e2a3dc4f8642e3a3e9b5e7317266e4ced1fba85cae41aa \ + --hash=sha256:622d7b07cc5c02c666795792931b50c91f3ce3c2649762efb1ef0d5684c81594 \ + --hash=sha256:62985f233210dee6548c223301b6c25440852e13d59a8b81490203c3227c5ba0 \ + --hash=sha256:68be3a09455743ff9505491220b64440ced8973fe930f270c8e07ccfa25b1f9e \ + --hash=sha256:834a43af110f743a754448463e8fd61259cd4ab5bbedcf70f9dabad1d28a394c \ + --hash=sha256:8845c0631c0be43abdd865511c41eab235e0be69c81dc66a50911594198679b0 \ + --hash=sha256:8a66d6fb6ae7661c58995f9c6435bda2b1e68b54b598a6a10247bfcdadac996c \ + --hash=sha256:8b097553b380236d51ed11356c953bf8ce36a29a3e596e934ecabe76c985a577 \ + --hash=sha256:a84bf1c20339d06dc0c85d9aea9637a24f718f375d861b2668b2f9f96fa51145 \ + --hash=sha256:a9f9932d8d2811ce1a8ffa79dcbdf3970e7355b5c8eb0c1a881a57e7f7d96e88 \ + --hash=sha256:bc4a36b28dd72fb4845e5d8f9760610588a96d5a51f01d84d8c6ff9849968c14 \ + --hash=sha256:c8a231e36ec2cab018c4ad4358c386e36eede0319a0c41fed24f840b1dac59f6 \ + --hash=sha256:c949ea47e4206af7c8f604b8278093b674f7c79ed0d4719cc836902bf4517465 \ + --hash=sha256:d071c6a9a4c94d79eb665db4ce5cedc537faf74f2355e4d502591d850d3913c0 \ + --hash=sha256:d29bfe37e20e015a7d8b23cfc8bd6aa7909c92a1b8f41ee416bbb3e79ef182b2 \ + --hash=sha256:fe9847ca47d287af41e82be1dd5e23023d3c31a951da134121ab02e42ac218c9 + # via + # -c src/backend/requirements.txt + # paramiko +pypdf==6.9.1 \ + --hash=sha256:ae052407d33d34de0c86c5c729be6d51010bf36e03035a8f23ab449bca52377d \ + --hash=sha256:f35a6a022348fae47e092a908339a8f3dc993510c026bb39a96718fc7185e89f + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +pyphen==0.17.2 \ + --hash=sha256:3a07fb017cb2341e1d9ff31b8634efb1ae4dc4b130468c7c39dd3d32e7c3affd \ + --hash=sha256:f60647a9c9b30ec6c59910097af82bc5dd2d36576b918e44148d8b07ef3b4aa3 + # via + # -c src/backend/requirements.txt + # weasyprint +python-barcode[images]==0.16.1 \ + --hash=sha256:5776567478c9a0dae473374bb86631ba0b5ea99aaf302763b364e367ac51f367 \ + --hash=sha256:665ed09516b0088b5593061c5ac8662caa0b08d56bdad328388b1cab39939ac5 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 + # via + # -c src/backend/requirements.txt + # botocore + # django-recurrence + # icalendar +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +python-fsutil==0.16.0 \ + --hash=sha256:a60e16bad77e3f00c3dca95433209c823bc45e0ae4158e52969002f3c7957a18 \ + --hash=sha256:dc957a3541215baa935f66f6f15ceb9a8b7f803919c3d99fa57c818fc545f288 + # via + # -c src/backend/requirements.txt + # django-maintenance-mode +python-ipware==3.0.0 \ + --hash=sha256:9117b1c4dddcb5d5ca49e6a9617de2fc66aec2ef35394563ac4eecabdf58c062 \ + --hash=sha256:fc936e6e7ec9fcc107f9315df40658f468ac72f739482a707181742882e36b60 + # via + # -c src/backend/requirements.txt + # django-ipware +python3-openid==3.2.0 \ + --hash=sha256:33fbf6928f401e0b790151ed2b5290b02545e8775f982485205a066f874aaeaf \ + --hash=sha256:6626f771e0417486701e0b4daff762e7212e820ca5b29fcc0d05f6f8736dfa6b + # via + # -c src/backend/requirements.txt + # django-allauth +python3-saml==1.16.0 \ + --hash=sha256:20b97d11b04f01ee22e98f4a38242e2fea2e28fbc7fbc9bdd57cab5ac7fc2d0d \ + --hash=sha256:97c9669aecabc283c6e5fb4eb264f446b6e006f5267d01c9734f9d8bffdac133 \ + --hash=sha256:c49097863c278ff669a337a96c46dc1f25d16307b4bb2679d2d1733cc4f5176a + # via + # -c src/backend/requirements.txt + # django-allauth +pyyaml==6.0.3 \ + --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ + --hash=sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a \ + --hash=sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3 \ + --hash=sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956 \ + --hash=sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6 \ + --hash=sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c \ + --hash=sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65 \ + --hash=sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a \ + --hash=sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0 \ + --hash=sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b \ + --hash=sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1 \ + --hash=sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6 \ + --hash=sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7 \ + --hash=sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e \ + --hash=sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007 \ + --hash=sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 \ + --hash=sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4 \ + --hash=sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9 \ + --hash=sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295 \ + --hash=sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea \ + --hash=sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0 \ + --hash=sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e \ + --hash=sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac \ + --hash=sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9 \ + --hash=sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7 \ + --hash=sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35 \ + --hash=sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb \ + --hash=sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b \ + --hash=sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69 \ + --hash=sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5 \ + --hash=sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b \ + --hash=sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c \ + --hash=sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369 \ + --hash=sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd \ + --hash=sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824 \ + --hash=sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198 \ + --hash=sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065 \ + --hash=sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c \ + --hash=sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c \ + --hash=sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764 \ + --hash=sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196 \ + --hash=sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b \ + --hash=sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00 \ + --hash=sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac \ + --hash=sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8 \ + --hash=sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e \ + --hash=sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28 \ + --hash=sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3 \ + --hash=sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5 \ + --hash=sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4 \ + --hash=sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b \ + --hash=sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf \ + --hash=sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5 \ + --hash=sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702 \ + --hash=sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8 \ + --hash=sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788 \ + --hash=sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da \ + --hash=sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d \ + --hash=sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc \ + --hash=sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c \ + --hash=sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba \ + --hash=sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f \ + --hash=sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917 \ + --hash=sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 \ + --hash=sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26 \ + --hash=sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f \ + --hash=sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b \ + --hash=sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be \ + --hash=sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c \ + --hash=sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3 \ + --hash=sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6 \ + --hash=sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926 \ + --hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in + # drf-spectacular + # tablib +qrcode[pil]==8.2 \ + --hash=sha256:16e64e0716c14960108e85d853062c9e8bba5ca8252c0b4d0231b9df4060ff4f \ + --hash=sha256:35c3f2a4172b33136ab9f6b3ef1c00260dd2f66f858f24d88418a015f446506c + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in + # django-allauth +rapidfuzz==3.14.3 \ + --hash=sha256:010e12e2411a4854b0434f920e72b717c43f8ec48d57e7affe5c42ecfa05dd0e \ + --hash=sha256:02821366d928e68ddcb567fed8723dad7ea3a979fada6283e6914d5858674850 \ + --hash=sha256:07aa0b5d8863e3151e05026a28e0d924accf0a7a3b605da978f0359bb804df43 \ + --hash=sha256:0e38828d1381a0cceb8a4831212b2f673d46f5129a1897b0451c883eaf4a1747 \ + --hash=sha256:152555187360978119e98ce3e8263d70dd0c40c7541193fc302e9b7125cf8f58 \ + --hash=sha256:1704fc70d214294e554a2421b473779bcdeef715881c5e927dc0f11e1692a0ff \ + --hash=sha256:1b7ef2f4b8583a744338a18f12c69693c194fb6777c0e9ada98cd4d9e8f09d10 \ + --hash=sha256:1b86daa7419b5e8b180690efd1fdbac43ff19230803282521c5b5a9c83977655 \ + --hash=sha256:1d83b8b712fa37e06d59f29a4b49e2e9e8635e908fbc21552fe4d1163db9d2a1 \ + --hash=sha256:1e6eefec45625c634926a9fd46c9e4f31118ac8f3156fff9494422cee45207e6 \ + --hash=sha256:1ec0c8c0c3d4f97ced46b2e191e883f8c82dbbf6d5ebc1842366d7eff13cd5a6 \ + --hash=sha256:1f1925619627f8798f8c3a391d81071336942e5fe8467bc3c567f982e7ce2897 \ + --hash=sha256:1faa0f8f76ba75fd7b142c984947c280ef6558b5067af2ae9b8729b0a0f99ede \ + --hash=sha256:2491937177868bc4b1e469087601d53f925e8d270ccc21e07404b4b5814b7b5f \ + --hash=sha256:2dc37bc20272f388b8c3a4eba4febc6e77e50a8f450c472def4751e7678f55e4 \ + --hash=sha256:32eeafa3abce138bb725550c0e228fc7eaeec7059aa8093d9cbbec2b58c2371a \ + --hash=sha256:33a325ed0e8e1aa20c3e75f8ab057a7b248fdea7843c2a19ade0008906c14af0 \ + --hash=sha256:33da4bbaf44e9755b0ce192597f3bde7372fe2e381ab305f41b707a95ac57aa7 \ + --hash=sha256:37d3c653af15cd88592633e942f5407cb4c64184efab163c40fcebad05f25141 \ + --hash=sha256:3fecce764cf5a991ee2195a844196da840aba72029b2612f95ac68a8b74946bf \ + --hash=sha256:43d0305c36f504232f18ea04e55f2059bb89f169d3119c4ea96a0e15b59e2a91 \ + --hash=sha256:43e38c1305cffae8472572a0584d4ffc2f130865586a81038ca3965301f7c97c \ + --hash=sha256:442125473b247227d3f2de807a11da6c08ccf536572d1be943f8e262bae7e4ea \ + --hash=sha256:442cba39957a008dfc5bdef21a9c3f4379e30ffb4e41b8555dbaf4887eca9300 \ + --hash=sha256:489ce98a895c98cad284f0a47960c3e264c724cb4cfd47a1430fa091c0c25204 \ + --hash=sha256:4ad73afb688b36864a8d9b7344a9cf6da186c471e5790cbf541a635ee0f457f2 \ + --hash=sha256:4b39921df948388a863f0e267edf2c36302983459b021ab928d4b801cbe6a421 \ + --hash=sha256:4e49c9e992bc5fc873bd0fff7ef16a4405130ec42f2ce3d2b735ba5d3d4eb70f \ + --hash=sha256:52619d25a09546b8db078981ca88939d72caa6b8701edd8b22e16482a38e799f \ + --hash=sha256:54fa03062124e73086dae66a3451c553c1e20a39c077fd704dc7154092c34c63 \ + --hash=sha256:56fefb4382bb12250f164250240b9dd7772e41c5c8ae976fd598a32292449cc5 \ + --hash=sha256:576e4b9012a67e0bf54fccb69a7b6c94d4e86a9540a62f1a5144977359133583 \ + --hash=sha256:57f878330c8d361b2ce76cebb8e3e1dc827293b6abf404e67d53260d27b5d941 \ + --hash=sha256:5cfc3d57abd83c734d1714ec39c88a34dd69c85474918ebc21296f1e61eb5ca8 \ + --hash=sha256:656e52b054d5b5c2524169240e50cfa080b04b1c613c5f90a2465e84888d6f15 \ + --hash=sha256:685c93ea961d135893b5984a5a9851637d23767feabe414ec974f43babbd8226 \ + --hash=sha256:6a014ba09657abfcfeed64b7d09407acb29af436d7fc075b23a298a7e4a6b41c \ + --hash=sha256:6c5f545f454871e6af05753a0172849c82feaf0f521c5ca62ba09e1b382d6382 \ + --hash=sha256:6de00eb84c71476af7d3110cf25d8fe7c792d7f5fa86764ef0b4ca97e78ca3ed \ + --hash=sha256:73b07566bc7e010e7b5bd490fb04bb312e820970180df6b5655e9e6224c137db \ + --hash=sha256:769f31c60cd79420188fcdb3c823227fc4a6deb35cafec9d14045c7f6743acae \ + --hash=sha256:7ba009977601d8b0828bfac9a110b195b3e4e79b350dcfa48c11269a9f1918a0 \ + --hash=sha256:7ccbf68100c170e9a0581accbe9291850936711548c6688ce3bfb897b8c589ad \ + --hash=sha256:7cf174b52cb3ef5d49e45d0a1133b7e7d0ecf770ed01f97ae9962c5c91d97d23 \ + --hash=sha256:7d9af908c2f371bfb9c985bd134e295038e3031e666e4b2ade1e7cb7f5af2f1a \ + --hash=sha256:834d1e818005ed0d4ae38f6b87b86fad9b0a74085467ece0727d20e15077c094 \ + --hash=sha256:8383b6d0d92f6cd008f3c9216535be215a064b2cc890398a678b56e6d280cb63 \ + --hash=sha256:89acb8cbb52904f763e5ac238083b9fc193bed8d1f03c80568b20e4cef43a519 \ + --hash=sha256:948b00e8476a91f510dd1ec07272efc7d78c275d83b630455559671d4e33b678 \ + --hash=sha256:9ec02e62ae765a318d6de38df609c57fc6dacc65c0ed1fd489036834fd8a620c \ + --hash=sha256:a0a28add871425c2fe94358c6300bbeb0bc2ed828ca003420ac6825408f5a424 \ + --hash=sha256:a2135b138bcdcb4c3742d417f215ac2d8c2b87bde15b0feede231ae95f09ec41 \ + --hash=sha256:adb44d996fc610c7da8c5048775b21db60dd63b1548f078e95858c05c86876a3 \ + --hash=sha256:b5100fd6bcee4d27f28f4e0a1c6b5127bc8ba7c2a9959cad9eab0bf4a7ab3329 \ + --hash=sha256:b9fcd4d751a4fffa17aed1dde41647923c72c74af02459ad1222e3b0022da3a1 \ + --hash=sha256:beda6aa9bc44d1d81242e7b291b446be352d3451f8217fcb068fc2933927d53b \ + --hash=sha256:c5fb2d978a601820d2cfd111e2c221a9a7bfdf84b41a3ccbb96ceef29f2f1ac7 \ + --hash=sha256:c71ce6d4231e5ef2e33caa952bfe671cb9fd42e2afb11952df9fad41d5c821f9 \ + --hash=sha256:c7bd1816db05d6c5ffb3a4df0a2b7b56fb8c81ef584d08e37058afa217da91b1 \ + --hash=sha256:c7e40c0a0af02ad6e57e89f62bef8604f55a04ecae90b0ceeda591bbf5923317 \ + --hash=sha256:cc594bbcd3c62f647dfac66800f307beaee56b22aaba1c005e9c4c40ed733923 \ + --hash=sha256:cc65e72790ddfd310c2c8912b45106e3800fefe160b0c2ef4d6b6fec4e826457 \ + --hash=sha256:cec3c0da88562727dd5a5a364bd9efeb535400ff0bfb1443156dd139a1dd7b50 \ + --hash=sha256:cfe8df315ab4e6db4e1be72c5170f8e66021acde22cd2f9d04d2058a9fd8162e \ + --hash=sha256:d1fa009f8b1100e4880868137e7bf0501422898f7674f2adcd85d5a67f041296 \ + --hash=sha256:d7843a1abf0091773a530636fdd2a49a41bcae22f9910b86b4f903e76ddc82dc \ + --hash=sha256:da2a007434323904719158e50f3076a4dadb176ce43df28ed14610c773cc9825 \ + --hash=sha256:dbcb726064b12f356bf10fffdb6db4b6dce5390b23627c08652b3f6e49aa56ae \ + --hash=sha256:dc8c07801df5206b81ed6bd6c35cb520cf9b6c64b9b0d19d699f8633dc942897 \ + --hash=sha256:dea2d113e260a5da0c4003e0a5e9fdf24a9dc2bb9eaa43abd030a1e46ce7837d \ + --hash=sha256:dea97ac3ca18cd3ba8f3d04b5c1fe4aa60e58e8d9b7793d3bd595fdb04128d7a \ + --hash=sha256:dee362e7e79bae940a5e2b3f6d09c6554db6a4e301cc68343886c08be99844f1 \ + --hash=sha256:e195a77d06c03c98b3fc06b8a28576ba824392ce40de8c708f96ce04849a052e \ + --hash=sha256:e6b5e3036976f0fde888687d91be86d81f9ac5f7b02e218913c38285b756be6c \ + --hash=sha256:e6c31a4aa68cfa75d7eede8b0ed24b9e458447db604c2db53f358be9843d81d3 \ + --hash=sha256:e805e52322ae29aa945baf7168b6c898120fbc16d2b8f940b658a5e9e3999253 \ + --hash=sha256:ea188aa00e9bcae8c8411f006a5f2f06c4607a02f24eab0d8dc58566aa911f35 \ + --hash=sha256:ecd7453e02cf072258c3a6b8e930230d789d5d46cc849503729f9ce475d0e785 \ + --hash=sha256:ef6bf930b947bd0735c550683939a032090f1d688dfd8861d6b45307b96fd5c5 \ + --hash=sha256:f3d15d8527e2b293e38ce6e437631af0708df29eafd7c9fc48210854c94472f9 \ + --hash=sha256:f3eb0ff3b75d6fdccd40b55e7414bb859a1cda77c52762c9c82b85569f5088e7 \ + --hash=sha256:fa7c8f26f009f8c673fbfb443792f0cf8cf50c4e18121ff1e285b5e08a94fbdb \ + --hash=sha256:fce3152f94afcfd12f3dd8cf51e48fa606e3cb56719bccebe3b401f43d0714f9 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +redis==7.3.0 \ + --hash=sha256:4d1b768aafcf41b01022410b3cc4f15a07d9b3d6fe0c66fc967da2c88e551034 \ + --hash=sha256:9d4fcb002a12a5e3c3fbe005d59c48a2cc231f87fbb2f6b70c2d89bb64fec364 + # via + # -c src/backend/requirements.txt + # django-redis +referencing==0.37.0 \ + --hash=sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 \ + --hash=sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8 + # via + # -c src/backend/requirements.txt + # jsonschema + # jsonschema-specifications +requests==2.32.5 \ + --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ + --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf + # via + # -c src/backend/requirements.txt + # django-allauth + # django-anymail + # django-oauth-toolkit + # opentelemetry-exporter-otlp-proto-http +rpds-py==0.30.0 \ + --hash=sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f \ + --hash=sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136 \ + --hash=sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3 \ + --hash=sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7 \ + --hash=sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65 \ + --hash=sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4 \ + --hash=sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169 \ + --hash=sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf \ + --hash=sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4 \ + --hash=sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2 \ + --hash=sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c \ + --hash=sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4 \ + --hash=sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3 \ + --hash=sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6 \ + --hash=sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7 \ + --hash=sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89 \ + --hash=sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85 \ + --hash=sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6 \ + --hash=sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa \ + --hash=sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb \ + --hash=sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6 \ + --hash=sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87 \ + --hash=sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856 \ + --hash=sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4 \ + --hash=sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f \ + --hash=sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53 \ + --hash=sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229 \ + --hash=sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad \ + --hash=sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23 \ + --hash=sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db \ + --hash=sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038 \ + --hash=sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27 \ + --hash=sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00 \ + --hash=sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18 \ + --hash=sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083 \ + --hash=sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c \ + --hash=sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738 \ + --hash=sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898 \ + --hash=sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e \ + --hash=sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7 \ + --hash=sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08 \ + --hash=sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6 \ + --hash=sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551 \ + --hash=sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e \ + --hash=sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288 \ + --hash=sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df \ + --hash=sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0 \ + --hash=sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2 \ + --hash=sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05 \ + --hash=sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0 \ + --hash=sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464 \ + --hash=sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5 \ + --hash=sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404 \ + --hash=sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7 \ + --hash=sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139 \ + --hash=sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394 \ + --hash=sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb \ + --hash=sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15 \ + --hash=sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff \ + --hash=sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed \ + --hash=sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6 \ + --hash=sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e \ + --hash=sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95 \ + --hash=sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d \ + --hash=sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950 \ + --hash=sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3 \ + --hash=sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5 \ + --hash=sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97 \ + --hash=sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e \ + --hash=sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e \ + --hash=sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b \ + --hash=sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd \ + --hash=sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad \ + --hash=sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8 \ + --hash=sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425 \ + --hash=sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221 \ + --hash=sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d \ + --hash=sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825 \ + --hash=sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51 \ + --hash=sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e \ + --hash=sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f \ + --hash=sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8 \ + --hash=sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f \ + --hash=sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d \ + --hash=sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07 \ + --hash=sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877 \ + --hash=sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31 \ + --hash=sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58 \ + --hash=sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94 \ + --hash=sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28 \ + --hash=sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000 \ + --hash=sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1 \ + --hash=sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1 \ + --hash=sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7 \ + --hash=sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7 \ + --hash=sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40 \ + --hash=sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d \ + --hash=sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0 \ + --hash=sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84 \ + --hash=sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f \ + --hash=sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a \ + --hash=sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7 \ + --hash=sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419 \ + --hash=sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8 \ + --hash=sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a \ + --hash=sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9 \ + --hash=sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be \ + --hash=sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed \ + --hash=sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a \ + --hash=sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d \ + --hash=sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324 \ + --hash=sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f \ + --hash=sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2 \ + --hash=sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f \ + --hash=sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5 + # via + # -c src/backend/requirements.txt + # jsonschema + # referencing +s3transfer==0.16.0 \ + --hash=sha256:18e25d66fed509e3868dc1572b3f427ff947dd2c56f844a5bf09481ad3f3b2fe \ + --hash=sha256:8e990f13268025792229cd52fa10cb7163744bf56e719e0b9cb925ab79abf920 + # via + # -c src/backend/requirements.txt + # boto3 +sentry-sdk==2.54.0 \ + --hash=sha256:2620c2575128d009b11b20f7feb81e4e4e8ae08ec1d36cbc845705060b45cc1b \ + --hash=sha256:fd74e0e281dcda63afff095d23ebcd6e97006102cdc8e78a29f19ecdf796a0de + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in + # django-q-sentry +setuptools==82.0.0 \ + --hash=sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb \ + --hash=sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +sgmllib3k==1.0.0 \ + --hash=sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9 + # via + # -c src/backend/requirements.txt + # feedparser +six==1.17.0 \ + --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ + --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 + # via + # -c src/backend/requirements.txt + # python-dateutil +sqlparse==0.5.5 \ + --hash=sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba \ + --hash=sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e + # via + # -c src/backend/requirements.txt + # django + # django-sql-utils +structlog==25.5.0 \ + --hash=sha256:098522a3bebed9153d4570c6d0288abf80a031dfdb2048d59a49e9dc2190fc98 \ + --hash=sha256:a8453e9b9e636ec59bd9e79bbd4a72f025981b3ba0f5837aebf48f02f37a7f9f + # via + # -c src/backend/requirements.txt + # django-structlog +tablib[xls, xlsx, yaml]==3.9.0 \ + --hash=sha256:1b6abd8edb0f35601e04c6161d79660fdcde4abb4a54f66cc9f9054bd55d5fe2 \ + --hash=sha256:eda17cd0d4dda614efc0e710227654c60ddbeb1ca92cdcfc5c3bd1fc5f5a6e4a + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +tinycss2==1.4.0 \ + --hash=sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7 \ + --hash=sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289 + # via + # -c src/backend/requirements.txt + # bleach + # cssselect2 + # weasyprint +tinyhtml5==2.1.0 \ + --hash=sha256:60a50ec3d938a37e491efa01af895853060943dcebb5627de5b10d188b338a67 \ + --hash=sha256:6e11cfff38515834268daf89d5f85bbde0b6dd02e8d9e212d1385c2289b89f0a + # via + # -c src/backend/requirements.txt + # weasyprint +typing-extensions==4.15.0 \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 + # via + # -c src/backend/requirements.txt + # flexcache + # flexparser + # grpcio + # jwcrypto + # opentelemetry-api + # opentelemetry-exporter-otlp-proto-grpc + # opentelemetry-exporter-otlp-proto-http + # opentelemetry-sdk + # opentelemetry-semantic-conventions + # pint + # py-moneyed +tzdata==2025.3 \ + --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \ + --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7 + # via + # -c src/backend/requirements.txt + # icalendar +uritemplate==4.2.0 \ + --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ + --hash=sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 + # via + # -c src/backend/requirements.txt + # drf-spectacular +urllib3==2.6.3 \ + --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \ + --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 + # via + # -c src/backend/requirements.txt + # botocore + # django-anymail + # dulwich + # requests + # sentry-sdk +wcwidth==0.6.0 \ + --hash=sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad \ + --hash=sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159 + # via + # -c src/backend/requirements.txt + # blessed + # prettytable +weasyprint==66.0 \ + --hash=sha256:82b0783b726fcd318e2c977dcdddca76515b30044bc7a830cc4fbe717582a6d0 \ + --hash=sha256:da71dc87dc129ac9cffdc65e5477e90365ab9dbae45c744014ec1d06303dde40 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +webencodings==0.5.1 \ + --hash=sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78 \ + --hash=sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923 + # via + # -c src/backend/requirements.txt + # bleach + # cssselect2 + # tinycss2 + # tinyhtml5 +whitenoise==6.12.0 \ + --hash=sha256:f723ebb76a112e98816ff80fcea0a6c9b8ecde835f8ddda25df7a30a3c2db6ad \ + --hash=sha256:fc5e8c572e33ebf24795b47b6a7da8da3c00cff2349f5b04c02f28d0cc5a3cc2 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in +wrapt==1.17.3 \ + --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ + --hash=sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828 \ + --hash=sha256:0610b46293c59a3adbae3dee552b648b984176f8562ee0dba099a56cfbe4df1f \ + --hash=sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396 \ + --hash=sha256:0b1831115c97f0663cb77aa27d381237e73ad4f721391a9bfb2fe8bc25fa6e77 \ + --hash=sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d \ + --hash=sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139 \ + --hash=sha256:16ecf15d6af39246fe33e507105d67e4b81d8f8d2c6598ff7e3ca1b8a37213f7 \ + --hash=sha256:1f0b2f40cf341ee8cc1a97d51ff50dddb9fcc73241b9143ec74b30fc4f44f6cb \ + --hash=sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f \ + --hash=sha256:223db574bb38637e8230eb14b185565023ab624474df94d2af18f1cdb625216f \ + --hash=sha256:249f88ed15503f6492a71f01442abddd73856a0032ae860de6d75ca62eed8067 \ + --hash=sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f \ + --hash=sha256:273a736c4645e63ac582c60a56b0acb529ef07f78e08dc6bfadf6a46b19c0da7 \ + --hash=sha256:281262213373b6d5e4bb4353bc36d1ba4084e6d6b5d242863721ef2bf2c2930b \ + --hash=sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc \ + --hash=sha256:33486899acd2d7d3066156b03465b949da3fd41a5da6e394ec49d271baefcf05 \ + --hash=sha256:343e44b2a8e60e06a7e0d29c1671a0d9951f59174f3709962b5143f60a2a98bd \ + --hash=sha256:373342dd05b1d07d752cecbec0c41817231f29f3a89aa8b8843f7b95992ed0c7 \ + --hash=sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9 \ + --hash=sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81 \ + --hash=sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977 \ + --hash=sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa \ + --hash=sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b \ + --hash=sha256:4da9f45279fff3543c371d5ababc57a0384f70be244de7759c85a7f989cb4ebe \ + --hash=sha256:507553480670cab08a800b9463bdb881b2edeed77dc677b0a5915e6106e91a58 \ + --hash=sha256:53e5e39ff71b3fc484df8a522c933ea2b7cdd0d5d15ae82e5b23fde87d44cbd8 \ + --hash=sha256:54a30837587c6ee3cd1a4d1c2ec5d24e77984d44e2f34547e2323ddb4e22eb77 \ + --hash=sha256:5531d911795e3f935a9c23eb1c8c03c211661a5060aab167065896bbf62a5f85 \ + --hash=sha256:55cbbc356c2842f39bcc553cf695932e8b30e30e797f961860afb308e6b1bb7c \ + --hash=sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df \ + --hash=sha256:5a03a38adec8066d5a37bea22f2ba6bbf39fcdefbe2d91419ab864c3fb515454 \ + --hash=sha256:5a7b3c1ee8265eb4c8f1b7d29943f195c00673f5ab60c192eba2d4a7eae5f46a \ + --hash=sha256:5d4478d72eb61c36e5b446e375bbc49ed002430d17cdec3cecb36993398e1a9e \ + --hash=sha256:5ea5eb3c0c071862997d6f3e02af1d055f381b1d25b286b9d6644b79db77657c \ + --hash=sha256:604d076c55e2fdd4c1c03d06dc1a31b95130010517b5019db15365ec4a405fc6 \ + --hash=sha256:656873859b3b50eeebe6db8b1455e99d90c26ab058db8e427046dbc35c3140a5 \ + --hash=sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9 \ + --hash=sha256:6b538e31eca1a7ea4605e44f81a48aa24c4632a277431a6ed3f328835901f4fd \ + --hash=sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277 \ + --hash=sha256:70d86fa5197b8947a2fa70260b48e400bf2ccacdcab97bb7de47e3d1e6312225 \ + --hash=sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22 \ + --hash=sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116 \ + --hash=sha256:7425ac3c54430f5fc5e7b6f41d41e704db073309acfc09305816bc6a0b26bb16 \ + --hash=sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc \ + --hash=sha256:758895b01d546812d1f42204bd443b8c433c44d090248bf22689df673ccafe00 \ + --hash=sha256:79573c24a46ce11aab457b472efd8d125e5a51da2d1d24387666cd85f54c05b2 \ + --hash=sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a \ + --hash=sha256:88547535b787a6c9ce4086917b6e1d291aa8ed914fdd3a838b3539dc95c12804 \ + --hash=sha256:88bbae4d40d5a46142e70d58bf664a89b6b4befaea7b2ecc14e03cedb8e06c04 \ + --hash=sha256:8cccf4f81371f257440c88faed6b74f1053eef90807b77e31ca057b2db74edb1 \ + --hash=sha256:9baa544e6acc91130e926e8c802a17f3b16fbea0fd441b5a60f5cf2cc5c3deba \ + --hash=sha256:a36692b8491d30a8c75f1dfee65bef119d6f39ea84ee04d9f9311f83c5ad9390 \ + --hash=sha256:a47681378a0439215912ef542c45a783484d4dd82bac412b71e59cf9c0e1cea0 \ + --hash=sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d \ + --hash=sha256:a9a2203361a6e6404f80b99234fe7fb37d1fc73487b5a78dc1aa5b97201e0f22 \ + --hash=sha256:ab232e7fdb44cdfbf55fc3afa31bcdb0d8980b9b95c38b6405df2acb672af0e0 \ + --hash=sha256:ad85e269fe54d506b240d2d7b9f5f2057c2aa9a2ea5b32c66f8902f768117ed2 \ + --hash=sha256:af338aa93554be859173c39c85243970dc6a289fa907402289eeae7543e1ae18 \ + --hash=sha256:afd964fd43b10c12213574db492cb8f73b2f0826c8df07a68288f8f19af2ebe6 \ + --hash=sha256:b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 \ + --hash=sha256:c31eebe420a9a5d2887b13000b043ff6ca27c452a9a22fa71f35f118e8d4bf89 \ + --hash=sha256:caea3e9c79d5f0d2c6d9ab96111601797ea5da8e6d0723f77eabb0d4068d2b2f \ + --hash=sha256:cf30f6e3c077c8e6a9a7809c94551203c8843e74ba0c960f4a98cd80d4665d39 \ + --hash=sha256:d40770d7c0fd5cbed9d84b2c3f2e156431a12c9a37dc6284060fb4bec0b7ffd4 \ + --hash=sha256:d8a210b158a34164de8bb68b0e7780041a903d7b00c87e906fb69928bf7890d5 \ + --hash=sha256:dc4a8d2b25efb6681ecacad42fca8859f88092d8732b170de6a5dddd80a1c8fa \ + --hash=sha256:df7d30371a2accfe4013e90445f6388c570f103d61019b6b7c57e0265250072a \ + --hash=sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050 \ + --hash=sha256:e1a4120ae5705f673727d3253de3ed0e016f7cd78dc463db1b31e2463e1f3cf6 \ + --hash=sha256:e228514a06843cae89621384cfe3a80418f3c04aadf8a3b14e46a7be704e4235 \ + --hash=sha256:e405adefb53a435f01efa7ccdec012c016b5a1d3f35459990afc39b6be4d5056 \ + --hash=sha256:e6b13af258d6a9ad602d57d889f83b9d5543acd471eee12eb51f5b01f8eb1bc2 \ + --hash=sha256:e6f40a8aa5a92f150bdb3e1c44b7e98fb7113955b2e5394122fa5532fec4b418 \ + --hash=sha256:e71d5c6ebac14875668a1e90baf2ea0ef5b7ac7918355850c0908ae82bcb297c \ + --hash=sha256:ed7c635ae45cfbc1a7371f708727bf74690daedc49b4dba310590ca0bd28aa8a \ + --hash=sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6 \ + --hash=sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0 \ + --hash=sha256:f9b2601381be482f70e5d1051a5965c25fb3625455a2bf520b5a077b22afb775 \ + --hash=sha256:fbd3c8319de8e1dc79d346929cd71d523622da527cca14e0c1d257e31c2b8b10 \ + --hash=sha256:fd341868a4b6714a5962c1af0bd44f7c404ef78720c7de4892901e540417111c + # via + # -c src/backend/requirements.txt + # opentelemetry-instrumentation + # opentelemetry-instrumentation-dbapi + # opentelemetry-instrumentation-redis +xlrd==2.0.2 \ + --hash=sha256:08b5e25de58f21ce71dc7db3b3b8106c1fa776f3024c54e45b45b374e89234c9 \ + --hash=sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9 + # via + # -c src/backend/requirements.txt + # tablib +xlwt==1.3.0 \ + --hash=sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e \ + --hash=sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88 + # via + # -c src/backend/requirements.txt + # tablib +xmlsec==1.3.17 \ + --hash=sha256:00d43d4f68ac6b11f6e1e69bcb389495f54da77bf1168b4de08f4a7785e47bbb \ + --hash=sha256:040f28a7aacfdb467df46d423e4af05569e9376bc8c7f6416b0761e16a0e3d0b \ + --hash=sha256:1a0b9a1dcda547e0340eefa6f4a04b87dbd9e40cd514487f347934f94fd559ab \ + --hash=sha256:26cc3d81437b51839946d2e93d09371dfd73ed2831dc7e37eff0fb52fc33747c \ + --hash=sha256:2aa5081e1e05dcb6029660ddad795c7daebb3c5771001f60850ab24a16a9cf5e \ + --hash=sha256:320bf7162e2c442638233da9826af1476049999da1b474b5fe07c60952610131 \ + --hash=sha256:393eb5cc6b8d6e67c04fd64979ec30d766b3d226550b208803cd410d4b416d91 \ + --hash=sha256:3a53c14d4bc40b0f0fcc6d7908b88f3cbbcf36e25c392f796d88aee7dee5beea \ + --hash=sha256:3a6ced8c7744e896cb5a9fd0156d204df3143a62bae11be91cab8e9743d40eec \ + --hash=sha256:3d1fc1fbe2e8585a3f468cf4154d0ec36cd95a15e68429ad8cc8ccd7c04e84ae \ + --hash=sha256:40fcb197bdb76301c82b10096c67cc44a6e887317b5b914dbbd166339d36fce4 \ + --hash=sha256:46fc9c80e8898ad212b6ad389469bb82d1ab89b90555db42e3e73235b143739d \ + --hash=sha256:4f2bf6bbf04f8a912483d268b4c2727d400d1806d054624da13bee4b9f6fa28a \ + --hash=sha256:5319d0bdaf9e597a0ba8dfb3840c4ae57e51f462e7620953f32b07df6267f2ba \ + --hash=sha256:5346616e1fe1015f7800698c15225c7902f45db199e217af2039a21989aff7e9 \ + --hash=sha256:5616ad5016794b0dd41d03eef5b721e31bb306353226b25fc88fedb7d4f7c37e \ + --hash=sha256:593264c192d1836162d75478c8b1cb5874f3b69dcc5bdfac642a0933abefa93a \ + --hash=sha256:5c3008b32a15d24b6c9da39bf6ede8dc3122570a640a73795d763aea55a2193e \ + --hash=sha256:5c6d4b2ece9d109591d08128a1656b458e24d9eba6c02c32e93573e14eee2447 \ + --hash=sha256:5d0e69291f90b28e9442d8e0e69d3e06cede8a3c44e856413fd284de81ce2888 \ + --hash=sha256:64c1184d51c8a67e3d1eb3ac477e307a07e2b40fd03cd0c8084b147ea0f342db \ + --hash=sha256:66fe5aaccf68fb85fe0b64277e3f594d6b01ddefb98ef1ceb0a666652d6ec580 \ + --hash=sha256:672e41dc7962da4ce84b67aa1c3a008338e3b88332f5484b9911b91cee0997ed \ + --hash=sha256:67717fe5151df68987a1387cba11ba28ce19b3bb9a2d10d650277cd910e510e7 \ + --hash=sha256:6cbf8a556c74451a7455d506ce3edc81c7cd0f60895ef7792c77dc97434a8e82 \ + --hash=sha256:6d1e9ff3398e87e3abb2ab8f1576c0761e5c5c18b086b41f2b39a3eb6b2f7e11 \ + --hash=sha256:728058a1623a620811a3cdf2dd4894b5d9413ede20c8ddddf98fdea5eafe9529 \ + --hash=sha256:72fc6d336dd68d62822c6536ff4b2453fda94ea652eddb4a958ac97b16ac7001 \ + --hash=sha256:79b471fdd1d3a92b80907828eaa809f6e34023583488b1b8dc3f951529e7a2f8 \ + --hash=sha256:7a9f7f7c9ded817f8476b5d6762a831034a8c54783f6175a928f61d57bec78cb \ + --hash=sha256:80fff2251d0e73714435b5860ce200990dffe85466dd91d08d75c4d64ee9967d \ + --hash=sha256:9877303e8c72d7aa2467d1af12e56d67b8fb50d324eda5848e0ec5ee2176aac5 \ + --hash=sha256:99b5b4b6fe232f2234bcec2bdd533b7ab7030b3ce6cfb8bd7153bf02441c8520 \ + --hash=sha256:9bb6faa4ae0268204cfa6b0c0de1c9121eb606eea8c66c7d7ce62e89a17f9efa \ + --hash=sha256:a1ef656421d01851618d0fe5518e57469159c14a48e05125f7bd3225631952f9 \ + --hash=sha256:a3961102a6ba8250670814bd1086139fb918e03bf146ef85dc8b6084a9b027d1 \ + --hash=sha256:a603584ceee175036e1bccdbe65d551c0fff67343fd506bfa6cec52bc64d9a75 \ + --hash=sha256:abd585642d1fb169dd014e1037dcebe21d12a06e71b6d8f0e37650a81d57d1f1 \ + --hash=sha256:ac68a6ac9c0e74f6f3e476f5ac2271b1df7b349a4021b6b2cdfe32cc8fa4beec \ + --hash=sha256:ac92a5d0104640e0ff6fd9ef82441005e08fef460fccd790240d3e39abd69ad3 \ + --hash=sha256:ae88c3aaab5704adfdbce913b3a18db1eb96c49c970657cc01c0d1c420ffdec3 \ + --hash=sha256:b3f306f5aef47336b8299d8dbee31fa0b2eba4579f9f41396070f7a97d0dcd49 \ + --hash=sha256:b4be73fbde421d6188300e02ad92d2d5435c708a35ede8124ebdf6b00330d7cb \ + --hash=sha256:bc8d0a75a43a45349b37186ecce5ae028325ede47cbc217802ff3ef4db3f3cb9 \ + --hash=sha256:c4533780d91f547b841f2522a419da9f2cee2f906dbd4aa58083bc944526a45c \ + --hash=sha256:d360d4adfb53d3adeca398c225cb7e2a73a2246414455937082a1fa19bd8572b \ + --hash=sha256:d4a7ee007c6b55f7621330aee8330ef2dafa4225fce554064571ca826beafe7e \ + --hash=sha256:d586bb09f146235f82de624ff05fbca76f8aadc627eb9a072df1899317a1a9eb \ + --hash=sha256:d862f023f56a49c06576be41dfaf213c9ac77e7a344e7f204278c365bb36d00e \ + --hash=sha256:df4a8d7fef3ffe90e572400d47392ea480120e339c292f802830ed09d449e622 \ + --hash=sha256:e2bf1d07c4f97afeb957f626b8c3ebb8cef300efa0cb95599e936c69a66a1b17 \ + --hash=sha256:ea2d65749c4c6a35a3ba138debda2f910713a9f4f06b4647510c184c284d7c62 \ + --hash=sha256:ed63cbd87dd69ebcf3a9f82d87b67818c9a7d656325dd4fb34d6c4dfbaa84017 \ + --hash=sha256:eee89c268a35f8a08a8e9abef6f466b97577e94f5cac8bf32c25e97cd5020097 \ + --hash=sha256:f3fac9ae679f66585925cc00c5f6839ae36c1d03157619571dee18acc05b9c01 + # via + # -c src/backend/requirements.txt + # -r src/backend/requirements.in + # python3-saml +zipp==3.23.0 \ + --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ + --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 + # via + # -c src/backend/requirements.txt + # importlib-metadata +zopfli==0.4.1 \ + --hash=sha256:02086247dd12fda929f9bfe8b3962b6bcdbfc8c82e99255aebcf367867cf0760 \ + --hash=sha256:07a5cdc5d1aaa6c288c5d9f5a5383042ba743641abf8e2fd898dcad622d8a38e \ + --hash=sha256:27823dc1161a4031d1c25925fd45d9868ec0cbc7692341830a7dcfa25063662c \ + --hash=sha256:2f992ac7d83cbddd889e1813ace576cbc91a05d5d7a0a21b366e2e5f492e7707 \ + --hash=sha256:4238d4d746d1095e29c9125490985e0c12ffd3654f54a24af551e2391e936d54 \ + --hash=sha256:5a4c22b6161f47f5bd34637dbaee6735abd287cd64e0d1ce28ef1871bf625f4b \ + --hash=sha256:84a31ba9edc921b1d3a4449929394a993888f32d70de3a3617800c428a947b9b \ + --hash=sha256:a899eca405662a23ae75054affa3517a060362eae1185d3d791c86a50153c4dd \ + --hash=sha256:a93c2ecafff372de6c0aa2212eff18a75f6c71a100372fee7b4b129cc0b6f9a7 \ + --hash=sha256:cb136a74d14a4ecfae29cb0fdecece58a6c115abc9a74c12bc6ac62e80f229d7 \ + --hash=sha256:d7bcee1b189d64ec33d1e05cfa1b6a1268c29329c382f6ca1bd6245b04925c57 \ + --hash=sha256:fdfb7ce9f5de37a5b2f75dd2642fd7717956ef2a72e0387302a36d382440db07 + # via + # -c src/backend/requirements.txt + # fonttools diff --git a/src/backend/requirements-dev-3.14.txt b/src/backend/requirements-dev-3.14.txt new file mode 100644 index 0000000000..6f40cc293f --- /dev/null +++ b/src/backend/requirements-dev-3.14.txt @@ -0,0 +1,729 @@ +# This file was autogenerated by uv via the following command: +# uv pip compile src/backend/requirements-dev.in -o src/backend/requirements-dev-3.14.txt -c src/backend/requirements-3.14.txt --python-version=3.14 -c src/backend/requirements.txt +asgiref==3.11.1 \ + --hash=sha256:5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce \ + --hash=sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133 + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # django +build==1.4.0 \ + --hash=sha256:6a07c1b8eb6f2b311b96fcbdbce5dab5fe637ffda0fd83c9cac622e927501596 \ + --hash=sha256:f1b91b925aa322be454f8330c6fb48b465da993d1e7e7e6fa35027ec49f3c936 + # via pip-tools +certifi==2026.2.25 \ + --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ + --hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7 + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # requests +cffi==2.0.0 \ + --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \ + --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \ + --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \ + --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \ + --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \ + --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \ + --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \ + --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \ + --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \ + --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \ + --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \ + --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \ + --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \ + --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \ + --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \ + --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \ + --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \ + --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \ + --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \ + --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \ + --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \ + --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \ + --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \ + --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \ + --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \ + --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \ + --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \ + --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \ + --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \ + --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \ + --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \ + --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \ + --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \ + --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \ + --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \ + --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \ + --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \ + --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \ + --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \ + --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \ + --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \ + --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \ + --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \ + --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \ + --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \ + --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \ + --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \ + --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \ + --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \ + --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \ + --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \ + --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \ + --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \ + --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \ + --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \ + --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \ + --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \ + --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \ + --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \ + --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \ + --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \ + --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \ + --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \ + --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \ + --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \ + --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \ + --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \ + --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \ + --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \ + --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \ + --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \ + --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \ + --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \ + --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \ + --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \ + --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \ + --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \ + --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \ + --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \ + --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \ + --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \ + --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \ + --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \ + --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # cryptography + # pytest-codspeed +cfgv==3.5.0 \ + --hash=sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 \ + --hash=sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132 + # via pre-commit +charset-normalizer==3.4.5 \ + --hash=sha256:014837af6fabf57121b6254fa8ade10dceabc3528b27b721a64bbc7b8b1d4eb4 \ + --hash=sha256:01a1ed54b953303ca7e310fafe0fe347aab348bd81834a0bcd602eb538f89d66 \ + --hash=sha256:0294916d6ccf2d069727d65973c3a1ca477d68708db25fd758dd28b0827cff54 \ + --hash=sha256:02a9d1b01c1e12c27883b0c9349e0bcd9ae92e727ff1a277207e1a262b1cbf05 \ + --hash=sha256:036c079aa08a6a592b82487f97c60b439428320ed1b2ea0b3912e99d30c77765 \ + --hash=sha256:039215608ac7b358c4da0191d10fc76868567fbf276d54c14721bdedeb6de064 \ + --hash=sha256:0625665e4ebdddb553ab185de5db7054393af8879fb0c87bd5690d14379d6819 \ + --hash=sha256:0a45e504f5e1be0bd385935a8e1507c442349ca36f511a47057a71c9d1d6ea9e \ + --hash=sha256:0b362bcd27819f9c07cbf23db4e0e8cd4b44c5ecd900c2ff907b2b92274a7412 \ + --hash=sha256:0c300cefd9b0970381a46394902cd18eaf2aa00163f999590ace991989dcd0fc \ + --hash=sha256:1088345bcc93c58d8d8f3d783eca4a6e7a7752bbff26c3eee7e73c597c191c2e \ + --hash=sha256:10b473fc8dca1c3ad8559985794815f06ca3fc71942c969129070f2c3cdf7281 \ + --hash=sha256:131716d6786ad5e3dc542f5cc6f397ba3339dc0fb87f87ac30e550e8987756af \ + --hash=sha256:14498a429321de554b140013142abe7608f9d8ccc04d7baf2ad60498374aefa2 \ + --hash=sha256:149ec69866c3d6c2fb6f758dbc014ecb09f30b35a5ca90b6a8a2d4e54e18fdfe \ + --hash=sha256:165c7b21d19365464e8f70e5ce5e12524c58b48c78c1f5a57524603c1ab003f8 \ + --hash=sha256:1827734a5b308b65ac54e86a618de66f935a4f63a8a462ff1e19a6788d6c2262 \ + --hash=sha256:19092dde50335accf365cce21998a1c6dd8eafd42c7b226eb54b2747cdce2fac \ + --hash=sha256:1a374cc0b88aa710e8865dc1bd6edb3743c59f27830f0293ab101e4cf3ce9f85 \ + --hash=sha256:1d1401945cb77787dbd3af2446ff2d75912327c4c3a1526ab7955ecf8600687c \ + --hash=sha256:1f2da5cbb9becfcd607757a169e38fb82aa5fd86fae6653dea716e7b613fe2cf \ + --hash=sha256:259cd1ca995ad525f638e131dbcc2353a586564c038fc548a3fe450a91882139 \ + --hash=sha256:2820a98460c83663dd8ec015d9ddfd1e4879f12e06bb7d0500f044fb477d2770 \ + --hash=sha256:28269983f25a4da0425743d0d257a2d6921ea7d9b83599d4039486ec5b9f911d \ + --hash=sha256:2b970382e4a36bed897c19f310f31d7d13489c11b4f468ddfba42d41cddfb918 \ + --hash=sha256:2da4eedcb6338e2321e831a0165759c0c620e37f8cd044a263ff67493be8ffb3 \ + --hash=sha256:30987f4a8ed169983f93e1be8ffeea5214a779e27ed0b059835c7afe96550ad7 \ + --hash=sha256:30a2b1a48478c3428d047ed9690d57c23038dac838a87ad624c85c0a78ebeb39 \ + --hash=sha256:340810d34ef83af92148e96e3e44cb2d3f910d2bf95e5618a5c467d9f102231d \ + --hash=sha256:3f64c6bf8f32f9133b668c7f7a7cbdbc453412bc95ecdbd157f3b1e377a92990 \ + --hash=sha256:4167a621a9a1a986c73777dbc15d4b5eac8ac5c10393374109a343d4013ec765 \ + --hash=sha256:4354e401eb6dab9aed3c7b4030514328a6c748d05e1c3e19175008ca7de84fb1 \ + --hash=sha256:4481e6da1830c8a1cc0b746b47f603b653dadb690bcd851d039ffaefe70533aa \ + --hash=sha256:4b8551b6e6531e156db71193771c93bda78ffc4d1e6372517fe58ad3b91e4659 \ + --hash=sha256:4cd966c2559f501c6fd69294d082c2934c8dd4719deb32c22961a5ac6db0df1d \ + --hash=sha256:50bcbca6603c06a1dcc7b056ed45c37715fb5d2768feb3bcd37d2313c587a5b9 \ + --hash=sha256:530beedcec9b6e027e7a4b6ce26eed36678aa39e17da85e6e03d7bd9e8e9d7c9 \ + --hash=sha256:568e3c34b58422075a1b49575a6abc616d9751b4d61b23f712e12ebb78fe47b2 \ + --hash=sha256:573ef5814c4b7c0d59a7710aa920eaaaef383bd71626aa420fba27b5cab92e8d \ + --hash=sha256:58ad8270cfa5d4bef1bc85bd387217e14ff154d6630e976c6f56f9a040757475 \ + --hash=sha256:597d10dec876923e5c59e48dbd366e852eacb2b806029491d307daea6b917d7c \ + --hash=sha256:5bcb3227c3d9aaf73eaaab1db7ccd80a8995c509ee9941e2aae060ca6e4e5d81 \ + --hash=sha256:5cffde4032a197bd3b42fd0b9509ec60fb70918d6970e4cc773f20fc9180ca67 \ + --hash=sha256:5fea359734b140d0d6741189fea5478c6091b54ffc69d7ce119e0a05637d8c99 \ + --hash=sha256:60d68e820af339df4ae8358c7a2e7596badeb61e544438e489035f9fbf3246a5 \ + --hash=sha256:610f72c0ee565dfb8ae1241b666119582fdbfe7c0975c175be719f940e110694 \ + --hash=sha256:65a126fb4b070d05340a84fc709dd9e7c75d9b063b610ece8a60197a291d0adf \ + --hash=sha256:65b3c403a5b6b8034b655e7385de4f72b7b244869a22b32d4030b99a60593eca \ + --hash=sha256:66dee73039277eb35380d1b82cccc69cc82b13a66f9f4a18da32d573acf02b7c \ + --hash=sha256:708c7acde173eedd4bfa4028484426ba689d2103b28588c513b9db2cd5ecde9c \ + --hash=sha256:728c6a963dfab66ef865f49286e45239384249672cd598576765acc2a640a636 \ + --hash=sha256:754f96058e61a5e22e91483f823e07df16416ce76afa4ebf306f8e1d1296d43f \ + --hash=sha256:75dfd1afe0b1647449e852f4fb428195a7ed0588947218f7ba929f6538487f02 \ + --hash=sha256:75ee9c1cce2911581a70a3c0919d8bccf5b1cbc9b0e5171400ec736b4b569497 \ + --hash=sha256:76a9d0de4d0eab387822e7b35d8f89367dd237c72e82ab42b9f7bf5e15ada00f \ + --hash=sha256:77be992288f720306ab4108fe5c74797de327f3248368dfc7e1a916d6ed9e5a2 \ + --hash=sha256:7ad83b8f9379176c841f8865884f3514d905bcd2a9a3b210eaa446e7d2223e4d \ + --hash=sha256:8197abe5ca1ffb7d91e78360f915eef5addff270f8a71c1fc5be24a56f3e4873 \ + --hash=sha256:82cc7c2ad42faec8b574351f8bc2a0c049043893853317bd9bb309f5aba6cb5a \ + --hash=sha256:8a28afb04baa55abf26df544e3e5c6534245d3daa5178bc4a8eeb48202060d0e \ + --hash=sha256:8b78d8a609a4b82c273257ee9d631ded7fac0d875bdcdccc109f3ee8328cfcb1 \ + --hash=sha256:8ce11cd4d62d11166f2b441e30ace226c19a3899a7cf0796f668fba49a9fb123 \ + --hash=sha256:8fff79bf5978c693c9b1a4d71e4a94fddfb5fe744eb062a318e15f4a2f63a550 \ + --hash=sha256:92263f7eca2f4af326cd20de8d16728d2602f7cfea02e790dcde9d83c365d7cc \ + --hash=sha256:93b3b2cc5cf1b8743660ce77a4f45f3f6d1172068207c1defc779a36eea6bb36 \ + --hash=sha256:95adae7b6c42a6c5b5b559b1a99149f090a57128155daeea91732c8d970d8644 \ + --hash=sha256:97ab7787092eb9b50fb47fa04f24c75b768a606af1bcba1957f07f128a7219e4 \ + --hash=sha256:9db5e3fcdcee89a78c04dffb3fe33c79f77bd741a624946db2591c81b2fc85b0 \ + --hash=sha256:a118e2e0b5ae6b0120d5efa5f866e58f2bb826067a646431da4d6a2bdae7950e \ + --hash=sha256:a2aecdb364b8a1802afdc7f9327d55dad5366bc97d8502d0f5854e50712dbc5f \ + --hash=sha256:a66aa5022bf81ab4b1bebfb009db4fd68e0c6d4307a1ce5ef6a26e5878dfc9e4 \ + --hash=sha256:a68766a3c58fde7f9aaa22b3786276f62ab2f594efb02d0a1421b6282e852e98 \ + --hash=sha256:aa2f963b4da26daf46231d9b9e0e2c9408a751f8f0d0f44d2de56d3caf51d294 \ + --hash=sha256:aa92ec1102eaff840ccd1021478af176a831f1bccb08e526ce844b7ddda85c22 \ + --hash=sha256:ac59c15e3f1465f722607800c68713f9fbc2f672b9eb649fe831da4019ae9b23 \ + --hash=sha256:ae8b03427410731469c4033934cf473426faff3e04b69d2dfb64a4281a3719f8 \ + --hash=sha256:afca7f78067dd27c2b848f1b234623d26b87529296c6c5652168cc1954f2f3b2 \ + --hash=sha256:b2d37d78297b39a9eb9eb92c0f6df98c706467282055419df141389b23f93362 \ + --hash=sha256:b3e71afc578b98512bfe7bdb822dd6bc57d4b0093b4b6e5487c1e96ad4ace242 \ + --hash=sha256:ba20bdf69bd127f66d0174d6f2a93e69045e0b4036dc1ca78e091bcc765830c4 \ + --hash=sha256:c108f8619e504140569ee7de3f97d234f0fbae338a7f9f360455071ef9855a95 \ + --hash=sha256:c23eb3263356d94858655b3e63f85ac5d50970c6e8febcdde7830209139cc37d \ + --hash=sha256:c5af897b45fa606b12464ccbe0014bbf8c09191e0a66aab6aa9d5cf6e77e0c94 \ + --hash=sha256:c7a80a9242963416bd81f99349d5f3fce1843c303bd404f204918b6d75a75fd6 \ + --hash=sha256:c7e84e0c0005e3bdc1a9211cd4e62c78ba80bc37b2365ef4410cd2007a9047f2 \ + --hash=sha256:cace89841c0599d736d3d74a27bc5821288bb47c5441923277afc6059d7fbcb4 \ + --hash=sha256:cd2d0f0ec9aa977a27731a3209ebbcacebebaf41f902bd453a928bfd281cf7f8 \ + --hash=sha256:d01de5e768328646e6a3fa9e562706f8f6641708c115c62588aef2b941a4f88e \ + --hash=sha256:d1028de43596a315e2720a9849ee79007ab742c06ad8b45a50db8cdb7ed4a82a \ + --hash=sha256:d27ce22ec453564770d29d03a9506d449efbb9fa13c00842262b2f6801c48cce \ + --hash=sha256:d29dd9c016f2078b43d0c357511e87eee5b05108f3dd603423cb389b89813969 \ + --hash=sha256:d31f0d1671e1534e395f9eb84a68e0fb670e1edb1fe819a9d7f564ae3bc4e53f \ + --hash=sha256:d4eb8ac7469b2a5d64b5b8c04f84d8bf3ad340f4514b98523805cbf46e3b3923 \ + --hash=sha256:d5e52d127045d6ae01a1e821acfad2f3a1866c54d0e837828538fabe8d9d1bd6 \ + --hash=sha256:d77f97e515688bd615c1d1f795d540f32542d514242067adcb8ef532504cb9ee \ + --hash=sha256:d8ed79b8f6372ca4254955005830fd61c1ccdd8c0fac6603e2c145c61dd95db6 \ + --hash=sha256:dc57a0baa3eeedd99fafaef7511b5a6ef4581494e8168ee086031744e2679467 \ + --hash=sha256:e09f671a54ce70b79a1fc1dc6da3072b7ef7251fadb894ed92d9aa8218465a5f \ + --hash=sha256:e22d1059b951e7ae7c20ef6b06afd10fb95e3c41bf3c4fbc874dba113321c193 \ + --hash=sha256:e37bd100d2c5d3ba35db9c7c5ba5a9228cbcffe5c4778dc824b164e5257813d7 \ + --hash=sha256:e51ae7d81c825761d941962450f50d041db028b7278e7b08930b4541b3e45cb9 \ + --hash=sha256:e545b51da9f9af5c67815ca0eb40676c0f016d0b0381c86f20451e35696c5f95 \ + --hash=sha256:e6302ca4ae283deb0af68d2fbf467474b8b6aedcd3dab4db187e07f94c109763 \ + --hash=sha256:e71bbb595973622b817c042bd943c3f3667e9c9983ce3d205f973f486fec98a7 \ + --hash=sha256:ec56a2266f32bc06ed3c3e2a8f58417ce02f7e0356edc89786e52db13c593c98 \ + --hash=sha256:ed1a9a204f317ef879b32f9af507d47e49cd5e7f8e8d5d96358c98373314fc60 \ + --hash=sha256:ed97c282ee4f994ef814042423a529df9497e3c666dca19be1d4cd1129dc7ade \ + --hash=sha256:ed98364e1c262cf5f9363c3eca8c2df37024f52a8fa1180a3610014f26eac51c \ + --hash=sha256:ee57b926940ba00bca7ba7041e665cc956e55ef482f851b9b65acb20d867e7a2 \ + --hash=sha256:f1d725b754e967e648046f00c4facc42d414840f5ccc670c5670f59f83693e4f \ + --hash=sha256:f8102ae93c0bc863b1d41ea0f4499c20a83229f52ed870850892df555187154a \ + --hash=sha256:fc1c64934b8faf7584924143eb9db4770bbdb16659626e1a1a4d9efbcb68d947 \ + --hash=sha256:ff95a9283de8a457e6b12989de3f9f5193430f375d64297d323a615ea52cbdb3 + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # pdfminer-six + # requests +click==8.3.1 \ + --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ + --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 + # via pip-tools +coverage[toml]==7.13.4 \ + --hash=sha256:01d4cbc3c283a17fc1e42d614a119f7f438eabb593391283adca8dc86eff1246 \ + --hash=sha256:02231499b08dabbe2b96612993e5fc34217cdae907a51b906ac7fca8027a4459 \ + --hash=sha256:0dd7ab8278f0d58a0128ba2fca25824321f05d059c1441800e934ff2efa52129 \ + --hash=sha256:0e086334e8537ddd17e5f16a344777c1ab8194986ec533711cbe6c41cde841b6 \ + --hash=sha256:0fc31c787a84f8cd6027eba44010517020e0d18487064cd3d8968941856d1415 \ + --hash=sha256:14375934243ee05f56c45393fe2ce81fe5cc503c07cee2bdf1725fb8bef3ffaf \ + --hash=sha256:1731dc33dc276dafc410a885cbf5992f1ff171393e48a21453b78727d090de80 \ + --hash=sha256:19bc3c88078789f8ef36acb014d7241961dbf883fd2533d18cb1e7a5b4e28b11 \ + --hash=sha256:1af1641e57cf7ba1bd67d677c9abdbcd6cc2ab7da3bca7fa1e2b7e50e65f2ad0 \ + --hash=sha256:1d4be36a5114c499f9f1f9195e95ebf979460dbe2d88e6816ea202010ba1c34b \ + --hash=sha256:200dea7d1e8095cc6e98cdabe3fd1d21ab17d3cee6dab00cadbb2fe35d9c15b9 \ + --hash=sha256:23e3f687cf945070d1c90f85db66d11e3025665d8dafa831301a0e0038f3db9b \ + --hash=sha256:2421d591f8ca05b308cf0092807308b2facbefe54af7c02ac22548b88b95c98f \ + --hash=sha256:245e37f664d89861cf2329c9afa2c1fe9e6d4e1a09d872c947e70718aeeac505 \ + --hash=sha256:25381386e80ae727608e662474db537d4df1ecd42379b5ba33c84633a2b36d47 \ + --hash=sha256:25a41c3104d08edb094d9db0d905ca54d0cd41c928bb6be3c4c799a54753af55 \ + --hash=sha256:296f8b0af861d3970c2a4d8c91d48eb4dd4771bcef9baedec6a9b515d7de3def \ + --hash=sha256:29e3220258d682b6226a9b0925bc563ed9a1ebcff3cad30f043eceea7eaf2689 \ + --hash=sha256:2a09cfa6a5862bc2fc6ca7c3def5b2926194a56b8ab78ffcf617d28911123012 \ + --hash=sha256:2b0f6ccf3dbe577170bebfce1318707d0e8c3650003cb4b3a9dd744575daa8b5 \ + --hash=sha256:2c048ea43875fbf8b45d476ad79f179809c590ec7b79e2035c662e7afa3192e3 \ + --hash=sha256:2cb0f1e000ebc419632bbe04366a8990b6e32c4e0b51543a6484ffe15eaeda95 \ + --hash=sha256:2fa8d5f8de70688a28240de9e139fa16b153cc3cbb01c5f16d88d6505ebdadf9 \ + --hash=sha256:300deaee342f90696ed186e3a00c71b5b3d27bffe9e827677954f4ee56969601 \ + --hash=sha256:30b8d0512f2dc8c8747557e8fb459d6176a2c9e5731e2b74d311c03b78451997 \ + --hash=sha256:33901f604424145c6e9c2398684b92e176c0b12df77d52db81c20abd48c3794c \ + --hash=sha256:3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac \ + --hash=sha256:391ee8f19bef69210978363ca930f7328081c6a0152f1166c91f0b5fdd2a773c \ + --hash=sha256:3998e5a32e62fdf410c0dbd3115df86297995d6e3429af80b8798aad894ca7aa \ + --hash=sha256:3c06f0f1337c667b971ca2f975523347e63ec5e500b9aa5882d91931cd3ef750 \ + --hash=sha256:40aa8808140e55dc022b15d8aa7f651b6b3d68b365ea0398f1441e0b04d859c3 \ + --hash=sha256:40d74da8e6c4b9ac18b15331c4b5ebc35a17069410cad462ad4f40dcd2d50c0d \ + --hash=sha256:4223b4230a376138939a9173f1bdd6521994f2aff8047fae100d6d94d50c5a12 \ + --hash=sha256:48685fee12c2eb3b27c62f2658e7ea21e9c3239cba5a8a242801a0a3f6a8c62a \ + --hash=sha256:4c7d3cc01e7350f2f0f6f7036caaf5673fb56b6998889ccfe9e1c1fe75a9c932 \ + --hash=sha256:4e83efc079eb39480e6346a15a1bcb3e9b04759c5202d157e1dd4303cd619356 \ + --hash=sha256:4fc7fa81bbaf5a02801b65346c8b3e657f1d93763e58c0abdf7c992addd81a92 \ + --hash=sha256:53d133df809c743eb8bce33b24bcababb371f4441340578cd406e084d94a6148 \ + --hash=sha256:590c0ed4bf8e85f745e6b805b2e1c457b2e33d5255dd9729743165253bc9ad39 \ + --hash=sha256:5b856a8ccf749480024ff3bd7310adaef57bf31fd17e1bfc404b7940b6986634 \ + --hash=sha256:65dfcbe305c3dfe658492df2d85259e0d79ead4177f9ae724b6fb245198f55d6 \ + --hash=sha256:6f01afcff62bf9a08fb32b2c1d6e924236c0383c02c790732b6537269e466a72 \ + --hash=sha256:6fdef321fdfbb30a197efa02d48fcd9981f0d8ad2ae8903ac318adc653f5df98 \ + --hash=sha256:71ca20079dd8f27fcf808817e281e90220475cd75115162218d0e27549f95fef \ + --hash=sha256:725d985c5ab621268b2edb8e50dfe57633dc69bda071abc470fed55a14935fd3 \ + --hash=sha256:75eab1ebe4f2f64d9509b984f9314d4aa788540368218b858dad56dc8f3e5eb9 \ + --hash=sha256:75fcd519f2a5765db3f0e391eb3b7d150cce1a771bf4c9f861aeab86c767a3c0 \ + --hash=sha256:76451d1978b95ba6507a039090ba076105c87cc76fc3efd5d35d72093964d49a \ + --hash=sha256:784fc3cf8be001197b652d51d3fd259b1e2262888693a4636e18879f613a62a9 \ + --hash=sha256:78cdf0d578b15148b009ccf18c686aa4f719d887e76e6b40c38ffb61d264a552 \ + --hash=sha256:79be69cf7f3bf9b0deeeb062eab7ac7f36cd4cc4c4dd694bd28921ba4d8596cc \ + --hash=sha256:79e73a76b854d9c6088fe5d8b2ebe745f8681c55f7397c3c0a016192d681045f \ + --hash=sha256:7b322db1284a2ed3aa28ffd8ebe3db91c929b7a333c0820abec3d838ef5b3525 \ + --hash=sha256:7d41eead3cc673cbd38a4417deb7fd0b4ca26954ff7dc6078e33f6ff97bed940 \ + --hash=sha256:7eda778067ad7ffccd23ecffce537dface96212576a07924cbf0d8799d2ded5a \ + --hash=sha256:7f57b33491e281e962021de110b451ab8a24182589be17e12a22c79047935e23 \ + --hash=sha256:8041b6c5bfdc03257666e9881d33b1abc88daccaf73f7b6340fb7946655cd10f \ + --hash=sha256:8248977c2e33aecb2ced42fef99f2d319e9904a36e55a8a68b69207fb7e43edc \ + --hash=sha256:845f352911777a8e722bfce168958214951e07e47e5d5d9744109fa5fe77f79b \ + --hash=sha256:85480adfb35ffc32d40918aad81b89c69c9cc5661a9b8a81476d3e645321a056 \ + --hash=sha256:8e264226ec98e01a8e1054314af91ee6cde0eacac4f465cc93b03dbe0bce2fd7 \ + --hash=sha256:8e798c266c378da2bd819b0677df41ab46d78065fb2a399558f3f6cae78b2fbb \ + --hash=sha256:9181a3ccead280b828fae232df12b16652702b49d41e99d657f46cc7b1f6ec7a \ + --hash=sha256:9351229c8c8407645840edcc277f4a2d44814d1bc34a2128c11c2a031d45a5dd \ + --hash=sha256:93550784d9281e374fb5a12bf1324cc8a963fd63b2d2f223503ef0fd4aa339ea \ + --hash=sha256:9401ebc7ef522f01d01d45532c68c5ac40fb27113019b6b7d8b208f6e9baa126 \ + --hash=sha256:94eb63f9b363180aff17de3e7c8760c3ba94664ea2695c52f10111244d16a299 \ + --hash=sha256:9d107aff57a83222ddbd8d9ee705ede2af2cc926608b57abed8ef96b50b7e8f9 \ + --hash=sha256:a32ebc02a1805adf637fc8dec324b5cdacd2e493515424f70ee33799573d661b \ + --hash=sha256:a3aa4e7b9e416774b21797365b358a6e827ffadaaca81b69ee02946852449f00 \ + --hash=sha256:a6f94a7d00eb18f1b6d403c91a88fd58cfc92d4b16080dfdb774afc8294469bf \ + --hash=sha256:aa3feb8db2e87ff5e6d00d7e1480ae241876286691265657b500886c98f38bda \ + --hash=sha256:ad27098a189e5838900ce4c2a99f2fe42a0bf0c2093c17c69b45a71579e8d4a2 \ + --hash=sha256:ae4578f8528569d3cf303fef2ea569c7f4c4059a38c8667ccef15c6e1f118aa5 \ + --hash=sha256:b1ec7b6b6e93255f952e27ab58fbc68dcc468844b16ecbee881aeb29b6ab4d8d \ + --hash=sha256:b507778ae8a4c915436ed5c2e05b4a6cecfa70f734e19c22a005152a11c7b6a9 \ + --hash=sha256:b66a2da594b6068b48b2692f043f35d4d3693fb639d5ea8b39533c2ad9ac3ab9 \ + --hash=sha256:b720ce6a88a2755f7c697c23268ddc47a571b88052e6b155224347389fdf6a3b \ + --hash=sha256:b7b38448866e83176e28086674fe7368ab8590e4610fb662b44e345b86d63ffa \ + --hash=sha256:b8eb931ee8e6d8243e253e5ed7336deea6904369d2fd8ae6e43f68abbf167092 \ + --hash=sha256:bb28c0f2cf2782508a40cec377935829d5fcc3ad9a3681375af4e84eb34b6b58 \ + --hash=sha256:bd60d4fe2f6fa7dff9223ca1bbc9f05d2b6697bc5961072e5d3b952d46e1b1ea \ + --hash=sha256:c35eb28c1d085eb7d8c9b3296567a1bebe03ce72962e932431b9a61f28facf26 \ + --hash=sha256:c4240e7eded42d131a2d2c4dec70374b781b043ddc79a9de4d55ca71f8e98aea \ + --hash=sha256:caa421e2684e382c5d8973ac55e4f36bed6821a9bad5c953494de960c74595c9 \ + --hash=sha256:d490ba50c3f35dd7c17953c68f3270e7ccd1c6642e2d2afe2d8e720b98f5a053 \ + --hash=sha256:d65b2d373032411e86960604dc4edac91fdfb5dca539461cf2cbe78327d1e64f \ + --hash=sha256:dae88bc0fc77edaa65c14be099bd57ee140cf507e6bfdeea7938457ab387efb0 \ + --hash=sha256:de6defc1c9badbf8b9e67ae90fd00519186d6ab64e5cc5f3d21359c2a9b2c1d3 \ + --hash=sha256:e101609bcbbfb04605ea1027b10dc3735c094d12d40826a60f897b98b1c30256 \ + --hash=sha256:e24f9156097ff9dc286f2f913df3a7f63c0e333dcafa3c196f2c18b4175ca09a \ + --hash=sha256:e2f25215f1a359ab17320b47bcdaca3e6e6356652e8256f2441e4ef972052903 \ + --hash=sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91 \ + --hash=sha256:e6f70dec1cc557e52df5306d051ef56003f74d56e9c4dd7ddb07e07ef32a84dd \ + --hash=sha256:e856bf6616714c3a9fbc270ab54103f4e685ba236fa98c054e8f87f266c93505 \ + --hash=sha256:e87f6c587c3f34356c3759f0420693e35e7eb0e2e41e4c011cb6ec6ecbbf1db7 \ + --hash=sha256:eb30bf180de3f632cd043322dad5751390e5385108b2807368997d1a92a509d0 \ + --hash=sha256:eb88b316ec33760714a4720feb2816a3a59180fd58c1985012054fa7aebee4c2 \ + --hash=sha256:eb9078108fbf0bcdde37c3f4779303673c2fa1fe8f7956e68d447d0dd426d38a \ + --hash=sha256:ecae9737b72408d6a950f7e525f30aca12d4bd8dd95e37342e5beb3a2a8c4f71 \ + --hash=sha256:ee756f00726693e5ba94d6df2bdfd64d4852d23b09bb0bc700e3b30e6f333985 \ + --hash=sha256:f4594c67d8a7c89cf922d9df0438c7c7bb022ad506eddb0fdb2863359ff78242 \ + --hash=sha256:f53d492307962561ac7de4cd1de3e363589b000ab69617c6156a16ba7237998d \ + --hash=sha256:fb07dc5da7e849e2ad31a5d74e9bece81f30ecf5a42909d0a695f8bd1874d6af \ + --hash=sha256:fb26a934946a6afe0e326aebe0730cdff393a8bc0bbb65a2f41e30feddca399c \ + --hash=sha256:fdfc1e28e7c7cdce44985b3043bc13bbd9c747520f94a4d7164af8260b3d91f0 + # via -r src/backend/requirements-dev.in +cryptography==46.0.5 \ + --hash=sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72 \ + --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ + --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ + --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ + --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ + --hash=sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad \ + --hash=sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4 \ + --hash=sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c \ + --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ + --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ + --hash=sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31 \ + --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ + --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ + --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ + --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ + --hash=sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4 \ + --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ + --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ + --hash=sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595 \ + --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ + --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ + --hash=sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48 \ + --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ + --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ + --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ + --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ + --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ + --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ + --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ + --hash=sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7 \ + --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ + --hash=sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2 \ + --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ + --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ + --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ + --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ + --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ + --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ + --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ + --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ + --hash=sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a \ + --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ + --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ + --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ + --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ + --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ + --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ + --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ + --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # pdfminer-six +distlib==0.4.0 \ + --hash=sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 \ + --hash=sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d + # via virtualenv +django==5.2.12 \ + --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ + --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # django-silk + # django-slowtests + # django-stubs + # django-stubs-ext +django-querycount==0.8.3 \ + --hash=sha256:0782484e8a1bd29498fa0195a67106e47cdcc98fafe80cebb1991964077cb694 + # via -r src/backend/requirements-dev.in +django-silk==5.4.3 \ + --hash=sha256:bedb17c8fd9c029a7746cb947864f5c9ea943ae33d6a9581e60f67c45e4490ad \ + --hash=sha256:f7920ae91a34716654296140b2cbf449e9798237a0c6eb7cf2cd79c2cfb39321 + # via -r src/backend/requirements-dev.in +django-slowtests==1.1.1 \ + --hash=sha256:3c6936d420c9df444ac03625b41d97de043c662bbde61fbcd33e4cd407d0c247 + # via -r src/backend/requirements-dev.in +django-stubs==5.2.9 \ + --hash=sha256:2317a7130afdaa76f6ff7f623650d7f3bf1b6c86a60f95840e14e6ec6de1a7cd \ + --hash=sha256:c192257120b08785cfe6f2f1c91f1797aceae8e9daa689c336e52c91e8f6a493 + # via -r src/backend/requirements-dev.in +django-stubs-ext==5.2.9 \ + --hash=sha256:230c51575551b0165be40177f0f6805f1e3ebf799b835c85f5d64c371ca6cf71 \ + --hash=sha256:6db4054d1580657b979b7d391474719f1a978773e66c7070a5e246cd445a25a9 + # via django-stubs +django-test-migrations==1.5.0 \ + --hash=sha256:1cbff04b1e82c5564a6f635284907b381cc11a2ff883adff46776d9126824f07 \ + --hash=sha256:96a08f085fc8bfaa53d44618341d82a2d22fd194c821cd81b147b66f0bec0da8 + # via -r src/backend/requirements-dev.in +django-types==0.23.0 \ + --hash=sha256:0727b13ae810c4b1f14eeac9872834ac928c99dc76584ea7c23afc4461e049dd \ + --hash=sha256:f97fb746166fb15a5f40e470a1fd7a58226349aac9e0a9cb8ae81deb14d94fd0 + # via -r src/backend/requirements-dev.in +filelock==3.25.0 \ + --hash=sha256:5ccf8069f7948f494968fc0713c10e5c182a9c9d9eef3a636307a20c2490f047 \ + --hash=sha256:8f00faf3abf9dc730a1ffe9c354ae5c04e079ab7d3a683b7c32da5dd05f26af3 + # via + # python-discovery + # virtualenv +gprof2dot==2025.4.14 \ + --hash=sha256:0742e4c0b4409a5e8777e739388a11e1ed3750be86895655312ea7c20bd0090e \ + --hash=sha256:35743e2d2ca027bf48fa7cba37021aaf4a27beeae1ae8e05a50b55f1f921a6ce + # via django-silk +identify==2.6.17 \ + --hash=sha256:be5f8412d5ed4b20f2bd41a65f920990bdccaa6a4a18a08f1eefdcd0bdd885f0 \ + --hash=sha256:f816b0b596b204c9fdf076ded172322f2723cf958d02f9c3587504834c8ff04d + # via pre-commit +idna==3.11 \ + --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ + --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902 + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # requests +iniconfig==2.3.0 \ + --hash=sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730 \ + --hash=sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 + # via pytest +isort==8.0.1 \ + --hash=sha256:171ac4ff559cdc060bcfff550bc8404a486fee0caab245679c2abe7cb253c78d \ + --hash=sha256:28b89bc70f751b559aeca209e6120393d43fbe2490de0559662be7a9787e3d75 + # via -r src/backend/requirements-dev.in +markdown-it-py==4.0.0 \ + --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ + --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3 + # via rich +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba + # via markdown-it-py +nodeenv==1.10.0 \ + --hash=sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 \ + --hash=sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb + # via pre-commit +packaging==26.0 \ + --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ + --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # build + # pytest + # wheel +pdfminer-six==20260107 \ + --hash=sha256:366585ba97e80dffa8f00cebe303d2f381884d8637af4ce422f1df3ef38111a9 \ + --hash=sha256:96bfd431e3577a55a0efd25676968ca4ce8fd5b53f14565f85716ff363889602 + # via -r src/backend/requirements-dev.in +pip==26.0.1 \ + --hash=sha256:bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b \ + --hash=sha256:c4037d8a277c89b320abe636d59f91e6d0922d08a05b60e85e53b296613346d8 + # via pip-tools +pip-tools==7.5.3 \ + --hash=sha256:3aac0c473240ae90db7213c033401f345b05197293ccbdd2704e52e7a783785e \ + --hash=sha256:8fa364779ebc010cbfe17cb9de404457ac733e100840423f28f6955de7742d41 + # via -r src/backend/requirements-dev.in +platformdirs==4.9.4 \ + --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ + --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # python-discovery + # virtualenv +pluggy==1.6.0 \ + --hash=sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3 \ + --hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + # via pytest +pre-commit==4.5.1 \ + --hash=sha256:3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77 \ + --hash=sha256:eb545fcff725875197837263e977ea257a402056661f09dae08e4b149b030a61 + # via -r src/backend/requirements-dev.in +pycparser==3.0 \ + --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ + --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # cffi +pygments==2.19.2 \ + --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \ + --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b + # via + # pytest + # rich +pyproject-hooks==1.2.0 \ + --hash=sha256:1e859bd5c40fae9448642dd871adf459e5e2084186e8d2c2a79a824c970da1f8 \ + --hash=sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913 + # via + # build + # pip-tools +pytest==9.0.2 \ + --hash=sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b \ + --hash=sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11 + # via + # pytest-codspeed + # pytest-django +pytest-codspeed==4.3.0 \ + --hash=sha256:05baff2a61dc9f3e92b92b9c2ab5fb45d9b802438f5373073f5766a91319ed7a \ + --hash=sha256:10d19b48c9dc35b227a7ac863d4b3c58132256c2ba1aae3220aaddbf6f3f5f9a \ + --hash=sha256:34f2fd8497456eefbd325673f677ea80d93bb1bc08a578c1fa43a09cec3d1879 \ + --hash=sha256:5230d9d65f39063a313ed1820df775166227ec5c20a1122968f85653d5efee48 \ + --hash=sha256:527a3a02eaa3e4d4583adc4ba2327eef79628f3e1c682a4b959439551a72588e \ + --hash=sha256:619120775e92a3f43fb4ff4c256a251b1554c904d95e2154a382484283f0388a \ + --hash=sha256:6ac31ae566bf047e91c79b6d12d9a31efedad556ff9258294d6ecebeacb92fa4 \ + --hash=sha256:878aad5e4bb7b401ad8d82f3af5186030cd2bd0d0446782e10dabb9db8827466 \ + --hash=sha256:9858c2a6e1f391d5696757e7b6e9484749a7376c46f8b4dd9aebf093479a9667 \ + --hash=sha256:a2f5bb6d8898bea7db45e3c8b916ee48e36905b929477bb511b79c5a3ccacda4 \ + --hash=sha256:b2acecc4126658abebc683b38121adec405a46e18a619d49d6154c6e60c5deb2 \ + --hash=sha256:bec30f4fc9c4973143cd80f0d33fa780e9fa3e01e4dbe8cedf229e72f1212c62 \ + --hash=sha256:dbeff1eb2f2e36df088658b556fa993e6937bf64ffb07406de4db16fd2b26874 \ + --hash=sha256:df0d1f6ea594f29b745c634d66d5f5f1caa1c3abd2af82fea49d656038e8fc77 \ + --hash=sha256:df6a36a2a9da1406bc50428437f657f0bd8c842ae54bee5fb3ad30e01d50c0f5 \ + --hash=sha256:e6584e641cadf27d894ae90b87c50377232a97cbfd76ee0c7ecd0c056fa3f7f4 + # via -r src/backend/requirements-dev.in +pytest-django==4.12.0 \ + --hash=sha256:3ff300c49f8350ba2953b90297d23bf5f589db69545f56f1ec5f8cff5da83e85 \ + --hash=sha256:df94ec819a83c8979c8f6de13d9cdfbe76e8c21d39473cfe2b40c9fc9be3c758 + # via -r src/backend/requirements-dev.in +python-discovery==1.1.0 \ + --hash=sha256:447941ba1aed8cc2ab7ee3cb91be5fc137c5bdbb05b7e6ea62fbdcb66e50b268 \ + --hash=sha256:a162893b8809727f54594a99ad2179d2ede4bf953e12d4c7abc3cc9cdbd1437b + # via virtualenv +pyyaml==6.0.3 \ + --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ + --hash=sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a \ + --hash=sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3 \ + --hash=sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956 \ + --hash=sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6 \ + --hash=sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c \ + --hash=sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65 \ + --hash=sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a \ + --hash=sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0 \ + --hash=sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b \ + --hash=sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1 \ + --hash=sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6 \ + --hash=sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7 \ + --hash=sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e \ + --hash=sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007 \ + --hash=sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310 \ + --hash=sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4 \ + --hash=sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9 \ + --hash=sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295 \ + --hash=sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea \ + --hash=sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0 \ + --hash=sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e \ + --hash=sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac \ + --hash=sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9 \ + --hash=sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7 \ + --hash=sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35 \ + --hash=sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb \ + --hash=sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b \ + --hash=sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69 \ + --hash=sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5 \ + --hash=sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b \ + --hash=sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c \ + --hash=sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369 \ + --hash=sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd \ + --hash=sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824 \ + --hash=sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198 \ + --hash=sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065 \ + --hash=sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c \ + --hash=sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c \ + --hash=sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764 \ + --hash=sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196 \ + --hash=sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b \ + --hash=sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00 \ + --hash=sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac \ + --hash=sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8 \ + --hash=sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e \ + --hash=sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28 \ + --hash=sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3 \ + --hash=sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5 \ + --hash=sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4 \ + --hash=sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b \ + --hash=sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf \ + --hash=sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5 \ + --hash=sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702 \ + --hash=sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8 \ + --hash=sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788 \ + --hash=sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da \ + --hash=sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d \ + --hash=sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc \ + --hash=sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c \ + --hash=sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba \ + --hash=sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f \ + --hash=sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917 \ + --hash=sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5 \ + --hash=sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26 \ + --hash=sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f \ + --hash=sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b \ + --hash=sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be \ + --hash=sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c \ + --hash=sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3 \ + --hash=sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6 \ + --hash=sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926 \ + --hash=sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0 + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # pre-commit +requests==2.32.5 \ + --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ + --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # requests-mock +requests-mock==1.12.1 \ + --hash=sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563 \ + --hash=sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401 + # via -r src/backend/requirements-dev.in +rich==14.3.3 \ + --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ + --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b + # via pytest-codspeed +setuptools==82.0.0 \ + --hash=sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb \ + --hash=sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0 + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # -r src/backend/requirements-dev.in + # pip-tools +sqlparse==0.5.5 \ + --hash=sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba \ + --hash=sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # django + # django-silk +ty==0.0.1a21 \ + --hash=sha256:0efba2e52b58f536f4198ba5c4a36cac2ba67d83ec6f429ebc7704233bcda4c3 \ + --hash=sha256:1474d883129bb63da3b2380fc7ead824cd3baf6a9551e6aa476ffefc58057af3 \ + --hash=sha256:1f276ceab23a1410aec09508248c76ae0989c67fb7a0c287e0d4564994295531 \ + --hash=sha256:218d53e7919e885bd98e9196d9cb952d82178b299aa36da6f7f39333eb7400ed \ + --hash=sha256:21f708d02b6588323ffdbfdba38830dd0ecfd626db50aa6006b296b5470e52f9 \ + --hash=sha256:334d2a212ebf42a0e55d57561926af7679fe1e878175e11dcb81ad8df892844e \ + --hash=sha256:3c3bc66fcae41eff133cfe326dd65d82567a2fb5d4efe2128773b10ec2766819 \ + --hash=sha256:5dfc73299d441cc6454e36ed0a976877415024143dfca6592dc36f7701424383 \ + --hash=sha256:7505aeb8bf2a62f00f12cfa496f6c965074d75c8126268776565284c8a12d5dd \ + --hash=sha256:84243455f295ed850bd53f7089819321807d4e6ee3b1cbff6086137ae0259466 \ + --hash=sha256:87a200c21e02962e8a27374d9d152582331d57d709672431be58f4f898bf6cad \ + --hash=sha256:9463cac96b8f1bb5ba740fe1d42cd6bd152b43c5b159b2f07f8fd629bcdded34 \ + --hash=sha256:a8c769987d00fbc33054ff7e342633f475ea10dc43bc60fb9fb056159d48cb90 \ + --hash=sha256:ba13d03b9e095216ceb4e4d554a308517f28ab0a6e4dcd07cfe94563e4c2c489 \ + --hash=sha256:be8f457d7841b7ead2a3f6b65ba668abc172a1150a0f1f6c0958af3725dbb61a \ + --hash=sha256:cc0880ec344fbdf736b05d8d0da01f0caaaa02409bd9a24b68d18d0127a79b0e \ + --hash=sha256:e941e9a9d1e54b03eeaf9c3197c26a19cf76009fd5e41e16e5657c1c827bd6d3 \ + --hash=sha256:ecf41706b803827b0de8717f32a434dad1e67be9f4b8caf403e12013179ea06a + # via -r src/backend/requirements-dev.in +types-psycopg2==2.9.21.20260223 \ + --hash=sha256:78ed70de2e56bc6b5c26c8c1da8e9af54e49fdc3c94d1504609f3519e2b84f02 \ + --hash=sha256:c6228ade72d813b0624f4c03feeb89471950ac27cd0506b5debed6f053086bc8 + # via django-types +types-pyyaml==6.0.12.20250915 \ + --hash=sha256:0f8b54a528c303f0e6f7165687dd33fafa81c807fcac23f632b63aa624ced1d3 \ + --hash=sha256:e7d4d9e064e89a3b3cae120b4990cd370874d2bf12fa5f46c97018dd5d3c9ab6 + # via django-stubs +typing-extensions==4.15.0 \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # django-stubs + # django-stubs-ext + # django-test-migrations +urllib3==2.6.3 \ + --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \ + --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 + # via + # -c src/backend/requirements-3.14.txt + # -c src/backend/requirements.txt + # requests +virtualenv==21.1.0 \ + --hash=sha256:164f5e14c5587d170cf98e60378eb91ea35bf037be313811905d3a24ea33cc07 \ + --hash=sha256:1990a0188c8f16b6b9cf65c9183049007375b26aad415514d377ccacf1e4fb44 + # via pre-commit +wheel==0.46.3 \ + --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ + --hash=sha256:e3e79874b07d776c40bd6033f8ddf76a7dad46a7b8aa1b2787a83083519a1803 + # via pip-tools diff --git a/src/backend/requirements-dev.in b/src/backend/requirements-dev.in index a149abf7b0..577e64539f 100644 --- a/src/backend/requirements-dev.in +++ b/src/backend/requirements-dev.in @@ -1,5 +1,4 @@ # Dev requirements for InvenTree --c requirements.txt coverage[toml] # Unit test coverage django-querycount # Display number of URL queries for requests django-silk # API query profiling diff --git a/src/backend/requirements-dev.txt b/src/backend/requirements-dev.txt index ba69523baf..b70dca94c1 100644 --- a/src/backend/requirements-dev.txt +++ b/src/backend/requirements-dev.txt @@ -1,18 +1,18 @@ # This file was autogenerated by uv via the following command: -# uv pip compile src/backend/requirements-dev.in -o src/backend/requirements-dev.txt --no-strip-extras --generate-hashes -asgiref==3.10.0 \ - --hash=sha256:aef8a81283a34d0ab31630c9b7dfe70c812c95eba78171367ca8745e88124734 \ - --hash=sha256:d89f2d8cd8b56dada7d52fa7dc8075baa08fb836560710d38c292a7a3f78c04e +# uv pip compile src/backend/requirements-dev.in -o src/backend/requirements-dev.txt -c src/backend/requirements.txt +asgiref==3.11.1 \ + --hash=sha256:5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce \ + --hash=sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133 # via # -c src/backend/requirements.txt # django -build==1.3.0 \ - --hash=sha256:698edd0ea270bde950f53aed21f3a0135672206f3911e0176261a31e0e07b397 \ - --hash=sha256:7145f0b5061ba90a1500d60bd1b13ca0a8a4cebdd0cc16ed8adf1c0e739f43b4 +build==1.4.0 \ + --hash=sha256:6a07c1b8eb6f2b311b96fcbdbce5dab5fe637ffda0fd83c9cac622e927501596 \ + --hash=sha256:f1b91b925aa322be454f8330c6fb48b465da993d1e7e7e6fa35027ec49f3c936 # via pip-tools -certifi==2025.10.5 \ - --hash=sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de \ - --hash=sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43 +certifi==2026.2.25 \ + --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ + --hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7 # via # -c src/backend/requirements.txt # requests @@ -109,120 +109,120 @@ cfgv==3.5.0 \ --hash=sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 \ --hash=sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132 # via pre-commit -charset-normalizer==3.4.4 \ - --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ - --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ - --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \ - --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \ - --hash=sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc \ - --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \ - --hash=sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63 \ - --hash=sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d \ - --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \ - --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \ - --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \ - --hash=sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505 \ - --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \ - --hash=sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af \ - --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \ - --hash=sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318 \ - --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \ - --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \ - --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \ - --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \ - --hash=sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576 \ - --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \ - --hash=sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1 \ - --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \ - --hash=sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1 \ - --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \ - --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \ - --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \ - --hash=sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88 \ - --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \ - --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \ - --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \ - --hash=sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a \ - --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \ - --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \ - --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \ - --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \ - --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \ - --hash=sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7 \ - --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \ - --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \ - --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \ - --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \ - --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \ - --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \ - --hash=sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2 \ - --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \ - --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \ - --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \ - --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \ - --hash=sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf \ - --hash=sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6 \ - --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \ - --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \ - --hash=sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa \ - --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \ - --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \ - --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \ - --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \ - --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \ - --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \ - --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \ - --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \ - --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \ - --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \ - --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \ - --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \ - --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \ - --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \ - --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \ - --hash=sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3 \ - --hash=sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9 \ - --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \ - --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \ - --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \ - --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \ - --hash=sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50 \ - --hash=sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf \ - --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \ - --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \ - --hash=sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac \ - --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \ - --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \ - --hash=sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c \ - --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \ - --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \ - --hash=sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e \ - --hash=sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4 \ - --hash=sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84 \ - --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \ - --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \ - --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \ - --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \ - --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \ - --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \ - --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \ - --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \ - --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \ - --hash=sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074 \ - --hash=sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3 \ - --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \ - --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \ - --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \ - --hash=sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d \ - --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \ - --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \ - --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \ - --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \ - --hash=sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966 \ - --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \ - --hash=sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3 \ - --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \ - --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608 +charset-normalizer==3.4.5 \ + --hash=sha256:014837af6fabf57121b6254fa8ade10dceabc3528b27b721a64bbc7b8b1d4eb4 \ + --hash=sha256:01a1ed54b953303ca7e310fafe0fe347aab348bd81834a0bcd602eb538f89d66 \ + --hash=sha256:0294916d6ccf2d069727d65973c3a1ca477d68708db25fd758dd28b0827cff54 \ + --hash=sha256:02a9d1b01c1e12c27883b0c9349e0bcd9ae92e727ff1a277207e1a262b1cbf05 \ + --hash=sha256:036c079aa08a6a592b82487f97c60b439428320ed1b2ea0b3912e99d30c77765 \ + --hash=sha256:039215608ac7b358c4da0191d10fc76868567fbf276d54c14721bdedeb6de064 \ + --hash=sha256:0625665e4ebdddb553ab185de5db7054393af8879fb0c87bd5690d14379d6819 \ + --hash=sha256:0a45e504f5e1be0bd385935a8e1507c442349ca36f511a47057a71c9d1d6ea9e \ + --hash=sha256:0b362bcd27819f9c07cbf23db4e0e8cd4b44c5ecd900c2ff907b2b92274a7412 \ + --hash=sha256:0c300cefd9b0970381a46394902cd18eaf2aa00163f999590ace991989dcd0fc \ + --hash=sha256:1088345bcc93c58d8d8f3d783eca4a6e7a7752bbff26c3eee7e73c597c191c2e \ + --hash=sha256:10b473fc8dca1c3ad8559985794815f06ca3fc71942c969129070f2c3cdf7281 \ + --hash=sha256:131716d6786ad5e3dc542f5cc6f397ba3339dc0fb87f87ac30e550e8987756af \ + --hash=sha256:14498a429321de554b140013142abe7608f9d8ccc04d7baf2ad60498374aefa2 \ + --hash=sha256:149ec69866c3d6c2fb6f758dbc014ecb09f30b35a5ca90b6a8a2d4e54e18fdfe \ + --hash=sha256:165c7b21d19365464e8f70e5ce5e12524c58b48c78c1f5a57524603c1ab003f8 \ + --hash=sha256:1827734a5b308b65ac54e86a618de66f935a4f63a8a462ff1e19a6788d6c2262 \ + --hash=sha256:19092dde50335accf365cce21998a1c6dd8eafd42c7b226eb54b2747cdce2fac \ + --hash=sha256:1a374cc0b88aa710e8865dc1bd6edb3743c59f27830f0293ab101e4cf3ce9f85 \ + --hash=sha256:1d1401945cb77787dbd3af2446ff2d75912327c4c3a1526ab7955ecf8600687c \ + --hash=sha256:1f2da5cbb9becfcd607757a169e38fb82aa5fd86fae6653dea716e7b613fe2cf \ + --hash=sha256:259cd1ca995ad525f638e131dbcc2353a586564c038fc548a3fe450a91882139 \ + --hash=sha256:2820a98460c83663dd8ec015d9ddfd1e4879f12e06bb7d0500f044fb477d2770 \ + --hash=sha256:28269983f25a4da0425743d0d257a2d6921ea7d9b83599d4039486ec5b9f911d \ + --hash=sha256:2b970382e4a36bed897c19f310f31d7d13489c11b4f468ddfba42d41cddfb918 \ + --hash=sha256:2da4eedcb6338e2321e831a0165759c0c620e37f8cd044a263ff67493be8ffb3 \ + --hash=sha256:30987f4a8ed169983f93e1be8ffeea5214a779e27ed0b059835c7afe96550ad7 \ + --hash=sha256:30a2b1a48478c3428d047ed9690d57c23038dac838a87ad624c85c0a78ebeb39 \ + --hash=sha256:340810d34ef83af92148e96e3e44cb2d3f910d2bf95e5618a5c467d9f102231d \ + --hash=sha256:3f64c6bf8f32f9133b668c7f7a7cbdbc453412bc95ecdbd157f3b1e377a92990 \ + --hash=sha256:4167a621a9a1a986c73777dbc15d4b5eac8ac5c10393374109a343d4013ec765 \ + --hash=sha256:4354e401eb6dab9aed3c7b4030514328a6c748d05e1c3e19175008ca7de84fb1 \ + --hash=sha256:4481e6da1830c8a1cc0b746b47f603b653dadb690bcd851d039ffaefe70533aa \ + --hash=sha256:4b8551b6e6531e156db71193771c93bda78ffc4d1e6372517fe58ad3b91e4659 \ + --hash=sha256:4cd966c2559f501c6fd69294d082c2934c8dd4719deb32c22961a5ac6db0df1d \ + --hash=sha256:50bcbca6603c06a1dcc7b056ed45c37715fb5d2768feb3bcd37d2313c587a5b9 \ + --hash=sha256:530beedcec9b6e027e7a4b6ce26eed36678aa39e17da85e6e03d7bd9e8e9d7c9 \ + --hash=sha256:568e3c34b58422075a1b49575a6abc616d9751b4d61b23f712e12ebb78fe47b2 \ + --hash=sha256:573ef5814c4b7c0d59a7710aa920eaaaef383bd71626aa420fba27b5cab92e8d \ + --hash=sha256:58ad8270cfa5d4bef1bc85bd387217e14ff154d6630e976c6f56f9a040757475 \ + --hash=sha256:597d10dec876923e5c59e48dbd366e852eacb2b806029491d307daea6b917d7c \ + --hash=sha256:5bcb3227c3d9aaf73eaaab1db7ccd80a8995c509ee9941e2aae060ca6e4e5d81 \ + --hash=sha256:5cffde4032a197bd3b42fd0b9509ec60fb70918d6970e4cc773f20fc9180ca67 \ + --hash=sha256:5fea359734b140d0d6741189fea5478c6091b54ffc69d7ce119e0a05637d8c99 \ + --hash=sha256:60d68e820af339df4ae8358c7a2e7596badeb61e544438e489035f9fbf3246a5 \ + --hash=sha256:610f72c0ee565dfb8ae1241b666119582fdbfe7c0975c175be719f940e110694 \ + --hash=sha256:65a126fb4b070d05340a84fc709dd9e7c75d9b063b610ece8a60197a291d0adf \ + --hash=sha256:65b3c403a5b6b8034b655e7385de4f72b7b244869a22b32d4030b99a60593eca \ + --hash=sha256:66dee73039277eb35380d1b82cccc69cc82b13a66f9f4a18da32d573acf02b7c \ + --hash=sha256:708c7acde173eedd4bfa4028484426ba689d2103b28588c513b9db2cd5ecde9c \ + --hash=sha256:728c6a963dfab66ef865f49286e45239384249672cd598576765acc2a640a636 \ + --hash=sha256:754f96058e61a5e22e91483f823e07df16416ce76afa4ebf306f8e1d1296d43f \ + --hash=sha256:75dfd1afe0b1647449e852f4fb428195a7ed0588947218f7ba929f6538487f02 \ + --hash=sha256:75ee9c1cce2911581a70a3c0919d8bccf5b1cbc9b0e5171400ec736b4b569497 \ + --hash=sha256:76a9d0de4d0eab387822e7b35d8f89367dd237c72e82ab42b9f7bf5e15ada00f \ + --hash=sha256:77be992288f720306ab4108fe5c74797de327f3248368dfc7e1a916d6ed9e5a2 \ + --hash=sha256:7ad83b8f9379176c841f8865884f3514d905bcd2a9a3b210eaa446e7d2223e4d \ + --hash=sha256:8197abe5ca1ffb7d91e78360f915eef5addff270f8a71c1fc5be24a56f3e4873 \ + --hash=sha256:82cc7c2ad42faec8b574351f8bc2a0c049043893853317bd9bb309f5aba6cb5a \ + --hash=sha256:8a28afb04baa55abf26df544e3e5c6534245d3daa5178bc4a8eeb48202060d0e \ + --hash=sha256:8b78d8a609a4b82c273257ee9d631ded7fac0d875bdcdccc109f3ee8328cfcb1 \ + --hash=sha256:8ce11cd4d62d11166f2b441e30ace226c19a3899a7cf0796f668fba49a9fb123 \ + --hash=sha256:8fff79bf5978c693c9b1a4d71e4a94fddfb5fe744eb062a318e15f4a2f63a550 \ + --hash=sha256:92263f7eca2f4af326cd20de8d16728d2602f7cfea02e790dcde9d83c365d7cc \ + --hash=sha256:93b3b2cc5cf1b8743660ce77a4f45f3f6d1172068207c1defc779a36eea6bb36 \ + --hash=sha256:95adae7b6c42a6c5b5b559b1a99149f090a57128155daeea91732c8d970d8644 \ + --hash=sha256:97ab7787092eb9b50fb47fa04f24c75b768a606af1bcba1957f07f128a7219e4 \ + --hash=sha256:9db5e3fcdcee89a78c04dffb3fe33c79f77bd741a624946db2591c81b2fc85b0 \ + --hash=sha256:a118e2e0b5ae6b0120d5efa5f866e58f2bb826067a646431da4d6a2bdae7950e \ + --hash=sha256:a2aecdb364b8a1802afdc7f9327d55dad5366bc97d8502d0f5854e50712dbc5f \ + --hash=sha256:a66aa5022bf81ab4b1bebfb009db4fd68e0c6d4307a1ce5ef6a26e5878dfc9e4 \ + --hash=sha256:a68766a3c58fde7f9aaa22b3786276f62ab2f594efb02d0a1421b6282e852e98 \ + --hash=sha256:aa2f963b4da26daf46231d9b9e0e2c9408a751f8f0d0f44d2de56d3caf51d294 \ + --hash=sha256:aa92ec1102eaff840ccd1021478af176a831f1bccb08e526ce844b7ddda85c22 \ + --hash=sha256:ac59c15e3f1465f722607800c68713f9fbc2f672b9eb649fe831da4019ae9b23 \ + --hash=sha256:ae8b03427410731469c4033934cf473426faff3e04b69d2dfb64a4281a3719f8 \ + --hash=sha256:afca7f78067dd27c2b848f1b234623d26b87529296c6c5652168cc1954f2f3b2 \ + --hash=sha256:b2d37d78297b39a9eb9eb92c0f6df98c706467282055419df141389b23f93362 \ + --hash=sha256:b3e71afc578b98512bfe7bdb822dd6bc57d4b0093b4b6e5487c1e96ad4ace242 \ + --hash=sha256:ba20bdf69bd127f66d0174d6f2a93e69045e0b4036dc1ca78e091bcc765830c4 \ + --hash=sha256:c108f8619e504140569ee7de3f97d234f0fbae338a7f9f360455071ef9855a95 \ + --hash=sha256:c23eb3263356d94858655b3e63f85ac5d50970c6e8febcdde7830209139cc37d \ + --hash=sha256:c5af897b45fa606b12464ccbe0014bbf8c09191e0a66aab6aa9d5cf6e77e0c94 \ + --hash=sha256:c7a80a9242963416bd81f99349d5f3fce1843c303bd404f204918b6d75a75fd6 \ + --hash=sha256:c7e84e0c0005e3bdc1a9211cd4e62c78ba80bc37b2365ef4410cd2007a9047f2 \ + --hash=sha256:cace89841c0599d736d3d74a27bc5821288bb47c5441923277afc6059d7fbcb4 \ + --hash=sha256:cd2d0f0ec9aa977a27731a3209ebbcacebebaf41f902bd453a928bfd281cf7f8 \ + --hash=sha256:d01de5e768328646e6a3fa9e562706f8f6641708c115c62588aef2b941a4f88e \ + --hash=sha256:d1028de43596a315e2720a9849ee79007ab742c06ad8b45a50db8cdb7ed4a82a \ + --hash=sha256:d27ce22ec453564770d29d03a9506d449efbb9fa13c00842262b2f6801c48cce \ + --hash=sha256:d29dd9c016f2078b43d0c357511e87eee5b05108f3dd603423cb389b89813969 \ + --hash=sha256:d31f0d1671e1534e395f9eb84a68e0fb670e1edb1fe819a9d7f564ae3bc4e53f \ + --hash=sha256:d4eb8ac7469b2a5d64b5b8c04f84d8bf3ad340f4514b98523805cbf46e3b3923 \ + --hash=sha256:d5e52d127045d6ae01a1e821acfad2f3a1866c54d0e837828538fabe8d9d1bd6 \ + --hash=sha256:d77f97e515688bd615c1d1f795d540f32542d514242067adcb8ef532504cb9ee \ + --hash=sha256:d8ed79b8f6372ca4254955005830fd61c1ccdd8c0fac6603e2c145c61dd95db6 \ + --hash=sha256:dc57a0baa3eeedd99fafaef7511b5a6ef4581494e8168ee086031744e2679467 \ + --hash=sha256:e09f671a54ce70b79a1fc1dc6da3072b7ef7251fadb894ed92d9aa8218465a5f \ + --hash=sha256:e22d1059b951e7ae7c20ef6b06afd10fb95e3c41bf3c4fbc874dba113321c193 \ + --hash=sha256:e37bd100d2c5d3ba35db9c7c5ba5a9228cbcffe5c4778dc824b164e5257813d7 \ + --hash=sha256:e51ae7d81c825761d941962450f50d041db028b7278e7b08930b4541b3e45cb9 \ + --hash=sha256:e545b51da9f9af5c67815ca0eb40676c0f016d0b0381c86f20451e35696c5f95 \ + --hash=sha256:e6302ca4ae283deb0af68d2fbf467474b8b6aedcd3dab4db187e07f94c109763 \ + --hash=sha256:e71bbb595973622b817c042bd943c3f3667e9c9983ce3d205f973f486fec98a7 \ + --hash=sha256:ec56a2266f32bc06ed3c3e2a8f58417ce02f7e0356edc89786e52db13c593c98 \ + --hash=sha256:ed1a9a204f317ef879b32f9af507d47e49cd5e7f8e8d5d96358c98373314fc60 \ + --hash=sha256:ed97c282ee4f994ef814042423a529df9497e3c666dca19be1d4cd1129dc7ade \ + --hash=sha256:ed98364e1c262cf5f9363c3eca8c2df37024f52a8fa1180a3610014f26eac51c \ + --hash=sha256:ee57b926940ba00bca7ba7041e665cc956e55ef482f851b9b65acb20d867e7a2 \ + --hash=sha256:f1d725b754e967e648046f00c4facc42d414840f5ccc670c5670f59f83693e4f \ + --hash=sha256:f8102ae93c0bc863b1d41ea0f4499c20a83229f52ed870850892df555187154a \ + --hash=sha256:fc1c64934b8faf7584924143eb9db4770bbdb16659626e1a1a4d9efbcb68d947 \ + --hash=sha256:ff95a9283de8a457e6b12989de3f9f5193430f375d64297d323a615ea52cbdb3 # via # -c src/backend/requirements.txt # pdfminer-six @@ -231,155 +231,164 @@ click==8.3.1 \ --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \ --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 # via pip-tools -coverage[toml]==7.13.0 \ - --hash=sha256:0018f73dfb4301a89292c73be6ba5f58722ff79f51593352759c1790ded1cabe \ - --hash=sha256:00c3d22cf6fb1cf3bf662aaaa4e563be8243a5ed2630339069799835a9cc7f9b \ - --hash=sha256:02d9fb9eccd48f6843c98a37bd6817462f130b86da8660461e8f5e54d4c06070 \ - --hash=sha256:0602f701057c6823e5db1b74530ce85f17c3c5be5c85fc042ac939cbd909426e \ - --hash=sha256:06cac81bf10f74034e055e903f5f946e3e26fc51c09fc9f584e4a1605d977053 \ - --hash=sha256:086cede306d96202e15a4b77ace8472e39d9f4e5f9fd92dd4fecdfb2313b2080 \ - --hash=sha256:0900872f2fdb3ee5646b557918d02279dc3af3dfb39029ac4e945458b13f73bc \ - --hash=sha256:0a3a30f0e257df382f5f9534d4ce3d4cf06eafaf5192beb1a7bd066cb10e78fb \ - --hash=sha256:0b3d67d31383c4c68e19a88e28fc4c2e29517580f1b0ebec4a069d502ce1e0bf \ - --hash=sha256:0dfa3855031070058add1a59fdfda0192fd3e8f97e7c81de0596c145dea51820 \ - --hash=sha256:0f4872f5d6c54419c94c25dd6ae1d015deeb337d06e448cd890a1e89a8ee7f3b \ - --hash=sha256:11c21557d0e0a5a38632cbbaca5f008723b26a89d70db6315523df6df77d6232 \ - --hash=sha256:166ad2a22ee770f5656e1257703139d3533b4a0b6909af67c6b4a3adc1c98657 \ - --hash=sha256:193c3887285eec1dbdb3f2bd7fbc351d570ca9c02ca756c3afbc71b3c98af6ef \ - --hash=sha256:1d84e91521c5e4cb6602fe11ece3e1de03b2760e14ae4fcf1a4b56fa3c801fcd \ - --hash=sha256:1ed5630d946859de835a85e9a43b721123a8a44ec26e2830b296d478c7fd4259 \ - --hash=sha256:22486cdafba4f9e471c816a2a5745337742a617fef68e890d8baf9f3036d7833 \ - --hash=sha256:22ccfe8d9bb0d6134892cbe1262493a8c70d736b9df930f3f3afae0fe3ac924d \ - --hash=sha256:24e4e56304fdb56f96f80eabf840eab043b3afea9348b88be680ec5986780a0f \ - --hash=sha256:25dc33618d45456ccb1d37bce44bc78cf269909aa14c4db2e03d63146a8a1493 \ - --hash=sha256:263c3dbccc78e2e331e59e90115941b5f53e85cfcc6b3b2fbff1fd4e3d2c6ea8 \ - --hash=sha256:28ee1c96109974af104028a8ef57cec21447d42d0e937c0275329272e370ebcf \ - --hash=sha256:30a3a201a127ea57f7e14ba43c93c9c4be8b7d17a26e03bb49e6966d019eede9 \ - --hash=sha256:3188936845cd0cb114fa6a51842a304cdbac2958145d03be2377ec41eb285d19 \ - --hash=sha256:367449cf07d33dc216c083f2036bb7d976c6e4903ab31be400ad74ad9f85ce98 \ - --hash=sha256:37eee4e552a65866f15dedd917d5e5f3d59805994260720821e2c1b51ac3248f \ - --hash=sha256:3a10260e6a152e5f03f26db4a407c4c62d3830b9af9b7c0450b183615f05d43b \ - --hash=sha256:3a7b1cd820e1b6116f92c6128f1188e7afe421c7e1b35fa9836b11444e53ebd9 \ - --hash=sha256:3ab483ea0e251b5790c2aac03acde31bff0c736bf8a86829b89382b407cd1c3b \ - --hash=sha256:3ad968d1e3aa6ce5be295ab5fe3ae1bf5bb4769d0f98a80a0252d543a2ef2e9e \ - --hash=sha256:445badb539005283825959ac9fa4a28f712c214b65af3a2c464f1adc90f5fcbc \ - --hash=sha256:453b7ec753cf5e4356e14fe858064e5520c460d3bbbcb9c35e55c0d21155c256 \ - --hash=sha256:494f5459ffa1bd45e18558cd98710c36c0b8fbfa82a5eabcbe671d80ecffbfe8 \ - --hash=sha256:4b5de7d4583e60d5fd246dd57fcd3a8aa23c6e118a8c72b38adf666ba8e7e927 \ - --hash=sha256:4f3e223b2b2db5e0db0c2b97286aba0036ca000f06aca9b12112eaa9af3d92ae \ - --hash=sha256:4fdb6f54f38e334db97f72fa0c701e66d8479af0bc3f9bfb5b90f1c30f54500f \ - --hash=sha256:51a202e0f80f241ccb68e3e26e19ab5b3bf0f813314f2c967642f13ebcf1ddfe \ - --hash=sha256:581f086833d24a22c89ae0fe2142cfaa1c92c930adf637ddf122d55083fb5a0f \ - --hash=sha256:583221913fbc8f53b88c42e8dbb8fca1d0f2e597cb190ce45916662b8b9d9621 \ - --hash=sha256:58632b187be6f0be500f553be41e277712baa278147ecb7559983c6d9faf7ae1 \ - --hash=sha256:5c67dace46f361125e6b9cace8fe0b729ed8479f47e70c89b838d319375c8137 \ - --hash=sha256:5e70f92ef89bac1ac8a99b3324923b4749f008fdbd7aa9cb35e01d7a284a04f9 \ - --hash=sha256:5f5d9bd30756fff3e7216491a0d6d520c448d5124d3d8e8f56446d6412499e74 \ - --hash=sha256:5f8a0297355e652001015e93be345ee54393e45dc3050af4a0475c5a2b767d46 \ - --hash=sha256:62d7c4f13102148c78d7353c6052af6d899a7f6df66a32bddcc0c0eb7c5326f8 \ - --hash=sha256:69ac2c492918c2461bc6ace42d0479638e60719f2a4ef3f0815fa2df88e9f940 \ - --hash=sha256:6abb3a4c52f05e08460bd9acf04fec027f8718ecaa0d09c40ffbc3fbd70ecc39 \ - --hash=sha256:6e63ccc6e0ad8986386461c3c4b737540f20426e7ec932f42e030320896c311a \ - --hash=sha256:6e9e451dee940a86789134b6b0ffbe31c454ade3b849bb8a9d2cca2541a8e91d \ - --hash=sha256:6fb2d5d272341565f08e962cce14cdf843a08ac43bd621783527adb06b089c4b \ - --hash=sha256:71936a8b3b977ddd0b694c28c6a34f4fff2e9dd201969a4ff5d5fc7742d614b0 \ - --hash=sha256:73419b89f812f498aca53f757dd834919b48ce4799f9d5cad33ca0ae442bdb1a \ - --hash=sha256:739c6c051a7540608d097b8e13c76cfa85263ced467168dc6b477bae3df7d0e2 \ - --hash=sha256:7464663eaca6adba4175f6c19354feea61ebbdd735563a03d1e472c7072d27bb \ - --hash=sha256:74c136e4093627cf04b26a35dab8cbfc9b37c647f0502fc313376e11726ba303 \ - --hash=sha256:76541dc8d53715fb4f7a3a06b34b0dc6846e3c69bc6204c55653a85dd6220971 \ - --hash=sha256:7a485ff48fbd231efa32d58f479befce52dcb6bfb2a88bb7bf9a0b89b1bc8030 \ - --hash=sha256:7e442c013447d1d8d195be62852270b78b6e255b79b8675bad8479641e21fd96 \ - --hash=sha256:7f15a931a668e58087bc39d05d2b4bf4b14ff2875b49c994bbdb1c2217a8daeb \ - --hash=sha256:7f88ae3e69df2ab62fb0bc5219a597cb890ba5c438190ffa87490b315190bb33 \ - --hash=sha256:8069e831f205d2ff1f3d355e82f511eb7c5522d7d413f5db5756b772ec8697f8 \ - --hash=sha256:850d2998f380b1e266459ca5b47bc9e7daf9af1d070f66317972f382d46f1904 \ - --hash=sha256:898cce66d0836973f48dda4e3514d863d70142bdf6dfab932b9b6a90ea5b222d \ - --hash=sha256:9097818b6cc1cfb5f174e3263eba4a62a17683bcfe5c4b5d07f4c97fa51fbf28 \ - --hash=sha256:936bc20503ce24770c71938d1369461f0c5320830800933bc3956e2a4ded930e \ - --hash=sha256:9372dff5ea15930fea0445eaf37bbbafbc771a49e70c0aeed8b4e2c2614cc00e \ - --hash=sha256:9987a9e4f8197a1000280f7cc089e3ea2c8b3c0a64d750537809879a7b4ceaf9 \ - --hash=sha256:99acd4dfdfeb58e1937629eb1ab6ab0899b131f183ee5f23e0b5da5cba2fec74 \ - --hash=sha256:9b01c22bc74a7fb44066aaf765224c0d933ddf1f5047d6cdfe4795504a4493f8 \ - --hash=sha256:a00d3a393207ae12f7c49bb1c113190883b500f48979abb118d8b72b8c95c032 \ - --hash=sha256:a23e5a1f8b982d56fa64f8e442e037f6ce29322f1f9e6c2344cd9e9f4407ee57 \ - --hash=sha256:a2bdb3babb74079f021696cb46b8bb5f5661165c385d3a238712b031a12355be \ - --hash=sha256:a394aa27f2d7ff9bc04cf703817773a59ad6dfbd577032e690f961d2460ee936 \ - --hash=sha256:a6c6e16b663be828a8f0b6c5027d36471d4a9f90d28444aa4ced4d48d7d6ae8f \ - --hash=sha256:af0a583efaacc52ae2521f8d7910aff65cdb093091d76291ac5820d5e947fc1c \ - --hash=sha256:af827b7cbb303e1befa6c4f94fd2bf72f108089cfa0f8abab8f4ca553cf5ca5a \ - --hash=sha256:c4be718e51e86f553bcf515305a158a1cd180d23b72f07ae76d6017c3cc5d791 \ - --hash=sha256:cdb3c9f8fef0a954c632f64328a3935988d33a6604ce4bf67ec3e39670f12ae5 \ - --hash=sha256:d10fd186aac2316f9bbb46ef91977f9d394ded67050ad6d84d94ed6ea2e8e54e \ - --hash=sha256:d1e97353dcc5587b85986cda4ff3ec98081d7e84dd95e8b2a6d59820f0545f8a \ - --hash=sha256:d2a9d7f1c11487b1c69367ab3ac2d81b9b3721f097aa409a3191c3e90f8f3dd7 \ - --hash=sha256:de7f6748b890708578fc4b7bb967d810aeb6fcc9bff4bb77dbca77dab2f9df6a \ - --hash=sha256:e5330fa0cc1f5c3c4c3bb8e101b742025933e7848989370a1d4c8c5e401ea753 \ - --hash=sha256:e999e2dcc094002d6e2c7bbc1fb85b58ba4f465a760a8014d97619330cdbbbf3 \ - --hash=sha256:eb76670874fdd6091eedcc856128ee48c41a9bbbb9c3f1c7c3cf169290e3ffd6 \ - --hash=sha256:f1c23e24a7000da892a312fb17e33c5f94f8b001de44b7cf8ba2e36fbd15859e \ - --hash=sha256:f2ffc92b46ed6e6760f1d47a71e56b5664781bc68986dbd1836b2b70c0ce2071 \ - --hash=sha256:f4f72a85316d8e13234cafe0a9f81b40418ad7a082792fa4165bd7d45d96066b \ - --hash=sha256:f59883c643cb19630500f57016f76cfdcd6845ca8c5b5ea1f6e17f74c8e5f511 \ - --hash=sha256:f6aaef16d65d1787280943f1c8718dc32e9cf141014e4634d64446702d26e0ff \ - --hash=sha256:fe81055d8c6c9de76d60c94ddea73c290b416e061d40d542b24a5871bad498b7 \ - --hash=sha256:ff45e0cd8451e293b63ced93161e189780baf444119391b3e7d25315060368a6 +coverage[toml]==7.13.4 \ + --hash=sha256:01d4cbc3c283a17fc1e42d614a119f7f438eabb593391283adca8dc86eff1246 \ + --hash=sha256:02231499b08dabbe2b96612993e5fc34217cdae907a51b906ac7fca8027a4459 \ + --hash=sha256:0dd7ab8278f0d58a0128ba2fca25824321f05d059c1441800e934ff2efa52129 \ + --hash=sha256:0e086334e8537ddd17e5f16a344777c1ab8194986ec533711cbe6c41cde841b6 \ + --hash=sha256:0fc31c787a84f8cd6027eba44010517020e0d18487064cd3d8968941856d1415 \ + --hash=sha256:14375934243ee05f56c45393fe2ce81fe5cc503c07cee2bdf1725fb8bef3ffaf \ + --hash=sha256:1731dc33dc276dafc410a885cbf5992f1ff171393e48a21453b78727d090de80 \ + --hash=sha256:19bc3c88078789f8ef36acb014d7241961dbf883fd2533d18cb1e7a5b4e28b11 \ + --hash=sha256:1af1641e57cf7ba1bd67d677c9abdbcd6cc2ab7da3bca7fa1e2b7e50e65f2ad0 \ + --hash=sha256:1d4be36a5114c499f9f1f9195e95ebf979460dbe2d88e6816ea202010ba1c34b \ + --hash=sha256:200dea7d1e8095cc6e98cdabe3fd1d21ab17d3cee6dab00cadbb2fe35d9c15b9 \ + --hash=sha256:23e3f687cf945070d1c90f85db66d11e3025665d8dafa831301a0e0038f3db9b \ + --hash=sha256:2421d591f8ca05b308cf0092807308b2facbefe54af7c02ac22548b88b95c98f \ + --hash=sha256:245e37f664d89861cf2329c9afa2c1fe9e6d4e1a09d872c947e70718aeeac505 \ + --hash=sha256:25381386e80ae727608e662474db537d4df1ecd42379b5ba33c84633a2b36d47 \ + --hash=sha256:25a41c3104d08edb094d9db0d905ca54d0cd41c928bb6be3c4c799a54753af55 \ + --hash=sha256:296f8b0af861d3970c2a4d8c91d48eb4dd4771bcef9baedec6a9b515d7de3def \ + --hash=sha256:29e3220258d682b6226a9b0925bc563ed9a1ebcff3cad30f043eceea7eaf2689 \ + --hash=sha256:2a09cfa6a5862bc2fc6ca7c3def5b2926194a56b8ab78ffcf617d28911123012 \ + --hash=sha256:2b0f6ccf3dbe577170bebfce1318707d0e8c3650003cb4b3a9dd744575daa8b5 \ + --hash=sha256:2c048ea43875fbf8b45d476ad79f179809c590ec7b79e2035c662e7afa3192e3 \ + --hash=sha256:2cb0f1e000ebc419632bbe04366a8990b6e32c4e0b51543a6484ffe15eaeda95 \ + --hash=sha256:2fa8d5f8de70688a28240de9e139fa16b153cc3cbb01c5f16d88d6505ebdadf9 \ + --hash=sha256:300deaee342f90696ed186e3a00c71b5b3d27bffe9e827677954f4ee56969601 \ + --hash=sha256:30b8d0512f2dc8c8747557e8fb459d6176a2c9e5731e2b74d311c03b78451997 \ + --hash=sha256:33901f604424145c6e9c2398684b92e176c0b12df77d52db81c20abd48c3794c \ + --hash=sha256:3599eb3992d814d23b35c536c28df1a882caa950f8f507cef23d1cbf334995ac \ + --hash=sha256:391ee8f19bef69210978363ca930f7328081c6a0152f1166c91f0b5fdd2a773c \ + --hash=sha256:3998e5a32e62fdf410c0dbd3115df86297995d6e3429af80b8798aad894ca7aa \ + --hash=sha256:3c06f0f1337c667b971ca2f975523347e63ec5e500b9aa5882d91931cd3ef750 \ + --hash=sha256:40aa8808140e55dc022b15d8aa7f651b6b3d68b365ea0398f1441e0b04d859c3 \ + --hash=sha256:40d74da8e6c4b9ac18b15331c4b5ebc35a17069410cad462ad4f40dcd2d50c0d \ + --hash=sha256:4223b4230a376138939a9173f1bdd6521994f2aff8047fae100d6d94d50c5a12 \ + --hash=sha256:48685fee12c2eb3b27c62f2658e7ea21e9c3239cba5a8a242801a0a3f6a8c62a \ + --hash=sha256:4c7d3cc01e7350f2f0f6f7036caaf5673fb56b6998889ccfe9e1c1fe75a9c932 \ + --hash=sha256:4e83efc079eb39480e6346a15a1bcb3e9b04759c5202d157e1dd4303cd619356 \ + --hash=sha256:4fc7fa81bbaf5a02801b65346c8b3e657f1d93763e58c0abdf7c992addd81a92 \ + --hash=sha256:53d133df809c743eb8bce33b24bcababb371f4441340578cd406e084d94a6148 \ + --hash=sha256:590c0ed4bf8e85f745e6b805b2e1c457b2e33d5255dd9729743165253bc9ad39 \ + --hash=sha256:5b856a8ccf749480024ff3bd7310adaef57bf31fd17e1bfc404b7940b6986634 \ + --hash=sha256:65dfcbe305c3dfe658492df2d85259e0d79ead4177f9ae724b6fb245198f55d6 \ + --hash=sha256:6f01afcff62bf9a08fb32b2c1d6e924236c0383c02c790732b6537269e466a72 \ + --hash=sha256:6fdef321fdfbb30a197efa02d48fcd9981f0d8ad2ae8903ac318adc653f5df98 \ + --hash=sha256:71ca20079dd8f27fcf808817e281e90220475cd75115162218d0e27549f95fef \ + --hash=sha256:725d985c5ab621268b2edb8e50dfe57633dc69bda071abc470fed55a14935fd3 \ + --hash=sha256:75eab1ebe4f2f64d9509b984f9314d4aa788540368218b858dad56dc8f3e5eb9 \ + --hash=sha256:75fcd519f2a5765db3f0e391eb3b7d150cce1a771bf4c9f861aeab86c767a3c0 \ + --hash=sha256:76451d1978b95ba6507a039090ba076105c87cc76fc3efd5d35d72093964d49a \ + --hash=sha256:784fc3cf8be001197b652d51d3fd259b1e2262888693a4636e18879f613a62a9 \ + --hash=sha256:78cdf0d578b15148b009ccf18c686aa4f719d887e76e6b40c38ffb61d264a552 \ + --hash=sha256:79be69cf7f3bf9b0deeeb062eab7ac7f36cd4cc4c4dd694bd28921ba4d8596cc \ + --hash=sha256:79e73a76b854d9c6088fe5d8b2ebe745f8681c55f7397c3c0a016192d681045f \ + --hash=sha256:7b322db1284a2ed3aa28ffd8ebe3db91c929b7a333c0820abec3d838ef5b3525 \ + --hash=sha256:7d41eead3cc673cbd38a4417deb7fd0b4ca26954ff7dc6078e33f6ff97bed940 \ + --hash=sha256:7eda778067ad7ffccd23ecffce537dface96212576a07924cbf0d8799d2ded5a \ + --hash=sha256:7f57b33491e281e962021de110b451ab8a24182589be17e12a22c79047935e23 \ + --hash=sha256:8041b6c5bfdc03257666e9881d33b1abc88daccaf73f7b6340fb7946655cd10f \ + --hash=sha256:8248977c2e33aecb2ced42fef99f2d319e9904a36e55a8a68b69207fb7e43edc \ + --hash=sha256:845f352911777a8e722bfce168958214951e07e47e5d5d9744109fa5fe77f79b \ + --hash=sha256:85480adfb35ffc32d40918aad81b89c69c9cc5661a9b8a81476d3e645321a056 \ + --hash=sha256:8e264226ec98e01a8e1054314af91ee6cde0eacac4f465cc93b03dbe0bce2fd7 \ + --hash=sha256:8e798c266c378da2bd819b0677df41ab46d78065fb2a399558f3f6cae78b2fbb \ + --hash=sha256:9181a3ccead280b828fae232df12b16652702b49d41e99d657f46cc7b1f6ec7a \ + --hash=sha256:9351229c8c8407645840edcc277f4a2d44814d1bc34a2128c11c2a031d45a5dd \ + --hash=sha256:93550784d9281e374fb5a12bf1324cc8a963fd63b2d2f223503ef0fd4aa339ea \ + --hash=sha256:9401ebc7ef522f01d01d45532c68c5ac40fb27113019b6b7d8b208f6e9baa126 \ + --hash=sha256:94eb63f9b363180aff17de3e7c8760c3ba94664ea2695c52f10111244d16a299 \ + --hash=sha256:9d107aff57a83222ddbd8d9ee705ede2af2cc926608b57abed8ef96b50b7e8f9 \ + --hash=sha256:a32ebc02a1805adf637fc8dec324b5cdacd2e493515424f70ee33799573d661b \ + --hash=sha256:a3aa4e7b9e416774b21797365b358a6e827ffadaaca81b69ee02946852449f00 \ + --hash=sha256:a6f94a7d00eb18f1b6d403c91a88fd58cfc92d4b16080dfdb774afc8294469bf \ + --hash=sha256:aa3feb8db2e87ff5e6d00d7e1480ae241876286691265657b500886c98f38bda \ + --hash=sha256:ad27098a189e5838900ce4c2a99f2fe42a0bf0c2093c17c69b45a71579e8d4a2 \ + --hash=sha256:ae4578f8528569d3cf303fef2ea569c7f4c4059a38c8667ccef15c6e1f118aa5 \ + --hash=sha256:b1ec7b6b6e93255f952e27ab58fbc68dcc468844b16ecbee881aeb29b6ab4d8d \ + --hash=sha256:b507778ae8a4c915436ed5c2e05b4a6cecfa70f734e19c22a005152a11c7b6a9 \ + --hash=sha256:b66a2da594b6068b48b2692f043f35d4d3693fb639d5ea8b39533c2ad9ac3ab9 \ + --hash=sha256:b720ce6a88a2755f7c697c23268ddc47a571b88052e6b155224347389fdf6a3b \ + --hash=sha256:b7b38448866e83176e28086674fe7368ab8590e4610fb662b44e345b86d63ffa \ + --hash=sha256:b8eb931ee8e6d8243e253e5ed7336deea6904369d2fd8ae6e43f68abbf167092 \ + --hash=sha256:bb28c0f2cf2782508a40cec377935829d5fcc3ad9a3681375af4e84eb34b6b58 \ + --hash=sha256:bd60d4fe2f6fa7dff9223ca1bbc9f05d2b6697bc5961072e5d3b952d46e1b1ea \ + --hash=sha256:c35eb28c1d085eb7d8c9b3296567a1bebe03ce72962e932431b9a61f28facf26 \ + --hash=sha256:c4240e7eded42d131a2d2c4dec70374b781b043ddc79a9de4d55ca71f8e98aea \ + --hash=sha256:caa421e2684e382c5d8973ac55e4f36bed6821a9bad5c953494de960c74595c9 \ + --hash=sha256:d490ba50c3f35dd7c17953c68f3270e7ccd1c6642e2d2afe2d8e720b98f5a053 \ + --hash=sha256:d65b2d373032411e86960604dc4edac91fdfb5dca539461cf2cbe78327d1e64f \ + --hash=sha256:dae88bc0fc77edaa65c14be099bd57ee140cf507e6bfdeea7938457ab387efb0 \ + --hash=sha256:de6defc1c9badbf8b9e67ae90fd00519186d6ab64e5cc5f3d21359c2a9b2c1d3 \ + --hash=sha256:e101609bcbbfb04605ea1027b10dc3735c094d12d40826a60f897b98b1c30256 \ + --hash=sha256:e24f9156097ff9dc286f2f913df3a7f63c0e333dcafa3c196f2c18b4175ca09a \ + --hash=sha256:e2f25215f1a359ab17320b47bcdaca3e6e6356652e8256f2441e4ef972052903 \ + --hash=sha256:e5c8f6ed1e61a8b2dcdf31eb0b9bbf0130750ca79c1c49eb898e2ad86f5ccc91 \ + --hash=sha256:e6f70dec1cc557e52df5306d051ef56003f74d56e9c4dd7ddb07e07ef32a84dd \ + --hash=sha256:e856bf6616714c3a9fbc270ab54103f4e685ba236fa98c054e8f87f266c93505 \ + --hash=sha256:e87f6c587c3f34356c3759f0420693e35e7eb0e2e41e4c011cb6ec6ecbbf1db7 \ + --hash=sha256:eb30bf180de3f632cd043322dad5751390e5385108b2807368997d1a92a509d0 \ + --hash=sha256:eb88b316ec33760714a4720feb2816a3a59180fd58c1985012054fa7aebee4c2 \ + --hash=sha256:eb9078108fbf0bcdde37c3f4779303673c2fa1fe8f7956e68d447d0dd426d38a \ + --hash=sha256:ecae9737b72408d6a950f7e525f30aca12d4bd8dd95e37342e5beb3a2a8c4f71 \ + --hash=sha256:ee756f00726693e5ba94d6df2bdfd64d4852d23b09bb0bc700e3b30e6f333985 \ + --hash=sha256:f4594c67d8a7c89cf922d9df0438c7c7bb022ad506eddb0fdb2863359ff78242 \ + --hash=sha256:f53d492307962561ac7de4cd1de3e363589b000ab69617c6156a16ba7237998d \ + --hash=sha256:fb07dc5da7e849e2ad31a5d74e9bece81f30ecf5a42909d0a695f8bd1874d6af \ + --hash=sha256:fb26a934946a6afe0e326aebe0730cdff393a8bc0bbb65a2f41e30feddca399c \ + --hash=sha256:fdfc1e28e7c7cdce44985b3043bc13bbd9c747520f94a4d7164af8260b3d91f0 # via -r src/backend/requirements-dev.in -cryptography==46.0.3 \ - --hash=sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217 \ - --hash=sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d \ - --hash=sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc \ - --hash=sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71 \ - --hash=sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971 \ - --hash=sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a \ - --hash=sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926 \ - --hash=sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc \ - --hash=sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d \ - --hash=sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b \ - --hash=sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20 \ - --hash=sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044 \ - --hash=sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3 \ - --hash=sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715 \ - --hash=sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4 \ - --hash=sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506 \ - --hash=sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f \ - --hash=sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0 \ - --hash=sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683 \ - --hash=sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3 \ - --hash=sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21 \ - --hash=sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91 \ - --hash=sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c \ - --hash=sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8 \ - --hash=sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df \ - --hash=sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c \ - --hash=sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb \ - --hash=sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7 \ - --hash=sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04 \ - --hash=sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db \ - --hash=sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459 \ - --hash=sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea \ - --hash=sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914 \ - --hash=sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717 \ - --hash=sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9 \ - --hash=sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac \ - --hash=sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32 \ - --hash=sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec \ - --hash=sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1 \ - --hash=sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb \ - --hash=sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac \ - --hash=sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665 \ - --hash=sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e \ - --hash=sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb \ - --hash=sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5 \ - --hash=sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936 \ - --hash=sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de \ - --hash=sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372 \ - --hash=sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54 \ - --hash=sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422 \ - --hash=sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849 \ - --hash=sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c \ - --hash=sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963 \ - --hash=sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018 +cryptography==46.0.5 \ + --hash=sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72 \ + --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ + --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ + --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ + --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ + --hash=sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad \ + --hash=sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4 \ + --hash=sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c \ + --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ + --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ + --hash=sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31 \ + --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ + --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ + --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ + --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ + --hash=sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4 \ + --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ + --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ + --hash=sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595 \ + --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ + --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ + --hash=sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48 \ + --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ + --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ + --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ + --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ + --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ + --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ + --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ + --hash=sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7 \ + --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ + --hash=sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2 \ + --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ + --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ + --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ + --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ + --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ + --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ + --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ + --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ + --hash=sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a \ + --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ + --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ + --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ + --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ + --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ + --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ + --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ + --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 # via # -c src/backend/requirements.txt # pdfminer-six @@ -387,9 +396,9 @@ distlib==0.4.0 \ --hash=sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 \ --hash=sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d # via virtualenv -django==5.2.9 \ - --hash=sha256:16b5ccfc5e8c27e6c0561af551d2ea32852d7352c67d452ae3e76b4f6b2ca495 \ - --hash=sha256:3a4ea88a70370557ab1930b332fd2887a9f48654261cdffda663fef5976bb00a +django==5.2.12 \ + --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ + --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb # via # -c src/backend/requirements.txt # django-silk @@ -406,33 +415,35 @@ django-silk==5.4.3 \ django-slowtests==1.1.1 \ --hash=sha256:3c6936d420c9df444ac03625b41d97de043c662bbde61fbcd33e4cd407d0c247 # via -r src/backend/requirements-dev.in -django-stubs==5.2.8 \ - --hash=sha256:9bba597c9a8ed8c025cae4696803d5c8be1cf55bfc7648a084cbf864187e2f8b \ - --hash=sha256:a3c63119fd7062ac63d58869698d07c9e5ec0561295c4e700317c54e8d26716c +django-stubs==5.2.9 \ + --hash=sha256:2317a7130afdaa76f6ff7f623650d7f3bf1b6c86a60f95840e14e6ec6de1a7cd \ + --hash=sha256:c192257120b08785cfe6f2f1c91f1797aceae8e9daa689c336e52c91e8f6a493 # via -r src/backend/requirements-dev.in -django-stubs-ext==5.2.8 \ - --hash=sha256:1dd5470c9675591362c78a157a3cf8aec45d0e7a7f0cf32f227a1363e54e0652 \ - --hash=sha256:b39938c46d7a547cd84e4a6378dbe51a3dd64d70300459087229e5fee27e5c6b +django-stubs-ext==5.2.9 \ + --hash=sha256:230c51575551b0165be40177f0f6805f1e3ebf799b835c85f5d64c371ca6cf71 \ + --hash=sha256:6db4054d1580657b979b7d391474719f1a978773e66c7070a5e246cd445a25a9 # via django-stubs django-test-migrations==1.5.0 \ --hash=sha256:1cbff04b1e82c5564a6f635284907b381cc11a2ff883adff46776d9126824f07 \ --hash=sha256:96a08f085fc8bfaa53d44618341d82a2d22fd194c821cd81b147b66f0bec0da8 # via -r src/backend/requirements-dev.in -django-types==0.22.0 \ - --hash=sha256:4cecc9eee846e7ff2a398bec9dfe6543e76efb922a7a58c5d6064bcb0e6a3dc5 \ - --hash=sha256:ba15c756c7a732e58afd0737e54489f1c5e6f1bd24132e9199c637b1f88b057c +django-types==0.23.0 \ + --hash=sha256:0727b13ae810c4b1f14eeac9872834ac928c99dc76584ea7c23afc4461e049dd \ + --hash=sha256:f97fb746166fb15a5f40e470a1fd7a58226349aac9e0a9cb8ae81deb14d94fd0 # via -r src/backend/requirements-dev.in -filelock==3.20.1 \ - --hash=sha256:15d9e9a67306188a44baa72f569d2bfd803076269365fdea0934385da4dc361a \ - --hash=sha256:b8360948b351b80f420878d8516519a2204b07aefcdcfd24912a5d33127f188c - # via virtualenv +filelock==3.25.0 \ + --hash=sha256:5ccf8069f7948f494968fc0713c10e5c182a9c9d9eef3a636307a20c2490f047 \ + --hash=sha256:8f00faf3abf9dc730a1ffe9c354ae5c04e079ab7d3a683b7c32da5dd05f26af3 + # via + # python-discovery + # virtualenv gprof2dot==2025.4.14 \ --hash=sha256:0742e4c0b4409a5e8777e739388a11e1ed3750be86895655312ea7c20bd0090e \ --hash=sha256:35743e2d2ca027bf48fa7cba37021aaf4a27beeae1ae8e05a50b55f1f921a6ce # via django-silk -identify==2.6.15 \ - --hash=sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757 \ - --hash=sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf +identify==2.6.17 \ + --hash=sha256:be5f8412d5ed4b20f2bd41a65f920990bdccaa6a4a18a08f1eefdcd0bdd885f0 \ + --hash=sha256:f816b0b596b204c9fdf076ded172322f2723cf958d02f9c3587504834c8ff04d # via pre-commit idna==3.11 \ --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ @@ -444,9 +455,9 @@ iniconfig==2.3.0 \ --hash=sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730 \ --hash=sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12 # via pytest -isort==7.0.0 \ - --hash=sha256:1bcabac8bc3c36c7fb7b98a76c8abb18e0f841a3ba81decac7691008592499c1 \ - --hash=sha256:5513527951aadb3ac4292a41a16cbc50dd1642432f5e8c20057d414bdafb4187 +isort==8.0.1 \ + --hash=sha256:171ac4ff559cdc060bcfff550bc8404a486fee0caab245679c2abe7cb253c78d \ + --hash=sha256:28b89bc70f751b559aeca209e6120393d43fbe2490de0559662be7a9787e3d75 # via -r src/backend/requirements-dev.in markdown-it-py==4.0.0 \ --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \ @@ -456,46 +467,48 @@ mdurl==0.1.2 \ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba # via markdown-it-py -nodeenv==1.9.1 \ - --hash=sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f \ - --hash=sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9 +nodeenv==1.10.0 \ + --hash=sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 \ + --hash=sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb # via pre-commit -packaging==25.0 \ - --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \ - --hash=sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f +packaging==26.0 \ + --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ + --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 # via # -c src/backend/requirements.txt # build # pytest -pdfminer-six==20251107 \ - --hash=sha256:5fb0c553799c591777f22c0c72b77fc2522d7d10c70654e25f4c5f1fd996e008 \ - --hash=sha256:c09df33e4cbe6b26b2a79248a4ffcccafaa5c5d39c9fff0e6e81567f165b5401 + # wheel +pdfminer-six==20260107 \ + --hash=sha256:366585ba97e80dffa8f00cebe303d2f381884d8637af4ce422f1df3ef38111a9 \ + --hash=sha256:96bfd431e3577a55a0efd25676968ca4ce8fd5b53f14565f85716ff363889602 # via -r src/backend/requirements-dev.in -pip==25.3 \ - --hash=sha256:8d0538dbbd7babbd207f261ed969c65de439f6bc9e5dbd3b3b9a77f25d95f343 \ - --hash=sha256:9655943313a94722b7774661c21049070f6bbb0a1516bf02f7c8d5d9201514cd +pip==26.0.1 \ + --hash=sha256:bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b \ + --hash=sha256:c4037d8a277c89b320abe636d59f91e6d0922d08a05b60e85e53b296613346d8 # via pip-tools -pip-tools==7.5.2 \ - --hash=sha256:2d64d72da6a044da1110257d333960563d7a4743637e8617dd2610ae7b82d60f \ - --hash=sha256:2fe16db727bbe5bf28765aeb581e792e61be51fc275545ef6725374ad720a1ce +pip-tools==7.5.3 \ + --hash=sha256:3aac0c473240ae90db7213c033401f345b05197293ccbdd2704e52e7a783785e \ + --hash=sha256:8fa364779ebc010cbfe17cb9de404457ac733e100840423f28f6955de7742d41 # via -r src/backend/requirements-dev.in -platformdirs==4.5.0 \ - --hash=sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312 \ - --hash=sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3 +platformdirs==4.9.4 \ + --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ + --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 # via # -c src/backend/requirements.txt + # python-discovery # virtualenv pluggy==1.6.0 \ --hash=sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3 \ --hash=sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 # via pytest -pre-commit==4.5.0 \ - --hash=sha256:25e2ce09595174d9c97860a95609f9f852c0614ba602de3561e267547f2335e1 \ - --hash=sha256:dc5a065e932b19fc1d4c653c6939068fe54325af8e741e74e88db4d28a4dd66b +pre-commit==4.5.1 \ + --hash=sha256:3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77 \ + --hash=sha256:eb545fcff725875197837263e977ea257a402056661f09dae08e4b149b030a61 # via -r src/backend/requirements-dev.in -pycparser==2.23 \ - --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ - --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 +pycparser==3.0 \ + --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ + --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 # via # -c src/backend/requirements.txt # cffi @@ -517,28 +530,32 @@ pytest==9.0.2 \ # via # pytest-codspeed # pytest-django -pytest-codspeed==4.2.0 \ - --hash=sha256:04b5d0bc5a1851ba1504d46bf9d7dbb355222a69f2cd440d54295db721b331f7 \ - --hash=sha256:0881a736285f33b9a8894da8fe8e1775aa1a4310226abe5d1f0329228efb680c \ - --hash=sha256:238e17abe8f08d8747fa6c7acff34fefd3c40f17a56a7847ca13dc8d6e8c6009 \ - --hash=sha256:23a0c0fbf8bb4de93a3454fd9e5efcdca164c778aaef0a9da4f233d85cb7f5b8 \ - --hash=sha256:2de87bde9fbc6fd53f0fd21dcf2599c89e0b8948d49f9bad224edce51c47e26b \ - --hash=sha256:309b4227f57fcbb9df21e889ea1ae191d0d1cd8b903b698fdb9ea0461dbf1dfe \ - --hash=sha256:50794dabea6ec90d4288904452051e2febace93e7edf4ca9f2bce8019dd8cd37 \ - --hash=sha256:609828b03972966b75b9b7416fa2570c4a0f6124f67e02d35cd3658e64312a7b \ - --hash=sha256:684fcd9491d810ded653a8d38de4835daa2d001645f4a23942862950664273f8 \ - --hash=sha256:72aab8278452a6d020798b9e4f82780966adb00f80d27a25d1274272c54630d5 \ - --hash=sha256:748411c832147bfc85f805af78a1ab1684f52d08e14aabe22932bbe46c079a5f \ - --hash=sha256:7d4fefbd4ae401e2c60f6be920a0be50eef0c3e4a1f0a1c83962efd45be38b39 \ - --hash=sha256:95aeb2479ca383f6b18e2cc9ebcd3b03ab184980a59a232aea6f370bbf59a1e3 \ - --hash=sha256:a0ebd87f2a99467a1cfd8e83492c4712976e43d353ee0b5f71cbb057f1393aca \ - --hash=sha256:dbbb2d61b85bef8fc7e2193f723f9ac2db388a48259d981bbce96319043e9830 \ - --hash=sha256:e81bbb45c130874ef99aca97929d72682733527a49f84239ba575b5cb843bab0 +pytest-codspeed==4.3.0 \ + --hash=sha256:05baff2a61dc9f3e92b92b9c2ab5fb45d9b802438f5373073f5766a91319ed7a \ + --hash=sha256:10d19b48c9dc35b227a7ac863d4b3c58132256c2ba1aae3220aaddbf6f3f5f9a \ + --hash=sha256:34f2fd8497456eefbd325673f677ea80d93bb1bc08a578c1fa43a09cec3d1879 \ + --hash=sha256:5230d9d65f39063a313ed1820df775166227ec5c20a1122968f85653d5efee48 \ + --hash=sha256:527a3a02eaa3e4d4583adc4ba2327eef79628f3e1c682a4b959439551a72588e \ + --hash=sha256:619120775e92a3f43fb4ff4c256a251b1554c904d95e2154a382484283f0388a \ + --hash=sha256:6ac31ae566bf047e91c79b6d12d9a31efedad556ff9258294d6ecebeacb92fa4 \ + --hash=sha256:878aad5e4bb7b401ad8d82f3af5186030cd2bd0d0446782e10dabb9db8827466 \ + --hash=sha256:9858c2a6e1f391d5696757e7b6e9484749a7376c46f8b4dd9aebf093479a9667 \ + --hash=sha256:a2f5bb6d8898bea7db45e3c8b916ee48e36905b929477bb511b79c5a3ccacda4 \ + --hash=sha256:b2acecc4126658abebc683b38121adec405a46e18a619d49d6154c6e60c5deb2 \ + --hash=sha256:bec30f4fc9c4973143cd80f0d33fa780e9fa3e01e4dbe8cedf229e72f1212c62 \ + --hash=sha256:dbeff1eb2f2e36df088658b556fa993e6937bf64ffb07406de4db16fd2b26874 \ + --hash=sha256:df0d1f6ea594f29b745c634d66d5f5f1caa1c3abd2af82fea49d656038e8fc77 \ + --hash=sha256:df6a36a2a9da1406bc50428437f657f0bd8c842ae54bee5fb3ad30e01d50c0f5 \ + --hash=sha256:e6584e641cadf27d894ae90b87c50377232a97cbfd76ee0c7ecd0c056fa3f7f4 # via -r src/backend/requirements-dev.in -pytest-django==4.11.1 \ - --hash=sha256:1b63773f648aa3d8541000c26929c1ea63934be1cfa674c76436966d73fe6a10 \ - --hash=sha256:a949141a1ee103cb0e7a20f1451d355f83f5e4a5d07bdd4dcfdd1fd0ff227991 +pytest-django==4.12.0 \ + --hash=sha256:3ff300c49f8350ba2953b90297d23bf5f589db69545f56f1ec5f8cff5da83e85 \ + --hash=sha256:df94ec819a83c8979c8f6de13d9cdfbe76e8c21d39473cfe2b40c9fc9be3c758 # via -r src/backend/requirements-dev.in +python-discovery==1.1.0 \ + --hash=sha256:447941ba1aed8cc2ab7ee3cb91be5fc137c5bdbb05b7e6ea62fbdcb66e50b268 \ + --hash=sha256:a162893b8809727f54594a99ad2179d2ede4bf953e12d4c7abc3cc9cdbd1437b + # via virtualenv pyyaml==6.0.3 \ --hash=sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c \ --hash=sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a \ @@ -626,91 +643,95 @@ requests-mock==1.12.1 \ --hash=sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563 \ --hash=sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401 # via -r src/backend/requirements-dev.in -rich==14.2.0 \ - --hash=sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4 \ - --hash=sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd +rich==14.3.3 \ + --hash=sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d \ + --hash=sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b # via pytest-codspeed -setuptools==80.9.0 \ - --hash=sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 \ - --hash=sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c +setuptools==82.0.0 \ + --hash=sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb \ + --hash=sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0 # via # -c src/backend/requirements.txt # -r src/backend/requirements-dev.in # pip-tools -sqlparse==0.5.3 \ - --hash=sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272 \ - --hash=sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca +sqlparse==0.5.5 \ + --hash=sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba \ + --hash=sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e # via # -c src/backend/requirements.txt # django # django-silk -tomli==2.3.0 \ - --hash=sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456 \ - --hash=sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845 \ - --hash=sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999 \ - --hash=sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0 \ - --hash=sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878 \ - --hash=sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf \ - --hash=sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3 \ - --hash=sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be \ - --hash=sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52 \ - --hash=sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b \ - --hash=sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67 \ - --hash=sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549 \ - --hash=sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba \ - --hash=sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22 \ - --hash=sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c \ - --hash=sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f \ - --hash=sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6 \ - --hash=sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba \ - --hash=sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45 \ - --hash=sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f \ - --hash=sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77 \ - --hash=sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606 \ - --hash=sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441 \ - --hash=sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0 \ - --hash=sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f \ - --hash=sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530 \ - --hash=sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05 \ - --hash=sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8 \ - --hash=sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005 \ - --hash=sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879 \ - --hash=sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae \ - --hash=sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc \ - --hash=sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b \ - --hash=sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b \ - --hash=sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e \ - --hash=sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf \ - --hash=sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac \ - --hash=sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8 \ - --hash=sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b \ - --hash=sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf \ - --hash=sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463 \ - --hash=sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876 +tomli==2.4.0 \ + --hash=sha256:0408e3de5ec77cc7f81960c362543cbbd91ef883e3138e81b729fc3eea5b9729 \ + --hash=sha256:0dc56fef0e2c1c470aeac5b6ca8cc7b640bb93e92d9803ddaf9ea03e198f5b0b \ + --hash=sha256:0e0fe8a0b8312acf3a88077a0802565cb09ee34107813bba1c7cd591fa6cfc8d \ + --hash=sha256:0f2e3955efea4d1cfbcb87bc321e00dc08d2bcb737fd1d5e398af111d86db5df \ + --hash=sha256:133e93646ec4300d651839d382d63edff11d8978be23da4cc106f5a18b7d0576 \ + --hash=sha256:1b168f2731796b045128c45982d3a4874057626da0e2ef1fdd722848b741361d \ + --hash=sha256:1c8a885b370751837c029ef9bc014f27d80840e48bac415f3412e6593bbc18c1 \ + --hash=sha256:1f776e7d669ebceb01dee46484485f43a4048746235e683bcdffacdf1fb4785a \ + --hash=sha256:1fb2945cbe303b1419e2706e711b7113da57b7db31ee378d08712d678a34e51e \ + --hash=sha256:20cedb4ee43278bc4f2fee6cb50daec836959aadaf948db5172e776dd3d993fc \ + --hash=sha256:20ffd184fb1df76a66e34bd1b36b4a4641bd2b82954befa32fe8163e79f1a702 \ + --hash=sha256:26ab906a1eb794cd4e103691daa23d95c6919cc2fa9160000ac02370cc9dd3f6 \ + --hash=sha256:2add28aacc7425117ff6364fe9e06a183bb0251b03f986df0e78e974047571fd \ + --hash=sha256:2b1e3b80e1d5e52e40e9b924ec43d81570f0e7d09d11081b797bc4692765a3d4 \ + --hash=sha256:31d556d079d72db7c584c0627ff3a24c5d3fb4f730221d3444f3efb1b2514776 \ + --hash=sha256:36b9d05b51e65b254ea6c2585b59d2c4cb91c8a3d91d0ed0f17591a29aaea54a \ + --hash=sha256:39b0b5d1b6dd03684b3fb276407ebed7090bbec989fa55838c98560c01113b66 \ + --hash=sha256:3cf226acb51d8f1c394c1b310e0e0e61fecdd7adcb78d01e294ac297dd2e7f87 \ + --hash=sha256:3d895d56bd3f82ddd6faaff993c275efc2ff38e52322ea264122d72729dca2b2 \ + --hash=sha256:413540dce94673591859c4c6f794dfeaa845e98bf35d72ed59636f869ef9f86f \ + --hash=sha256:43e685b9b2341681907759cf3a04e14d7104b3580f808cfde1dfdb60ada85475 \ + --hash=sha256:4cbcb367d44a1f0c2be408758b43e1ffb5308abe0ea222897d6bfc8e8281ef2f \ + --hash=sha256:551e321c6ba03b55676970b47cb1b73f14a0a4dce6a3e1a9458fd6d921d72e95 \ + --hash=sha256:5572e41282d5268eb09a697c89a7bee84fae66511f87533a6f88bd2f7b652da9 \ + --hash=sha256:5aa48d7c2356055feef06a43611fc401a07337d5b006be13a30f6c58f869e3c3 \ + --hash=sha256:5b5807f3999fb66776dbce568cc9a828544244a8eb84b84b9bafc080c99597b9 \ + --hash=sha256:5e3f639a7a8f10069d0e15408c0b96a2a828cfdec6fca05296ebcdcc28ca7c76 \ + --hash=sha256:685306e2cc7da35be4ee914fd34ab801a6acacb061b6a7abca922aaf9ad368da \ + --hash=sha256:75c2f8bbddf170e8effc98f5e9084a8751f8174ea6ccf4fca5398436e0320bc8 \ + --hash=sha256:7b438885858efd5be02a9a133caf5812b8776ee0c969fea02c45e8e3f296ba51 \ + --hash=sha256:7d49c66a7d5e56ac959cb6fc583aff0651094ec071ba9ad43df785abc2320d86 \ + --hash=sha256:7d6d9a4aee98fac3eab4952ad1d73aee87359452d1c086b5ceb43ed02ddb16b8 \ + --hash=sha256:84d081fbc252d1b6a982e1870660e7330fb8f90f676f6e78b052ad4e64714bf0 \ + --hash=sha256:8768715ffc41f0008abe25d808c20c3d990f42b6e2e58305d5da280ae7d1fa3b \ + --hash=sha256:920b1de295e72887bafa3ad9f7a792f811847d57ea6b1215154030cf131f16b1 \ + --hash=sha256:9a08144fa4cba33db5255f9b74f0b89888622109bd2776148f2597447f92a94e \ + --hash=sha256:a26d7ff68dfdb9f87a016ecfd1e1c2bacbe3108f4e0f8bcd2228ef9a766c787d \ + --hash=sha256:aa89c3f6c277dd275d8e243ad24f3b5e701491a860d5121f2cdd399fbb31fc9c \ + --hash=sha256:b5ef256a3fd497d4973c11bf142e9ed78b150d36f5773f1ca6088c230ffc5867 \ + --hash=sha256:b6c78bdf37764092d369722d9946cb65b8767bfa4110f902a1b2542d8d173c8a \ + --hash=sha256:bbb1b10aa643d973366dc2cb1ad94f99c1726a02343d43cbc011edbfac579e7c \ + --hash=sha256:c084ad935abe686bd9c898e62a02a19abfc9760b5a79bc29644463eaf2840cb0 \ + --hash=sha256:c73add4bb52a206fd0c0723432db123c0c75c280cbd67174dd9d2db228ebb1b4 \ + --hash=sha256:cae9c19ed12d4e8f3ebf46d1a75090e4c0dc16271c5bce1c833ac168f08fb614 \ + --hash=sha256:d20b797a5c1ad80c516e41bc1fb0443ddb5006e9aaa7bda2d71978346aeb9132 \ + --hash=sha256:d3d1654e11d724760cdb37a3d7691f0be9db5fbdaef59c9f532aabf87006dbaa \ + --hash=sha256:d878f2a6707cc9d53a1be1414bbb419e629c3d6e67f69230217bb663e76b5087 # via coverage -ty==0.0.1a21 \ - --hash=sha256:0efba2e52b58f536f4198ba5c4a36cac2ba67d83ec6f429ebc7704233bcda4c3 \ - --hash=sha256:1474d883129bb63da3b2380fc7ead824cd3baf6a9551e6aa476ffefc58057af3 \ - --hash=sha256:1f276ceab23a1410aec09508248c76ae0989c67fb7a0c287e0d4564994295531 \ - --hash=sha256:218d53e7919e885bd98e9196d9cb952d82178b299aa36da6f7f39333eb7400ed \ - --hash=sha256:21f708d02b6588323ffdbfdba38830dd0ecfd626db50aa6006b296b5470e52f9 \ - --hash=sha256:334d2a212ebf42a0e55d57561926af7679fe1e878175e11dcb81ad8df892844e \ - --hash=sha256:3c3bc66fcae41eff133cfe326dd65d82567a2fb5d4efe2128773b10ec2766819 \ - --hash=sha256:5dfc73299d441cc6454e36ed0a976877415024143dfca6592dc36f7701424383 \ - --hash=sha256:7505aeb8bf2a62f00f12cfa496f6c965074d75c8126268776565284c8a12d5dd \ - --hash=sha256:84243455f295ed850bd53f7089819321807d4e6ee3b1cbff6086137ae0259466 \ - --hash=sha256:87a200c21e02962e8a27374d9d152582331d57d709672431be58f4f898bf6cad \ - --hash=sha256:9463cac96b8f1bb5ba740fe1d42cd6bd152b43c5b159b2f07f8fd629bcdded34 \ - --hash=sha256:a8c769987d00fbc33054ff7e342633f475ea10dc43bc60fb9fb056159d48cb90 \ - --hash=sha256:ba13d03b9e095216ceb4e4d554a308517f28ab0a6e4dcd07cfe94563e4c2c489 \ - --hash=sha256:be8f457d7841b7ead2a3f6b65ba668abc172a1150a0f1f6c0958af3725dbb61a \ - --hash=sha256:cc0880ec344fbdf736b05d8d0da01f0caaaa02409bd9a24b68d18d0127a79b0e \ - --hash=sha256:e941e9a9d1e54b03eeaf9c3197c26a19cf76009fd5e41e16e5657c1c827bd6d3 \ - --hash=sha256:ecf41706b803827b0de8717f32a434dad1e67be9f4b8caf403e12013179ea06a +ty==0.0.21 \ + --hash=sha256:210e7568c9f886c4d01308d751949ee714ad7ad9d7d928d2ba90d329dd880367 \ + --hash=sha256:53508e345b11569f78b21ba8e2b4e61df38a9754947fb3cd9f2ef574367338fb \ + --hash=sha256:553e43571f4a35604c36cfd07d8b61a5eb7a714e3c67f8c4ff2cf674fefbaef9 \ + --hash=sha256:56b01fd2519637a4ca88344f61c96225f540c98ff18bca321d4eaa7bb0f7aa2f \ + --hash=sha256:56d3b198b64dd0a19b2b66e257deaed2ecea568e722ae5352f3c6fb62027f89d \ + --hash=sha256:62f7f5b235c4f7876db305c36997aea07b7af29b1a068f373d0e2547e25f32ff \ + --hash=sha256:666f6822e3b9200abfa7e95eb0ddd576460adb8d66b550c0ad2c70abc84a2048 \ + --hash=sha256:7bdf2f572378de78e1f388d24691c89db51b7caf07cf90f2bfcc1d6b18b70a76 \ + --hash=sha256:7e9613994610431ab8625025bd2880dbcb77c5c9fabdd21134cda12d840a529d \ + --hash=sha256:a0854d008347ce4a5fb351af132f660a390ab2a1163444d075251d43e6f74b9b \ + --hash=sha256:a4c2ba5d67d64df8fcdefd8b280ac1149d24a73dbda82fa953a0dff9d21400ed \ + --hash=sha256:a709d576e5bea84b745d43058d8b9cd4f27f74a0b24acb4b0cbb7d3d41e0d050 \ + --hash=sha256:bef3ab4c7b966bcc276a8ac6c11b63ba222d21355b48d471ea782c4104eee4e0 \ + --hash=sha256:d23d2c34f7a77d974bb08f0860ef700addc8a683d81a0319f71c08f87506cfd0 \ + --hash=sha256:e9de7e11c63c6afc40f3e9ba716374add171aee7fabc70b5146a510705c6d41b \ + --hash=sha256:ee8399f7c453a425291e6688efe430cfae7ab0ac4ffd50eba9f872bf878b54f6 \ + --hash=sha256:f72047996598ac20553fb7e21ba5741e3c82dee4e9eadf10d954551a5fe09391 # via -r src/backend/requirements-dev.in -types-psycopg2==2.9.21.20251012 \ - --hash=sha256:4cdafd38927da0cfde49804f39ab85afd9c6e9c492800e42f1f0c1a1b0312935 \ - --hash=sha256:712bad5c423fe979e357edbf40a07ca40ef775d74043de72bd4544ca328cc57e +types-psycopg2==2.9.21.20260223 \ + --hash=sha256:78ed70de2e56bc6b5c26c8c1da8e9af54e49fdc3c94d1504609f3519e2b84f02 \ + --hash=sha256:c6228ade72d813b0624f4c03feeb89471950ac27cd0506b5debed6f053086bc8 # via django-types types-pyyaml==6.0.12.20250915 \ --hash=sha256:0f8b54a528c303f0e6f7165687dd33fafa81c807fcac23f632b63aa624ced1d3 \ @@ -724,17 +745,17 @@ typing-extensions==4.15.0 \ # django-stubs # django-stubs-ext # django-test-migrations -urllib3==2.6.0 \ - --hash=sha256:c90f7a39f716c572c4e3e58509581ebd83f9b59cced005b7db7ad2d22b0db99f \ - --hash=sha256:cb9bcef5a4b345d5da5d145dc3e30834f58e8018828cbc724d30b4cb7d4d49f1 +urllib3==2.6.3 \ + --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \ + --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 # via # -c src/backend/requirements.txt # requests -virtualenv==20.35.4 \ - --hash=sha256:643d3914d73d3eeb0c552cbb12d7e82adf0e504dbf86a3182f8771a153a1971c \ - --hash=sha256:c21c9cede36c9753eeade68ba7d523529f228a403463376cf821eaae2b650f1b +virtualenv==21.1.0 \ + --hash=sha256:164f5e14c5587d170cf98e60378eb91ea35bf037be313811905d3a24ea33cc07 \ + --hash=sha256:1990a0188c8f16b6b9cf65c9183049007375b26aad415514d377ccacf1e4fb44 # via pre-commit -wheel==0.45.1 \ - --hash=sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729 \ - --hash=sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248 +wheel==0.46.3 \ + --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ + --hash=sha256:e3e79874b07d776c40bd6033f8ddf76a7dad46a7b8aa1b2787a83083519a1803 # via pip-tools diff --git a/src/backend/requirements.txt b/src/backend/requirements.txt index edf82dd762..d3d61f3e0c 100644 --- a/src/backend/requirements.txt +++ b/src/backend/requirements.txt @@ -1,8 +1,8 @@ # This file was autogenerated by uv via the following command: -# uv pip compile src/backend/requirements.in -o src/backend/requirements.txt --no-strip-extras --generate-hashes -asgiref==3.10.0 \ - --hash=sha256:aef8a81283a34d0ab31630c9b7dfe70c812c95eba78171367ca8745e88124734 \ - --hash=sha256:d89f2d8cd8b56dada7d52fa7dc8075baa08fb836560710d38c292a7a3f78c04e +# uv pip compile src/backend/requirements.in -o src/backend/requirements.txt +asgiref==3.11.1 \ + --hash=sha256:5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce \ + --hash=sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133 # via # django # django-allauth @@ -18,9 +18,9 @@ attrs==25.4.0 \ # via # jsonschema # referencing -babel==2.17.0 \ - --hash=sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d \ - --hash=sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2 +babel==2.18.0 \ + --hash=sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d \ + --hash=sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35 # via py-moneyed bcrypt==5.0.0 \ --hash=sha256:046ad6db88edb3c5ece4369af997938fb1c19d6a699b9c1b27b0db432faae4c4 \ @@ -91,19 +91,19 @@ bleach[css]==6.3.0 \ --hash=sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22 \ --hash=sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6 # via django-markdownify -blessed==1.25.0 \ - --hash=sha256:606aebfea69f85915c7ca6a96eb028e0031d30feccc5688e13fd5cec8277b28d \ - --hash=sha256:e52b9f778b9e10c30b3f17f6b5f5d2208d1e9b53b270f1d94fc61a243fc4708f +blessed==1.32.0 \ + --hash=sha256:c6fdc18838491ebc7f0460234917eff4e172074934f5f80e82672417bd74be70 \ + --hash=sha256:d4090e9908cf86bea15a5275845c8bfc69c4c34eb6d22de07c65d26f1e54a918 # via -r src/backend/requirements.in -boto3==1.40.69 \ - --hash=sha256:5273f6bac347331a87db809dff97d8736c50c3be19f2bb36ad08c5131c408976 \ - --hash=sha256:c3f710a1990c4be1c0db43b938743d4e404c7f1f06d5f1fa0c8e9b1cea4290b2 +boto3==1.42.62 \ + --hash=sha256:6b26ff56c458685caec3d42adde0549f6a55410e557e1f51bebde5c8abcf3037 \ + --hash=sha256:eef0ee08f30e5ed16d8296719808801a827fa0f3126a3e2a9ef9be9eb5e6a313 # via # django-anymail # django-storages -botocore==1.40.69 \ - --hash=sha256:5d810efeb9e18f91f32690642fa81ae60e482eefeea0d35ec72da2e3d924c1a5 \ - --hash=sha256:df310ddc4d2de5543ba3df4e4b5f9907a2951896d63a9fbae115c26ca0976951 +botocore==1.42.62 \ + --hash=sha256:86d327fded96775268ffe8d8bd6ed96c4a1db86cf24eb64ff85233db12dbc287 \ + --hash=sha256:c210dc93b0b81bf72cfe745a7b1c8df765d04bd90b4ac6c8707fbb6714141dae # via # boto3 # s3transfer @@ -209,9 +209,9 @@ brotli==1.2.0 \ --hash=sha256:fc1530af5c3c275b8524f2e24841cbe2599d74462455e9bae5109e9ff42e9361 \ --hash=sha256:ff09cd8c5eec3b9d02d2408db41be150d8891c5566addce57513bf546e3d6c6d # via fonttools -certifi==2025.10.5 \ - --hash=sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de \ - --hash=sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43 +certifi==2026.2.25 \ + --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ + --hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7 # via # requests # sentry-sdk @@ -304,176 +304,171 @@ cffi==2.0.0 \ # cryptography # pynacl # weasyprint -charset-normalizer==3.4.4 \ - --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \ - --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \ - --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \ - --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \ - --hash=sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc \ - --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \ - --hash=sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63 \ - --hash=sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d \ - --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \ - --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \ - --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \ - --hash=sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505 \ - --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \ - --hash=sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af \ - --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \ - --hash=sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318 \ - --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \ - --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \ - --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \ - --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \ - --hash=sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576 \ - --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \ - --hash=sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1 \ - --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \ - --hash=sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1 \ - --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \ - --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \ - --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \ - --hash=sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88 \ - --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \ - --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \ - --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \ - --hash=sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a \ - --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \ - --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \ - --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \ - --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \ - --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \ - --hash=sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7 \ - --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \ - --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \ - --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \ - --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \ - --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \ - --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \ - --hash=sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2 \ - --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \ - --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \ - --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \ - --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \ - --hash=sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf \ - --hash=sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6 \ - --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \ - --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \ - --hash=sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa \ - --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \ - --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \ - --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \ - --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \ - --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \ - --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \ - --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \ - --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \ - --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \ - --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \ - --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \ - --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \ - --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \ - --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \ - --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \ - --hash=sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3 \ - --hash=sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9 \ - --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \ - --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \ - --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \ - --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \ - --hash=sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50 \ - --hash=sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf \ - --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \ - --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \ - --hash=sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac \ - --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \ - --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \ - --hash=sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c \ - --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \ - --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \ - --hash=sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e \ - --hash=sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4 \ - --hash=sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84 \ - --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \ - --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \ - --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \ - --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \ - --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \ - --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \ - --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \ - --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \ - --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \ - --hash=sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074 \ - --hash=sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3 \ - --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \ - --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \ - --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \ - --hash=sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d \ - --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \ - --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \ - --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \ - --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \ - --hash=sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966 \ - --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \ - --hash=sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3 \ - --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \ - --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608 +charset-normalizer==3.4.5 \ + --hash=sha256:014837af6fabf57121b6254fa8ade10dceabc3528b27b721a64bbc7b8b1d4eb4 \ + --hash=sha256:01a1ed54b953303ca7e310fafe0fe347aab348bd81834a0bcd602eb538f89d66 \ + --hash=sha256:0294916d6ccf2d069727d65973c3a1ca477d68708db25fd758dd28b0827cff54 \ + --hash=sha256:02a9d1b01c1e12c27883b0c9349e0bcd9ae92e727ff1a277207e1a262b1cbf05 \ + --hash=sha256:036c079aa08a6a592b82487f97c60b439428320ed1b2ea0b3912e99d30c77765 \ + --hash=sha256:039215608ac7b358c4da0191d10fc76868567fbf276d54c14721bdedeb6de064 \ + --hash=sha256:0625665e4ebdddb553ab185de5db7054393af8879fb0c87bd5690d14379d6819 \ + --hash=sha256:0a45e504f5e1be0bd385935a8e1507c442349ca36f511a47057a71c9d1d6ea9e \ + --hash=sha256:0b362bcd27819f9c07cbf23db4e0e8cd4b44c5ecd900c2ff907b2b92274a7412 \ + --hash=sha256:0c300cefd9b0970381a46394902cd18eaf2aa00163f999590ace991989dcd0fc \ + --hash=sha256:1088345bcc93c58d8d8f3d783eca4a6e7a7752bbff26c3eee7e73c597c191c2e \ + --hash=sha256:10b473fc8dca1c3ad8559985794815f06ca3fc71942c969129070f2c3cdf7281 \ + --hash=sha256:131716d6786ad5e3dc542f5cc6f397ba3339dc0fb87f87ac30e550e8987756af \ + --hash=sha256:14498a429321de554b140013142abe7608f9d8ccc04d7baf2ad60498374aefa2 \ + --hash=sha256:149ec69866c3d6c2fb6f758dbc014ecb09f30b35a5ca90b6a8a2d4e54e18fdfe \ + --hash=sha256:165c7b21d19365464e8f70e5ce5e12524c58b48c78c1f5a57524603c1ab003f8 \ + --hash=sha256:1827734a5b308b65ac54e86a618de66f935a4f63a8a462ff1e19a6788d6c2262 \ + --hash=sha256:19092dde50335accf365cce21998a1c6dd8eafd42c7b226eb54b2747cdce2fac \ + --hash=sha256:1a374cc0b88aa710e8865dc1bd6edb3743c59f27830f0293ab101e4cf3ce9f85 \ + --hash=sha256:1d1401945cb77787dbd3af2446ff2d75912327c4c3a1526ab7955ecf8600687c \ + --hash=sha256:1f2da5cbb9becfcd607757a169e38fb82aa5fd86fae6653dea716e7b613fe2cf \ + --hash=sha256:259cd1ca995ad525f638e131dbcc2353a586564c038fc548a3fe450a91882139 \ + --hash=sha256:2820a98460c83663dd8ec015d9ddfd1e4879f12e06bb7d0500f044fb477d2770 \ + --hash=sha256:28269983f25a4da0425743d0d257a2d6921ea7d9b83599d4039486ec5b9f911d \ + --hash=sha256:2b970382e4a36bed897c19f310f31d7d13489c11b4f468ddfba42d41cddfb918 \ + --hash=sha256:2da4eedcb6338e2321e831a0165759c0c620e37f8cd044a263ff67493be8ffb3 \ + --hash=sha256:30987f4a8ed169983f93e1be8ffeea5214a779e27ed0b059835c7afe96550ad7 \ + --hash=sha256:30a2b1a48478c3428d047ed9690d57c23038dac838a87ad624c85c0a78ebeb39 \ + --hash=sha256:340810d34ef83af92148e96e3e44cb2d3f910d2bf95e5618a5c467d9f102231d \ + --hash=sha256:3f64c6bf8f32f9133b668c7f7a7cbdbc453412bc95ecdbd157f3b1e377a92990 \ + --hash=sha256:4167a621a9a1a986c73777dbc15d4b5eac8ac5c10393374109a343d4013ec765 \ + --hash=sha256:4354e401eb6dab9aed3c7b4030514328a6c748d05e1c3e19175008ca7de84fb1 \ + --hash=sha256:4481e6da1830c8a1cc0b746b47f603b653dadb690bcd851d039ffaefe70533aa \ + --hash=sha256:4b8551b6e6531e156db71193771c93bda78ffc4d1e6372517fe58ad3b91e4659 \ + --hash=sha256:4cd966c2559f501c6fd69294d082c2934c8dd4719deb32c22961a5ac6db0df1d \ + --hash=sha256:50bcbca6603c06a1dcc7b056ed45c37715fb5d2768feb3bcd37d2313c587a5b9 \ + --hash=sha256:530beedcec9b6e027e7a4b6ce26eed36678aa39e17da85e6e03d7bd9e8e9d7c9 \ + --hash=sha256:568e3c34b58422075a1b49575a6abc616d9751b4d61b23f712e12ebb78fe47b2 \ + --hash=sha256:573ef5814c4b7c0d59a7710aa920eaaaef383bd71626aa420fba27b5cab92e8d \ + --hash=sha256:58ad8270cfa5d4bef1bc85bd387217e14ff154d6630e976c6f56f9a040757475 \ + --hash=sha256:597d10dec876923e5c59e48dbd366e852eacb2b806029491d307daea6b917d7c \ + --hash=sha256:5bcb3227c3d9aaf73eaaab1db7ccd80a8995c509ee9941e2aae060ca6e4e5d81 \ + --hash=sha256:5cffde4032a197bd3b42fd0b9509ec60fb70918d6970e4cc773f20fc9180ca67 \ + --hash=sha256:5fea359734b140d0d6741189fea5478c6091b54ffc69d7ce119e0a05637d8c99 \ + --hash=sha256:60d68e820af339df4ae8358c7a2e7596badeb61e544438e489035f9fbf3246a5 \ + --hash=sha256:610f72c0ee565dfb8ae1241b666119582fdbfe7c0975c175be719f940e110694 \ + --hash=sha256:65a126fb4b070d05340a84fc709dd9e7c75d9b063b610ece8a60197a291d0adf \ + --hash=sha256:65b3c403a5b6b8034b655e7385de4f72b7b244869a22b32d4030b99a60593eca \ + --hash=sha256:66dee73039277eb35380d1b82cccc69cc82b13a66f9f4a18da32d573acf02b7c \ + --hash=sha256:708c7acde173eedd4bfa4028484426ba689d2103b28588c513b9db2cd5ecde9c \ + --hash=sha256:728c6a963dfab66ef865f49286e45239384249672cd598576765acc2a640a636 \ + --hash=sha256:754f96058e61a5e22e91483f823e07df16416ce76afa4ebf306f8e1d1296d43f \ + --hash=sha256:75dfd1afe0b1647449e852f4fb428195a7ed0588947218f7ba929f6538487f02 \ + --hash=sha256:75ee9c1cce2911581a70a3c0919d8bccf5b1cbc9b0e5171400ec736b4b569497 \ + --hash=sha256:76a9d0de4d0eab387822e7b35d8f89367dd237c72e82ab42b9f7bf5e15ada00f \ + --hash=sha256:77be992288f720306ab4108fe5c74797de327f3248368dfc7e1a916d6ed9e5a2 \ + --hash=sha256:7ad83b8f9379176c841f8865884f3514d905bcd2a9a3b210eaa446e7d2223e4d \ + --hash=sha256:8197abe5ca1ffb7d91e78360f915eef5addff270f8a71c1fc5be24a56f3e4873 \ + --hash=sha256:82cc7c2ad42faec8b574351f8bc2a0c049043893853317bd9bb309f5aba6cb5a \ + --hash=sha256:8a28afb04baa55abf26df544e3e5c6534245d3daa5178bc4a8eeb48202060d0e \ + --hash=sha256:8b78d8a609a4b82c273257ee9d631ded7fac0d875bdcdccc109f3ee8328cfcb1 \ + --hash=sha256:8ce11cd4d62d11166f2b441e30ace226c19a3899a7cf0796f668fba49a9fb123 \ + --hash=sha256:8fff79bf5978c693c9b1a4d71e4a94fddfb5fe744eb062a318e15f4a2f63a550 \ + --hash=sha256:92263f7eca2f4af326cd20de8d16728d2602f7cfea02e790dcde9d83c365d7cc \ + --hash=sha256:93b3b2cc5cf1b8743660ce77a4f45f3f6d1172068207c1defc779a36eea6bb36 \ + --hash=sha256:95adae7b6c42a6c5b5b559b1a99149f090a57128155daeea91732c8d970d8644 \ + --hash=sha256:97ab7787092eb9b50fb47fa04f24c75b768a606af1bcba1957f07f128a7219e4 \ + --hash=sha256:9db5e3fcdcee89a78c04dffb3fe33c79f77bd741a624946db2591c81b2fc85b0 \ + --hash=sha256:a118e2e0b5ae6b0120d5efa5f866e58f2bb826067a646431da4d6a2bdae7950e \ + --hash=sha256:a2aecdb364b8a1802afdc7f9327d55dad5366bc97d8502d0f5854e50712dbc5f \ + --hash=sha256:a66aa5022bf81ab4b1bebfb009db4fd68e0c6d4307a1ce5ef6a26e5878dfc9e4 \ + --hash=sha256:a68766a3c58fde7f9aaa22b3786276f62ab2f594efb02d0a1421b6282e852e98 \ + --hash=sha256:aa2f963b4da26daf46231d9b9e0e2c9408a751f8f0d0f44d2de56d3caf51d294 \ + --hash=sha256:aa92ec1102eaff840ccd1021478af176a831f1bccb08e526ce844b7ddda85c22 \ + --hash=sha256:ac59c15e3f1465f722607800c68713f9fbc2f672b9eb649fe831da4019ae9b23 \ + --hash=sha256:ae8b03427410731469c4033934cf473426faff3e04b69d2dfb64a4281a3719f8 \ + --hash=sha256:afca7f78067dd27c2b848f1b234623d26b87529296c6c5652168cc1954f2f3b2 \ + --hash=sha256:b2d37d78297b39a9eb9eb92c0f6df98c706467282055419df141389b23f93362 \ + --hash=sha256:b3e71afc578b98512bfe7bdb822dd6bc57d4b0093b4b6e5487c1e96ad4ace242 \ + --hash=sha256:ba20bdf69bd127f66d0174d6f2a93e69045e0b4036dc1ca78e091bcc765830c4 \ + --hash=sha256:c108f8619e504140569ee7de3f97d234f0fbae338a7f9f360455071ef9855a95 \ + --hash=sha256:c23eb3263356d94858655b3e63f85ac5d50970c6e8febcdde7830209139cc37d \ + --hash=sha256:c5af897b45fa606b12464ccbe0014bbf8c09191e0a66aab6aa9d5cf6e77e0c94 \ + --hash=sha256:c7a80a9242963416bd81f99349d5f3fce1843c303bd404f204918b6d75a75fd6 \ + --hash=sha256:c7e84e0c0005e3bdc1a9211cd4e62c78ba80bc37b2365ef4410cd2007a9047f2 \ + --hash=sha256:cace89841c0599d736d3d74a27bc5821288bb47c5441923277afc6059d7fbcb4 \ + --hash=sha256:cd2d0f0ec9aa977a27731a3209ebbcacebebaf41f902bd453a928bfd281cf7f8 \ + --hash=sha256:d01de5e768328646e6a3fa9e562706f8f6641708c115c62588aef2b941a4f88e \ + --hash=sha256:d1028de43596a315e2720a9849ee79007ab742c06ad8b45a50db8cdb7ed4a82a \ + --hash=sha256:d27ce22ec453564770d29d03a9506d449efbb9fa13c00842262b2f6801c48cce \ + --hash=sha256:d29dd9c016f2078b43d0c357511e87eee5b05108f3dd603423cb389b89813969 \ + --hash=sha256:d31f0d1671e1534e395f9eb84a68e0fb670e1edb1fe819a9d7f564ae3bc4e53f \ + --hash=sha256:d4eb8ac7469b2a5d64b5b8c04f84d8bf3ad340f4514b98523805cbf46e3b3923 \ + --hash=sha256:d5e52d127045d6ae01a1e821acfad2f3a1866c54d0e837828538fabe8d9d1bd6 \ + --hash=sha256:d77f97e515688bd615c1d1f795d540f32542d514242067adcb8ef532504cb9ee \ + --hash=sha256:d8ed79b8f6372ca4254955005830fd61c1ccdd8c0fac6603e2c145c61dd95db6 \ + --hash=sha256:dc57a0baa3eeedd99fafaef7511b5a6ef4581494e8168ee086031744e2679467 \ + --hash=sha256:e09f671a54ce70b79a1fc1dc6da3072b7ef7251fadb894ed92d9aa8218465a5f \ + --hash=sha256:e22d1059b951e7ae7c20ef6b06afd10fb95e3c41bf3c4fbc874dba113321c193 \ + --hash=sha256:e37bd100d2c5d3ba35db9c7c5ba5a9228cbcffe5c4778dc824b164e5257813d7 \ + --hash=sha256:e51ae7d81c825761d941962450f50d041db028b7278e7b08930b4541b3e45cb9 \ + --hash=sha256:e545b51da9f9af5c67815ca0eb40676c0f016d0b0381c86f20451e35696c5f95 \ + --hash=sha256:e6302ca4ae283deb0af68d2fbf467474b8b6aedcd3dab4db187e07f94c109763 \ + --hash=sha256:e71bbb595973622b817c042bd943c3f3667e9c9983ce3d205f973f486fec98a7 \ + --hash=sha256:ec56a2266f32bc06ed3c3e2a8f58417ce02f7e0356edc89786e52db13c593c98 \ + --hash=sha256:ed1a9a204f317ef879b32f9af507d47e49cd5e7f8e8d5d96358c98373314fc60 \ + --hash=sha256:ed97c282ee4f994ef814042423a529df9497e3c666dca19be1d4cd1129dc7ade \ + --hash=sha256:ed98364e1c262cf5f9363c3eca8c2df37024f52a8fa1180a3610014f26eac51c \ + --hash=sha256:ee57b926940ba00bca7ba7041e665cc956e55ef482f851b9b65acb20d867e7a2 \ + --hash=sha256:f1d725b754e967e648046f00c4facc42d414840f5ccc670c5670f59f83693e4f \ + --hash=sha256:f8102ae93c0bc863b1d41ea0f4499c20a83229f52ed870850892df555187154a \ + --hash=sha256:fc1c64934b8faf7584924143eb9db4770bbdb16659626e1a1a4d9efbcb68d947 \ + --hash=sha256:ff95a9283de8a457e6b12989de3f9f5193430f375d64297d323a615ea52cbdb3 # via requests -cryptography==46.0.3 \ - --hash=sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217 \ - --hash=sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d \ - --hash=sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc \ - --hash=sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71 \ - --hash=sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971 \ - --hash=sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a \ - --hash=sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926 \ - --hash=sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc \ - --hash=sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d \ - --hash=sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b \ - --hash=sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20 \ - --hash=sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044 \ - --hash=sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3 \ - --hash=sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715 \ - --hash=sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4 \ - --hash=sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506 \ - --hash=sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f \ - --hash=sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0 \ - --hash=sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683 \ - --hash=sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3 \ - --hash=sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21 \ - --hash=sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91 \ - --hash=sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c \ - --hash=sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8 \ - --hash=sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df \ - --hash=sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c \ - --hash=sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb \ - --hash=sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7 \ - --hash=sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04 \ - --hash=sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db \ - --hash=sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459 \ - --hash=sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea \ - --hash=sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914 \ - --hash=sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717 \ - --hash=sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9 \ - --hash=sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac \ - --hash=sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32 \ - --hash=sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec \ - --hash=sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1 \ - --hash=sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb \ - --hash=sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac \ - --hash=sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665 \ - --hash=sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e \ - --hash=sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb \ - --hash=sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5 \ - --hash=sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936 \ - --hash=sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de \ - --hash=sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372 \ - --hash=sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54 \ - --hash=sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422 \ - --hash=sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849 \ - --hash=sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c \ - --hash=sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963 \ - --hash=sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018 +cryptography==46.0.5 \ + --hash=sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72 \ + --hash=sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235 \ + --hash=sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9 \ + --hash=sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356 \ + --hash=sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257 \ + --hash=sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad \ + --hash=sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4 \ + --hash=sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c \ + --hash=sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614 \ + --hash=sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed \ + --hash=sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31 \ + --hash=sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229 \ + --hash=sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0 \ + --hash=sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731 \ + --hash=sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b \ + --hash=sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4 \ + --hash=sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4 \ + --hash=sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263 \ + --hash=sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595 \ + --hash=sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1 \ + --hash=sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678 \ + --hash=sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48 \ + --hash=sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76 \ + --hash=sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0 \ + --hash=sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18 \ + --hash=sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d \ + --hash=sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d \ + --hash=sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1 \ + --hash=sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981 \ + --hash=sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7 \ + --hash=sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82 \ + --hash=sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2 \ + --hash=sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4 \ + --hash=sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663 \ + --hash=sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c \ + --hash=sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d \ + --hash=sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a \ + --hash=sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a \ + --hash=sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d \ + --hash=sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b \ + --hash=sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a \ + --hash=sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826 \ + --hash=sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee \ + --hash=sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9 \ + --hash=sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648 \ + --hash=sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da \ + --hash=sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2 \ + --hash=sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2 \ + --hash=sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87 # via # -r src/backend/requirements.in # django-anymail @@ -482,17 +477,17 @@ cryptography==46.0.3 \ # jwcrypto # paramiko # pyjwt -cssselect2==0.8.0 \ - --hash=sha256:46fc70ebc41ced7a32cd42d58b1884d72ade23d21e5a4eaaf022401c13f0e76e \ - --hash=sha256:7674ffb954a3b46162392aee2a3a0aedb2e14ecf99fcc28644900f4e6e3e9d3a +cssselect2==0.9.0 \ + --hash=sha256:6a99e5f91f9a016a304dd929b0966ca464bcfda15177b6fb4a118fc0fb5d9563 \ + --hash=sha256:759aa22c216326356f65e62e791d66160a0f9c91d1424e8d8adc5e74dddfc6fb # via weasyprint defusedxml==0.7.1 \ --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 # via python3-openid -django==5.2.9 \ - --hash=sha256:16b5ccfc5e8c27e6c0561af551d2ea32852d7352c67d452ae3e76b4f6b2ca495 \ - --hash=sha256:3a4ea88a70370557ab1930b332fd2887a9f48654261cdffda663fef5976bb00a +django==5.2.12 \ + --hash=sha256:4853482f395c3a151937f6991272540fcbf531464f254a347bf7c89f53c8cff7 \ + --hash=sha256:6b809af7165c73eff5ce1c87fdae75d4da6520d6667f86401ecf55b681eb1eeb # via # -r src/backend/requirements.in # django-allauth @@ -523,13 +518,13 @@ django==5.2.9 \ # djangorestframework # djangorestframework-simplejwt # drf-spectacular -django-allauth[headless, mfa, openid, saml, socialaccount]==65.13.1 \ - --hash=sha256:2887294beedfd108b4b52ebd182e0ed373deaeb927fc5a22f77bbde3174704a6 \ - --hash=sha256:2af0d07812f8c1a8e3732feaabe6a9db5ecf3fad6b45b6a0f7fd825f656c5a15 +django-allauth[headless, mfa, openid, saml, socialaccount]==65.14.3 \ + --hash=sha256:1d8e1127bdffceb8001bdd9bafbf97661f81e92f4b7bd4f6e799167b0311286d \ + --hash=sha256:548eef76ab85f6e48f46f98437abf22acf0e834f73e9915fb6cc3f31a0dcdf4d # via -r src/backend/requirements.in -django-anymail[amazon-ses, postal]==13.1 \ - --hash=sha256:63e48402ec8258f17640eb73c8c64141f16d2f8ae7d448d0fb1c66e82b7cbcf6 \ - --hash=sha256:b51783176f8a8382e958808151551558e4a46d1375fbc343742d1ebd06ce8e9e +django-anymail[amazon-ses, postal]==14.0 \ + --hash=sha256:98e5575bcff231952a92117b7d0a4dd37fab582333a343de302d415a31dc72b1 \ + --hash=sha256:ca42e52da62d2c96ce92412f9d68ef6d2067d96a384096b6e932d6a247e9fd61 # via -r src/backend/requirements.in django-cleanup==9.0.0 \ --hash=sha256:19f8b0e830233f9f0f683b17181f414672a0f48afe3ea3cc80ba47ae40ad880c \ @@ -539,9 +534,9 @@ django-cors-headers==4.9.0 \ --hash=sha256:15c7f20727f90044dcee2216a9fd7303741a864865f0c3657e28b7056f61b449 \ --hash=sha256:fe5d7cb59fdc2c8c646ce84b727ac2bca8912a247e6e68e1fb507372178e59e8 # via -r src/backend/requirements.in -django-dbbackup==5.0.1 \ - --hash=sha256:52e1ed0c8082eb29b2e96231db0101a47a34442176542c27659992918ae9ef2a \ - --hash=sha256:5f9f764fcd9be3c7d6acde31ad3a20ec9093fc42014cd3e84e71eae9201d675f +django-dbbackup==5.2.0 \ + --hash=sha256:540948869e44778b5b33333cbab0cfe44279defd47df635d309ede8666894370 \ + --hash=sha256:72b11dd31758abcf8f2d405fd2efbc49c9624bc17196f8c68542d3dc8d8d53c3 # via -r src/backend/requirements.in django-error-report-2==0.4.2 \ --hash=sha256:1dd99c497af09b7ea99f5fbaf910501838150a9d5390796ea00e187bc62f6c1b \ @@ -551,9 +546,9 @@ django-filter==25.2 \ --hash=sha256:760e984a931f4468d096f5541787efb8998c61217b73006163bf2f9523fe8f23 \ --hash=sha256:9c0f8609057309bba611062fe1b720b4a873652541192d232dd28970383633e3 # via -r src/backend/requirements.in -django-flags==5.1.0 \ - --hash=sha256:47f33efba238fe83a2c1f6f5764147fe62d770039f64b3a039e0e461bbc36e79 \ - --hash=sha256:6cfb15151f94d13de1a497901fc1dd4f0510251e5ec23a6732d674824f499e72 +django-flags==5.2.0 \ + --hash=sha256:a3aee5e0d11e24e35f5ae4a423d52cad721f639181c1b1251e0148d8530a3f81 \ + --hash=sha256:aa22543410f68a4082c576f3be469ea67a51c933f8a43eb8b10f6236f158e17e # via -r src/backend/requirements.in django-ical==1.9.2 \ --hash=sha256:44c9b6fa90d09f25e9ebaa91ed9eb007f079afbc23d6aac909cfc18188a8e90c \ @@ -574,29 +569,29 @@ django-maintenance-mode==0.22.0 \ --hash=sha256:502f04f845d6996e8add321186b3b9236c3702de7cb0ab14952890af6523b9e5 \ --hash=sha256:a9cf2ba79c9945bd67f98755a6cfd281869d39b3745bbb5d1f571d058657aa85 # via -r src/backend/requirements.in -django-markdownify==0.9.5 \ - --hash=sha256:2c4ae44e386c209453caf5e9ea1b74f64535985d338ad2d5ad5e7089cc94be86 \ - --hash=sha256:34c34eba4a797282a5c5bd97b13cec84d6a4c0673ad47ce1c1d000d74dd8d4ab +django-markdownify==0.9.6 \ + --hash=sha256:9863b2bfa6d159ad1423dc93bf0d6eadc6413776de304049aa9fcfa5edd2ce1c \ + --hash=sha256:edcf47b2026d55a8439049d35c8b54e11066a4856c4fad1060e139cb3d2eee52 # via -r src/backend/requirements.in -django-money==3.5.4 \ - --hash=sha256:25933ed6177f8dc981114db813c7c5d36c7c89bc4017f2b1b2bb0209b5f68876 \ - --hash=sha256:628b3afb6671edc2cbd26743d858c31d3b99a735357f7acb6a399ab3ab008d2b +django-money==3.6.0 \ + --hash=sha256:94402f2831f2726b94ef2da35b4059441b4c0aedfc47b312472200d4ffdf8d73 \ + --hash=sha256:a8d249bf3ce6ad7fb953530c920cc85ea7f1137c0fde747a74204ea24ec97ab1 # via -r src/backend/requirements.in django-mptt==0.18.0 \ --hash=sha256:bfa3f01627e3966a1df901aeca74570a3e933e66809ebf58d9df673e63627afb \ --hash=sha256:cf5661357ff22bc64e20d3341c26e538aa54583aea0763cfe6aaec0ab8e3a8ee # via -r src/backend/requirements.in -django-oauth-toolkit==3.1.0 \ - --hash=sha256:10ddc90804297d913dfb958edd58d5fac541eb1ca912f47893ca1e482bb2a11f \ - --hash=sha256:d5a59d07588cfefa8818e99d65040a252eb2ede22512483e2240c91d0b885c8e +django-oauth-toolkit==3.2.0 \ + --hash=sha256:bd2cd2719b010231a2f370f927dbcc740454fb1d0dd7e7f4138f36227363dc26 \ + --hash=sha256:c36761ae6810083d95a652e9c820046cde0d45a2e2a5574bbe7202656ec20bb6 # via -r src/backend/requirements.in django-otp==1.3.0 \ --hash=sha256:5277731bc05b6cdbf96aa84ac46018e30ed5fb248086053b0146f925de059060 \ --hash=sha256:8f4156a3c14ce2aaa31379385eadf388925cd50fc4b5d20a3b944f454c98ff7c # via -r src/backend/requirements.in -django-picklefield==3.3 \ - --hash=sha256:4e76dd20f2e95ffdaf18d641226ccecc169ff0473b0d6bec746f3ab97c26b8cb \ - --hash=sha256:d6f6fd94a17177fe0d16b0b452a9860b8a1da97b6e70633ab53ade4975f1ce9a +django-picklefield==3.4.0 \ + --hash=sha256:3a1f740536c0e60d0dba43aa89ccdbe86760d4c3f8ec47799eae122baa741d0a \ + --hash=sha256:929bcfbae5b48bd22a52bc04521fdfdd152eee36abb9f20228f9480f9df65f45 # via django-q2 django-q-sentry==0.1.6 \ --hash=sha256:9b8b4d7fad253a7d9a47f2c2ab0d9dea83078b7ef45c8849dbb1e4176ef8d050 @@ -605,9 +600,9 @@ django-q2==1.9.0 \ --hash=sha256:4eded27644b0ffb291839c9f9c12fea6c0dec63ebd891fa6881b0b446098a49d \ --hash=sha256:ef7facca96fae9c11ddf2c5252d3817975c7a9a6d989fa0d65487d8823d57799 # via -r src/backend/requirements.in -django-recurrence==1.11.1 \ - --hash=sha256:0c65f30872599b5813a9bab6952dada23c55894f28674490a753ada559f14bc5 \ - --hash=sha256:9c89444e651a78c587f352c5f63eda48ab2f53996347b9fcdff2d248f4fcff70 +django-recurrence==1.14 \ + --hash=sha256:154a6221bd6667c35250d9fa89bbc4792b3f1ec5dc8dff0f5872186b6df3cf76 \ + --hash=sha256:3e7420a38c7fa2f5073598e2a4236c65a983213f30f4413618448b43514649cd # via django-ical django-redis==6.0.0 \ --hash=sha256:20bf0063a8abee567eb5f77f375143c32810c8700c0674ced34737f8de4e36c0 \ @@ -643,9 +638,9 @@ django-taggit==6.1.0 \ django-xforwardedfor-middleware==2.0 \ --hash=sha256:16fd1cb27f33a5541b6f3e0b43afb1b7334a76f27a1255b69e14ec5c440f0b24 # via -r src/backend/requirements.in -djangorestframework==3.16.1 \ - --hash=sha256:166809528b1aced0a17dc66c24492af18049f2c9420dbd0be29422029cfc3ff7 \ - --hash=sha256:33a59f47fb9c85ede792cbf88bde71893bcda0667bc573f784649521f1102cec +djangorestframework==3.17.0 \ + --hash=sha256:456fd992a33f9e64c9d0f47e85d9787db0efb44f894c1e513315b5e74765bd4c \ + --hash=sha256:d84fe85f30b7ac6e8c0076ce9ff635e4eaedca5912f8d7d2926ce448c08533ba # via # -r src/backend/requirements.in # djangorestframework-simplejwt @@ -654,46 +649,51 @@ djangorestframework-simplejwt[crypto]==5.5.1 \ --hash=sha256:2c30f3707053d384e9f315d11c2daccfcb548d4faa453111ca19a542b732e469 \ --hash=sha256:e72c5572f51d7803021288e2057afcbd03f17fe11d484096f40a460abc76e87f # via -r src/backend/requirements.in -docutils==0.22.3 \ - --hash=sha256:21486ae730e4ca9f622677b1412b879af1791efcfba517e4c6f60be543fc8cdd \ - --hash=sha256:bd772e4aca73aff037958d44f2be5229ded4c09927fcf8690c577b66234d6ceb +docutils==0.22.4 \ + --hash=sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968 \ + --hash=sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de # via -r src/backend/requirements.in drf-spectacular==0.29.0 \ --hash=sha256:0a069339ea390ce7f14a75e8b5af4a0860a46e833fd4af027411a3e94fc1a0cc \ --hash=sha256:d1ee7c9535d89848affb4427347f7c4a22c5d22530b8842ef133d7b72e19b41a # via -r src/backend/requirements.in -dulwich==0.24.10 \ - --hash=sha256:019af16c850ae85254289f9633a29dea02f45351c4182ea20b0c1394c074a13b \ - --hash=sha256:0dfae8c59b97964a907fdf4c5809154a18fd8c55f2eb6d8fd1607464165a9aa2 \ - --hash=sha256:0e1601789554e3d15b294356c78a5403521c27d5460e64dbbc44ffd5b10af4c3 \ - --hash=sha256:15b32f8c3116a1c0a042dde8da96f65a607e263e860ee42b3d4a98ce2c2f4a06 \ - --hash=sha256:1601bfea3906b52c924fae5b6ba32a0b087fb8fae927607e6b5381e6f7559611 \ - --hash=sha256:1b19af8a3ab051003ba05f15fc5c0d6f0d427e795639490790f34ec0558e99e3 \ - --hash=sha256:1f511f7afe1f36e37193214e4e069685d7d0378e756cc96a2fcb138bdf9fefca \ - --hash=sha256:2a56f9838e5d2414a2b57bab370b73b9803fefd98836ef841f0fd489b5cc1349 \ - --hash=sha256:30e028979b6fa7220c913da9c786026611c10746c06496149742602b36a11f6b \ - --hash=sha256:3581ae0af33f28e6c0834d2f41ca67ca81cd92a589e6a5f985e6c64373232958 \ - --hash=sha256:393e9c3cdd382cff20b5beb66989376d6da69e3b0dfec046a884707ab5d27ac9 \ - --hash=sha256:44f62e0244531a8c43ca7771e201ec9e7f6a2fb27f8c3c623939bc03c1f50423 \ - --hash=sha256:470d6cd8207e1a5ff1fb34c4c6fac2ec9a96d618f7062e5fb96c5260927bb9a7 \ - --hash=sha256:4914abb6408a719b7a1f7d9a182d1efd92c326e178b440faf582df50f9f032db \ - --hash=sha256:4b5c225477a529e1d4a2b5e51272a418177e34803938391ce41b7573b2e5b0d0 \ - --hash=sha256:5c724e5fc67c45f3c813f2630795ac388e3e6310534212f799a7a6bf230648c8 \ - --hash=sha256:6a25ca1605a94090514af408f9df64427281aefbb726f542e97d86d3a7c8ec18 \ - --hash=sha256:752c32d517dc608dbb8414061eaaec8ac8a05591b29531f81a83336b018b26c6 \ - --hash=sha256:843de5f678436a27b33aea0f2b87fd0453afdd0135f885a3ca44bc3147846dd2 \ - --hash=sha256:858fae0c7121715282a993abb1919385a28e1a9c4f136f568748d283c2ba874f \ - --hash=sha256:8df79c8080471f363e4dfcfc4e0d2e61e6da73af1fd7d31cb6ae0d34af45a6b4 \ - --hash=sha256:90028182b9a47ea4efed51c81298f3a98e279d7bf5c1f91c47101927a309ee45 \ - --hash=sha256:90b24c0827299cfb53c4f4d4fedc811be5c4b10c11172ff6e5a5c52277fe0b3a \ - --hash=sha256:b715a9f85ed71bef8027275c1bded064e4925071ae8c8a8d9a20c67b31faf3cd \ - --hash=sha256:c262ffc94338999e7808b434dccafaccd572d03b42d4ef140059d4b7cad765a3 \ - --hash=sha256:ce6e05ec50f258ccd14d83114eb32cc5bb241ae4a8c7199d014fd7568de285b1 \ - --hash=sha256:d9793fc1e42149a650a017dc8ce38485368a41729b9937e1dfcfedd0591ebe9d \ - --hash=sha256:e2eda4a634d6f1ac4c0d4786f8772495c8840dfc2b3e595507376bf5e5b0f9c5 \ - --hash=sha256:f102c38207540fa485e85e0b763ce3725a2d49d846dbf316ed271e27fd85ff21 \ - --hash=sha256:f7bfa9f0bfae57685754b163eef6641609047460939d28052e3beeb63efa6795 \ - --hash=sha256:fbf94fa73211d2f029751a72e1ca3a2fd35c6f5d9bb434acdf10a4a79ca322dd +dulwich==1.1.0 \ + --hash=sha256:06c18293fb2c715f035052f0c74f56e5ff52925ad4d0b5a0ebf16118daa5e340 \ + --hash=sha256:0890fff677c617efbac0cd4584bec9753388e6cd6336e7131338ea034b47e899 \ + --hash=sha256:1b1b9adaf82301fd7b360a5fa521cec1623cb9d77a0c5a09d04396637b39eb48 \ + --hash=sha256:2f5a455e67f9ddd018299ce8dd05861a2696d35c6af91e9acdb4af0767bc0b8b \ + --hash=sha256:2f6dd0c5fc45c84790d4a48d168d07f0aa817fcb879d2632e6cee603e98a843c \ + --hash=sha256:333b0f93b289b14f98870317fb0583fdf73d5341f21fd09c694aa88bb06ad911 \ + --hash=sha256:37be136c7a85a64ae0cf8030f4fb2fa4860cff653ad3bcf13c49bf59fea2020c \ + --hash=sha256:3ba0cb28848dd8fd80d4389d1b83968da172376cea34f9bdb39043970fa1a045 \ + --hash=sha256:49c39844b4abe53612d18add7762faf886ade70384a101912e0849f56f885913 \ + --hash=sha256:518307ab080746ee9c32fc13e76ad4f7df8f7665bb85922e974037dd9415541a \ + --hash=sha256:59e10ca543b752fa4b467a9ce420ad95b65e232f817f91809e64fe76eb8e27c6 \ + --hash=sha256:5a662942f123614077f14bc31e66f6adce09561cc25da1ef716c13be8dba56c5 \ + --hash=sha256:693c450a5d327a6a5276f5292d3dd0bc473066d2fd2a2d69a990d7738535deb6 \ + --hash=sha256:6d5a0be4a84cc6ad23b6dcf2f9cbf2a0a65dd907612ad38312b2259ebe7bae56 \ + --hash=sha256:6e318970e405987d10c1fd8d1e45f4e8c75874e771a5512f6fbb51b13d5a3108 \ + --hash=sha256:8cf55f0de4cf90155aa3ab228c8ef9e7e10f7c785339f1688fb71f6adaae302c \ + --hash=sha256:904f09ae3364dc8c026812b0478f2411a973f404aa2654ea18d9f340b3915872 \ + --hash=sha256:941735c87b3657019d197bb72f0e9ec03cbdbf959dc0869e672f5c6871597442 \ + --hash=sha256:9a32f92c2eb86c84a175261f8fb983b6765bb31618d79d0c0dd68fab6f6ca94a \ + --hash=sha256:9aa855db9fee0a7065ae9ffb38e14e353876d82f17e33e1a1fb3830eb8d0cf43 \ + --hash=sha256:9b1bbb785f29f9eb51cddb9d80f82dac03939b7444961283b09adac19a823e88 \ + --hash=sha256:a05a1049b3928205672913f4c490cf7b08afaa3e7ee7e55e15476e696412672f \ + --hash=sha256:a0f3421802225caedd11e95ce40f6a8d3c7a5df906489b6a5f49a20f88f62928 \ + --hash=sha256:a1959be27d8201fcee8612da8afecd8e7992d8db8767dcef8704264db09db2ad \ + --hash=sha256:b223d00cf564c99986945bd18a74e2e9ef85e713cfe5ad61d04184c386d52fed \ + --hash=sha256:ba6f3f0807868f788b7f1d53b9ac0be3e425136b16563994f5ef6ecf5b7c7863 \ + --hash=sha256:bcd67e7f9bdffb4b660330c4597d251cd33e74f5df6898a2c1e6a1730a62af06 \ + --hash=sha256:be593608a57f5cfa2a1b9927c1b486c3007f5a6f34ff251feaeca3a6a43d4780 \ + --hash=sha256:c9752d25f01e92587f8db52e50daf3e970deb49555340653ea44ba5e60f0f416 \ + --hash=sha256:cb5e28210e34e6473d982cdf99e420dd2791e7af4d9be796fa760055951d82df \ + --hash=sha256:d491e05d434a403f2ed7454002f39ce6fb9ae8de93bded368721bdb9a1f41778 \ + --hash=sha256:dff1b67e0f76fcaae8f7345c05b1c4f00c11a6c42ace20864e80e7964af31827 \ + --hash=sha256:e738163865dfccf155ef5fa3a2b2c849f38dadc6f009d2be355864233899bb4b \ + --hash=sha256:eb5440145bb2bbab71cdfa149fd297a8b7d4db889ab90c58d7a07009a73c1d28 \ + --hash=sha256:f8789e14981be2d33c3c36a14ec55ae06780c0a865e9df107016c4489a4a022a \ + --hash=sha256:fc38cc6f60c5e475fa61dcd2b743113f35377602c1ba1c82264898d97a7d3c48 # via -r src/backend/requirements.in et-xmlfile==2.0.0 \ --hash=sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa \ @@ -703,9 +703,9 @@ feedparser==6.0.12 \ --hash=sha256:64f76ce90ae3e8ef5d1ede0f8d3b50ce26bcce71dd8ae5e82b1cd2d4a5f94228 \ --hash=sha256:6bbff10f5a52662c00a2e3f86a38928c37c48f77b3c511aedcd51de933549324 # via -r src/backend/requirements.in -fido2==2.0.0 \ - --hash=sha256:3061cd05e73b3a0ef6afc3b803d57c826aa2d6a9732d16abd7277361f58e7964 \ - --hash=sha256:685f54a50a57e019c6156e2dd699802a603e3abf70bab334f26affdd4fb8d4f7 +fido2==2.1.1 \ + --hash=sha256:f1379f845870cc7fc64c7f07323c3ce41e8c96c37054e79e0acd5630b3fec5ac \ + --hash=sha256:f85c16c8084abf6530b6c6ec3a0cf8575943321842e06916686943a8b784182c # via django-allauth flexcache==0.3 \ --hash=sha256:18743bd5a0621bfe2cf8d519e4c3bfdf57a269c15d1ced3fb4b64e0ff4600656 \ @@ -715,144 +715,146 @@ flexparser==0.4 \ --hash=sha256:266d98905595be2ccc5da964fe0a2c3526fbbffdc45b65b3146d75db992ef6b2 \ --hash=sha256:3738b456192dcb3e15620f324c447721023c0293f6af9955b481e91d00179846 # via pint -fonttools[woff]==4.61.0 \ - --hash=sha256:0011d640afa61053bc6590f9a3394bd222de7cfde19346588beabac374e9d8ac \ - --hash=sha256:02bdf8e04d1a70476564b8640380f04bb4ac74edc1fc71f1bacb840b3e398ee9 \ - --hash=sha256:0bdcf2e29d65c26299cc3d502f4612365e8b90a939f46cd92d037b6cb7bb544a \ - --hash=sha256:13e3e20a5463bfeb77b3557d04b30bd6a96a6bb5c15c7b2e7908903e69d437a0 \ - --hash=sha256:14a290c5c93fcab76b7f451e6a4b7721b712d90b3b5ed6908f1abcf794e90d6d \ - --hash=sha256:14fafda386377b6131d9e448af42d0926bad47e038de0e5ba1d58c25d621f028 \ - --hash=sha256:1cfa2eb9bae650e58f0e8ad53c49d19a844d6034d6b259f30f197238abc1ccee \ - --hash=sha256:276f14c560e6f98d24ef7f5f44438e55ff5a67f78fa85236b218462c9f5d0635 \ - --hash=sha256:2cb5e45a824ce14b90510024d0d39dae51bd4fbb54c42a9334ea8c8cf4d95cbe \ - --hash=sha256:2de14557d113faa5fb519f7f29c3abe4d69c17fe6a5a2595cc8cda7338029219 \ - --hash=sha256:2f0bafc8a3b3749c69cc610e5aa3da832d39c2a37a68f03d18ec9a02ecaac04a \ - --hash=sha256:328a9c227984bebaf69f3ac9062265f8f6acc7ddf2e4e344c63358579af0aa3d \ - --hash=sha256:3b2065d94e5d63aafc2591c8b6ccbdb511001d9619f1bca8ad39b745ebeb5efa \ - --hash=sha256:4238120002e68296d55e091411c09eab94e111c8ce64716d17df53fd0eb3bb3d \ - --hash=sha256:46cb3d9279f758ac0cf671dc3482da877104b65682679f01b246515db03dbb72 \ - --hash=sha256:58b4f1b78dfbfe855bb8a6801b31b8cdcca0e2847ec769ad8e0b0b692832dd3b \ - --hash=sha256:59587bbe455dbdf75354a9dbca1697a35a8903e01fab4248d6b98a17032cee52 \ - --hash=sha256:5a9b78da5d5faa17e63b2404b77feeae105c1b7e75f26020ab7a27b76e02039f \ - --hash=sha256:627216062d90ab0d98215176d8b9562c4dd5b61271d35f130bcd30f6a8aaa33a \ - --hash=sha256:63c7125d31abe3e61d7bb917329b5543c5b3448db95f24081a13aaf064360fc8 \ - --hash=sha256:6781e7a4bb010be1cd69a29927b0305c86b843395f2613bdabe115f7d6ea7f34 \ - --hash=sha256:67d841aa272be5500de7f447c40d1d8452783af33b4c3599899319f6ef9ad3c1 \ - --hash=sha256:68704a8bbe0b61976262b255e90cde593dc0fe3676542d9b4d846bad2a890a76 \ - --hash=sha256:6b493c32d2555e9944ec1b911ea649ff8f01a649ad9cba6c118d6798e932b3f0 \ - --hash=sha256:6e5ca8c62efdec7972dfdfd454415c4db49b89aeaefaaacada432f3b7eea9866 \ - --hash=sha256:70e2a0c0182ee75e493ef33061bfebf140ea57e035481d2f95aa03b66c7a0e05 \ - --hash=sha256:787ef9dfd1ea9fe49573c272412ae5f479d78e671981819538143bec65863865 \ - --hash=sha256:7b446623c9cd5f14a59493818eaa80255eec2468c27d2c01b56e05357c263195 \ - --hash=sha256:7fb5b84f48a6a733ca3d7f41aa9551908ccabe8669ffe79586560abcc00a9cfd \ - --hash=sha256:9064b0f55b947e929ac669af5311ab1f26f750214db6dd9a0c97e091e918f486 \ - --hash=sha256:96dfc9bc1f2302224e48e6ee37e656eddbab810b724b52e9d9c13a57a6abad01 \ - --hash=sha256:9821ed77bb676736b88fa87a737c97b6af06e8109667e625a4f00158540ce044 \ - --hash=sha256:a32a16951cbf113d38f1dd8551b277b6e06e0f6f776fece0f99f746d739e1be3 \ - --hash=sha256:a5c5fff72bf31b0e558ed085e4fd7ed96eb85881404ecc39ed2a779e7cf724eb \ - --hash=sha256:ad751319dc532a79bdf628b8439af167181b4210a0cd28a8935ca615d9fdd727 \ - --hash=sha256:adbb4ecee1a779469a77377bbe490565effe8fce6fb2e6f95f064de58f8bac85 \ - --hash=sha256:b2b734d8391afe3c682320840c8191de9bd24e7eb85768dd4dc06ed1b63dbb1b \ - --hash=sha256:b5ca59b7417d149cf24e4c1933c9f44b2957424fc03536f132346d5242e0ebe5 \ - --hash=sha256:b6ceac262cc62bec01b3bb59abccf41b24ef6580869e306a4e88b7e56bb4bdda \ - --hash=sha256:ba774b8cbd8754f54b8eb58124e8bd45f736b2743325ab1a5229698942b9b433 \ - --hash=sha256:c53b47834ae41e8e4829171cc44fec0fdf125545a15f6da41776b926b9645a9a \ - --hash=sha256:c84b430616ed73ce46e9cafd0bf0800e366a3e02fb7e1ad7c1e214dbe3862b1f \ - --hash=sha256:dc25a4a9c1225653e4431a9413d0381b1c62317b0f543bdcec24e1991f612f33 \ - --hash=sha256:df8cbce85cf482eb01f4551edca978c719f099c623277bda8332e5dbe7dba09d \ - --hash=sha256:e074bc07c31406f45c418e17c1722e83560f181d122c412fa9e815df0ff74810 \ - --hash=sha256:e0d87e81e4d869549585ba0beb3f033718501c1095004f5e6aef598d13ebc216 \ - --hash=sha256:e24a1565c4e57111ec7f4915f8981ecbb61adf66a55f378fdc00e206059fcfef \ - --hash=sha256:e2bfacb5351303cae9f072ccf3fc6ecb437a6f359c0606bae4b1ab6715201d87 \ - --hash=sha256:e6cd0d9051b8ddaf7385f99dd82ec2a058e2b46cf1f1961e68e1ff20fcbb61af \ - --hash=sha256:ec520a1f0c7758d7a858a00f090c1745f6cde6a7c5e76fb70ea4044a15f712e7 +fonttools[woff]==4.61.1 \ + --hash=sha256:0de30bfe7745c0d1ffa2b0b7048fb7123ad0d71107e10ee090fa0b16b9452e87 \ + --hash=sha256:10d88e55330e092940584774ee5e8a6971b01fc2f4d3466a1d6c158230880796 \ + --hash=sha256:11f35ad7805edba3aac1a3710d104592df59f4b957e30108ae0ba6c10b11dd75 \ + --hash=sha256:15acc09befd16a0fb8a8f62bc147e1a82817542d72184acca9ce6e0aeda9fa6d \ + --hash=sha256:17d2bf5d541add43822bcf0c43d7d847b160c9bb01d15d5007d84e2217aaa371 \ + --hash=sha256:2180f14c141d2f0f3da43f3a81bc8aa4684860f6b0e6f9e165a4831f24e6a23b \ + --hash=sha256:21e7c8d76f62ab13c9472ccf74515ca5b9a761d1bde3265152a6dc58700d895b \ + --hash=sha256:41a7170d042e8c0024703ed13b71893519a1a6d6e18e933e3ec7507a2c26a4b2 \ + --hash=sha256:41ed4b5ec103bd306bb68f81dc166e77409e5209443e5773cb4ed837bcc9b0d3 \ + --hash=sha256:497c31ce314219888c0e2fce5ad9178ca83fe5230b01a5006726cdf3ac9f24d9 \ + --hash=sha256:4c1b526c8d3f615a7b1867f38a9410849c8f4aef078535742198e942fba0e9bd \ + --hash=sha256:4d7092bb38c53bbc78e9255a59158b150bcdc115a1e3b3ce0b5f267dc35dd63c \ + --hash=sha256:4f5686e1fe5fce75d82d93c47a438a25bf0d1319d2843a926f741140b2b16e0c \ + --hash=sha256:58b0ee0ab5b1fc9921eccfe11d1435added19d6494dde14e323f25ad2bc30c56 \ + --hash=sha256:5ce02f38a754f207f2f06557523cd39a06438ba3aafc0639c477ac409fc64e37 \ + --hash=sha256:5fade934607a523614726119164ff621e8c30e8fa1ffffbbd358662056ba69f0 \ + --hash=sha256:5fe9fd43882620017add5eabb781ebfbc6998ee49b35bd7f8f79af1f9f99a958 \ + --hash=sha256:64102ca87e84261419c3747a0d20f396eb024bdbeb04c2bfb37e2891f5fadcb5 \ + --hash=sha256:664c5a68ec406f6b1547946683008576ef8b38275608e1cee6c061828171c118 \ + --hash=sha256:6675329885c44657f826ef01d9e4fb33b9158e9d93c537d84ad8399539bc6f69 \ + --hash=sha256:75c1a6dfac6abd407634420c93864a1e274ebc1c7531346d9254c0d8f6ca00f9 \ + --hash=sha256:75da8f28eff26defba42c52986de97b22106cb8f26515b7c22443ebc9c2d3261 \ + --hash=sha256:77efb033d8d7ff233385f30c62c7c79271c8885d5c9657d967ede124671bbdfb \ + --hash=sha256:78a7d3ab09dc47ac1a363a493e6112d8cabed7ba7caad5f54dbe2f08676d1b47 \ + --hash=sha256:7c7db70d57e5e1089a274cbb2b1fd635c9a24de809a231b154965d415d6c6d24 \ + --hash=sha256:8c56c488ab471628ff3bfa80964372fc13504ece601e0d97a78ee74126b2045c \ + --hash=sha256:91669ccac46bbc1d09e9273546181919064e8df73488ea087dcac3e2968df9ba \ + --hash=sha256:9b666a475a65f4e839d3d10473fad6d47e0a9db14a2f4a224029c5bfde58ad2c \ + --hash=sha256:9cfef3ab326780c04d6646f68d4b4742aae222e8b8ea1d627c74e38afcbc9d91 \ + --hash=sha256:a13fc8aeb24bad755eea8f7f9d409438eb94e82cf86b08fe77a03fbc8f6a96b1 \ + --hash=sha256:a75c301f96db737e1c5ed5fd7d77d9c34466de16095a266509e13da09751bd19 \ + --hash=sha256:a76d4cb80f41ba94a6691264be76435e5f72f2cb3cab0b092a6212855f71c2f6 \ + --hash=sha256:aed04cabe26f30c1647ef0e8fbb207516fd40fe9472e9439695f5c6998e60ac5 \ + --hash=sha256:b148b56f5de675ee16d45e769e69f87623a4944f7443850bf9a9376e628a89d2 \ + --hash=sha256:b501c862d4901792adaec7c25b1ecc749e2662543f68bb194c42ba18d6eec98d \ + --hash=sha256:b846a1fcf8beadeb9ea4f44ec5bdde393e2f1569e17d700bfc49cd69bde75881 \ + --hash=sha256:b931ae8f62db78861b0ff1ac017851764602288575d65b8e8ff1963fed419063 \ + --hash=sha256:c33ab3ca9d3ccd581d58e989d67554e42d8d4ded94ab3ade3508455fe70e65f7 \ + --hash=sha256:c6604b735bb12fef8e0efd5578c9fb5d3d8532d5001ea13a19cddf295673ee09 \ + --hash=sha256:d8db08051fc9e7d8bc622f2112511b8107d8f27cd89e2f64ec45e9825e8288da \ + --hash=sha256:d9203500f7c63545b4ce3799319fe4d9feb1a1b89b28d3cb5abd11b9dd64147e \ + --hash=sha256:dc492779501fa723b04d0ab1f5be046797fee17d27700476edc7ee9ae535a61e \ + --hash=sha256:e6bcdf33aec38d16508ce61fd81838f24c83c90a1d1b8c68982857038673d6b8 \ + --hash=sha256:e76ce097e3c57c4bcb67c5aa24a0ecdbd9f74ea9219997a707a4061fbe2707aa \ + --hash=sha256:eff1ac3cc66c2ac7cda1e64b4e2f3ffef474b7335f92fc3833fc632d595fcee6 \ + --hash=sha256:f3cb4a569029b9f291f88aafc927dd53683757e640081ca8c412781ea144565e \ + --hash=sha256:f79b168428351d11e10c5aeb61a74e1851ec221081299f4cf56036a95431c43a \ + --hash=sha256:fa646ecec9528bef693415c79a86e733c70a4965dd938e9a226b0fc64c9d2e6c \ + --hash=sha256:fe2efccb324948a11dd09d22136fe2ac8a97d6c1347cf0b58a911dcd529f66b7 \ + --hash=sha256:fff4f534200a04b4a36e7ae3cb74493afe807b517a09e99cb4faa89a34ed6ecd # via weasyprint -googleapis-common-protos==1.72.0 \ - --hash=sha256:4299c5a82d5ae1a9702ada957347726b167f9f8d1fc352477702a1e851ff4038 \ - --hash=sha256:e55a601c1b32b52d7a3e65f43563e2aa61bcd737998ee672ac9b951cd49319f5 +googleapis-common-protos==1.73.0 \ + --hash=sha256:778d07cd4fbeff84c6f7c72102f0daf98fa2bfd3fa8bea426edc545588da0b5a \ + --hash=sha256:dfdaaa2e860f242046be561e6d6cb5c5f1541ae02cfbcb034371aadb2942b4e8 # via # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -grpcio==1.76.0 \ - --hash=sha256:035d90bc79eaa4bed83f524331d55e35820725c9fbb00ffa1904d5550ed7ede3 \ - --hash=sha256:04bbe1bfe3a68bbfd4e52402ab7d4eb59d72d02647ae2042204326cf4bbad280 \ - --hash=sha256:063065249d9e7e0782d03d2bca50787f53bd0fb89a67de9a7b521c4a01f1989b \ - --hash=sha256:06c3d6b076e7b593905d04fdba6a0525711b3466f43b3400266f04ff735de0cd \ - --hash=sha256:08caea849a9d3c71a542827d6df9d5a69067b0a1efbea8a855633ff5d9571465 \ - --hash=sha256:0aaa82d0813fd4c8e589fac9b65d7dd88702555f702fb10417f96e2a2a6d4c0f \ - --hash=sha256:0b7604868b38c1bfd5cf72d768aedd7db41d78cb6a4a18585e33fb0f9f2363fd \ - --hash=sha256:0c37db8606c258e2ee0c56b78c62fc9dee0e901b5dbdcf816c2dd4ad652b8b0c \ - --hash=sha256:1c9b93f79f48b03ada57ea24725d83a30284a012ec27eab2cf7e50a550cbbbcc \ - --hash=sha256:2107b0c024d1b35f4083f11245c0e23846ae64d02f40b2b226684840260ed054 \ - --hash=sha256:2229ae655ec4e8999599469559e97630185fdd53ae1e8997d147b7c9b2b72cba \ - --hash=sha256:25a18e9810fbc7e7f03ec2516addc116a957f8cbb8cbc95ccc80faa072743d03 \ - --hash=sha256:26ef06c73eb53267c2b319f43e6634c7556ea37672029241a056629af27c10e2 \ - --hash=sha256:2e1743fbd7f5fa713a1b0a8ac8ebabf0ec980b5d8809ec358d488e273b9cf02a \ - --hash=sha256:32483fe2aab2c3794101c2a159070584e5db11d0aa091b2c0ea9c4fc43d0d749 \ - --hash=sha256:3bf0f392c0b806905ed174dcd8bdd5e418a40d5567a05615a030a5aeddea692d \ - --hash=sha256:3e2a27c89eb9ac3d81ec8835e12414d73536c6e620355d65102503064a4ed6eb \ - --hash=sha256:40ad3afe81676fd9ec6d9d406eda00933f218038433980aa19d401490e46ecde \ - --hash=sha256:4215d3a102bd95e2e11b5395c78562967959824156af11fa93d18fdd18050990 \ - --hash=sha256:45d59a649a82df5718fd9527ce775fd66d1af35e6d31abdcdc906a49c6822958 \ - --hash=sha256:45e0111e73f43f735d70786557dc38141185072d7ff8dc1829d6a77ac1471468 \ - --hash=sha256:479496325ce554792dba6548fae3df31a72cef7bad71ca2e12b0e58f9b336bfc \ - --hash=sha256:490fa6d203992c47c7b9e4a9d39003a0c2bcc1c9aa3c058730884bbbb0ee9f09 \ - --hash=sha256:49ce47231818806067aea3324d4bf13825b658ad662d3b25fada0bdad9b8a6af \ - --hash=sha256:4baf3cbe2f0be3289eb68ac8ae771156971848bb8aaff60bad42005539431980 \ - --hash=sha256:522175aba7af9113c48ec10cc471b9b9bd4f6ceb36aeb4544a8e2c80ed9d252d \ - --hash=sha256:5e8571632780e08526f118f74170ad8d50fb0a48c23a746bef2a6ebade3abd6f \ - --hash=sha256:615ba64c208aaceb5ec83bfdce7728b80bfeb8be97562944836a7a0a9647d882 \ - --hash=sha256:61f69297cba3950a524f61c7c8ee12e55c486cb5f7db47ff9dcee33da6f0d3ae \ - --hash=sha256:65a20de41e85648e00305c1bb09a3598f840422e522277641145a32d42dcefcc \ - --hash=sha256:6a15c17af8839b6801d554263c546c69c4d7718ad4321e3166175b37eaacca77 \ - --hash=sha256:747fa73efa9b8b1488a95d0ba1039c8e2dca0f741612d80415b1e1c560febf4e \ - --hash=sha256:7be78388d6da1a25c0d5ec506523db58b18be22d9c37d8d3a32c08be4987bd73 \ - --hash=sha256:81fd9652b37b36f16138611c7e884eb82e0cec137c40d3ef7c3f9b3ed00f6ed8 \ - --hash=sha256:83d57312a58dcfe2a3a0f9d1389b299438909a02db60e2f2ea2ae2d8034909d3 \ - --hash=sha256:8843114c0cfce61b40ad48df65abcfc00d4dba82eae8718fab5352390848c5da \ - --hash=sha256:8cc3309d8e08fd79089e13ed4819d0af72aa935dd8f435a195fd152796752ff2 \ - --hash=sha256:8ebe63ee5f8fa4296b1b8cfc743f870d10e902ca18afc65c68cf46fd39bb0783 \ - --hash=sha256:8eddfb4d203a237da6f3cc8a540dad0517d274b5a1e9e636fd8d2c79b5c1d397 \ - --hash=sha256:922fa70ba549fce362d2e2871ab542082d66e2aaf0c19480ea453905b01f384e \ - --hash=sha256:931091142fd8cc14edccc0845a79248bc155425eee9a98b2db2ea4f00a235a42 \ - --hash=sha256:971fd5a1d6e62e00d945423a567e42eb1fa678ba89072832185ca836a94daaa6 \ - --hash=sha256:980a846182ce88c4f2f7e2c22c56aefd515daeb36149d1c897f83cf57999e0b6 \ - --hash=sha256:9d9adda641db7207e800a7f089068f6f645959f2df27e870ee81d44701dd9db3 \ - --hash=sha256:9f8f757bebaaea112c00dba718fc0d3260052ce714e25804a03f93f5d1c6cc11 \ - --hash=sha256:a6ae758eb08088d36812dd5d9af7a9859c05b1e0f714470ea243694b49278e7b \ - --hash=sha256:a8c2cf1209497cf659a667d7dea88985e834c24b7c3b605e6254cbb5076d985c \ - --hash=sha256:acab0277c40eff7143c2323190ea57b9ee5fd353d8190ee9652369fae735668a \ - --hash=sha256:b331680e46239e090f5b3cead313cc772f6caa7d0fc8de349337563125361a4a \ - --hash=sha256:c088e7a90b6017307f423efbb9d1ba97a22aa2170876223f9709e9d1de0b5347 \ - --hash=sha256:d099566accf23d21037f18a2a63d323075bebace807742e4b0ac210971d4dd70 \ - --hash=sha256:d388087771c837cdb6515539f43b9d4bf0b0f23593a24054ac16f7a960be16f4 \ - --hash=sha256:dcfe41187da8992c5f40aa8c5ec086fa3672834d2be57a32384c08d5a05b4c00 \ - --hash=sha256:e6d1db20594d9daba22f90da738b1a0441a7427552cc6e2e3d1297aeddc00378 \ - --hash=sha256:ebea5cc3aa8ea72e04df9913492f9a96d9348db876f9dda3ad729cfedf7ac416 \ - --hash=sha256:ebebf83299b0cb1721a8859ea98f3a77811e35dce7609c5c963b9ad90728f886 \ - --hash=sha256:f0e34c2079d47ae9f6188211db9e777c619a21d4faba6977774e8fa43b085e48 \ - --hash=sha256:f92f88e6c033db65a5ae3d97905c8fea9c725b63e28d5a75cb73b49bda5024d8 \ - --hash=sha256:f9f7bd5faab55f47231ad8dba7787866b69f5e93bc306e3915606779bbfb4ba8 \ - --hash=sha256:fd5ef5932f6475c436c4a55e4336ebbe47bd3272be04964a03d316bbf4afbcbc \ - --hash=sha256:ff8a59ea85a1f2191a0ffcc61298c571bc566332f82e5f5be1b83c9d8e668a62 +grpcio==1.78.0 \ + --hash=sha256:082653eecbdf290e6e3e2c276ab2c54b9e7c299e07f4221872380312d8cf395e \ + --hash=sha256:10a9a644b5dd5aec3b82b5b0b90d41c0fa94c85ef42cb42cf78a23291ddb5e7d \ + --hash=sha256:12a771591ae40bc65ba67048fa52ef4f0e6db8279e595fd349f9dfddeef571f9 \ + --hash=sha256:185dea0d5260cbb2d224c507bf2a5444d5abbb1fa3594c1ed7e4c709d5eb8383 \ + --hash=sha256:1afa62af6e23f88629f2b29ec9e52ec7c65a7176c1e0a83292b93c76ca882558 \ + --hash=sha256:2045397e63a7a0ee7957c25f7dbb36ddc110e0cfb418403d110c0a7a68a844e9 \ + --hash=sha256:207db540302c884b8848036b80db352a832b99dfdf41db1eb554c2c2c7800f65 \ + --hash=sha256:271c73e6e5676afe4fc52907686670c7cea22ab2310b76a59b678403ed40d670 \ + --hash=sha256:2777b783f6c13b92bd7b716667452c329eefd646bfb3f2e9dabea2e05dbd34f6 \ + --hash=sha256:2bf5e2e163b356978b23652c4818ce4759d40f4712ee9ec5a83c4be6f8c23a3a \ + --hash=sha256:35eb275bf1751d2ffbd8f57cdbc46058e857cf3971041521b78b7db94bdaf127 \ + --hash=sha256:391e93548644e6b2726f1bb84ed60048d4bcc424ce5e4af0843d28ca0b754fec \ + --hash=sha256:3c586ac70e855c721bda8f548d38c3ca66ac791dc49b66a8281a1f99db85e452 \ + --hash=sha256:3f8904a8165ab21e07e58bf3e30a73f4dffc7a1e0dbc32d51c61b5360d26f43e \ + --hash=sha256:459ab414b35f4496138d0ecd735fed26f1318af5e52cb1efbc82a09f0d5aa911 \ + --hash=sha256:4c5533d03a6cbd7f56acfc9cfb44ea64f63d29091e40e44010d34178d392d7eb \ + --hash=sha256:51b13f9aed9d59ee389ad666b8c2214cc87b5de258fa712f9ab05f922e3896c6 \ + --hash=sha256:5361a0630a7fdb58a6a97638ab70e1dae2893c4d08d7aba64ded28bb9e7a29df \ + --hash=sha256:5397fff416b79e4b284959642a4e95ac4b0f1ece82c9993658e0e477d40551ec \ + --hash=sha256:57bab6deef2f4f1ca76cc04565df38dc5713ae6c17de690721bdf30cb1e0545c \ + --hash=sha256:6092beabe1966a3229f599d7088b38dfc8ffa1608b5b5cdda31e591e6500f856 \ + --hash=sha256:684083fd383e9dc04c794adb838d4faea08b291ce81f64ecd08e4577c7398adf \ + --hash=sha256:735e38e176a88ce41840c21bb49098ab66177c64c82426e24e0082500cc68af5 \ + --hash=sha256:7382b95189546f375c174f53a5fa873cef91c4b8005faa05cc5b3beea9c4f1c5 \ + --hash=sha256:748b6138585379c737adc08aeffd21222abbda1a86a0dca2a39682feb9196c20 \ + --hash=sha256:74be1268d1439eaaf552c698cdb11cd594f0c49295ae6bb72c34ee31abbe611b \ + --hash=sha256:7cc47943d524ee0096f973e1081cb8f4f17a4615f2116882a5f1416e4cfe92b5 \ + --hash=sha256:859b13906ce098c0b493af92142ad051bf64c7870fa58a123911c88606714996 \ + --hash=sha256:85f93781028ec63f383f6bc90db785a016319c561cc11151fbb7b34e0d012303 \ + --hash=sha256:86ce2371bfd7f212cf60d8517e5e854475c2c43ce14aa910e136ace72c6db6c1 \ + --hash=sha256:86f85dd7c947baa707078a236288a289044836d4b640962018ceb9cd1f899af5 \ + --hash=sha256:8dfffba826efcf366b1e3ccc37e67afe676f290e13a3b48d31a46739f80a8724 \ + --hash=sha256:8f2ac84905d12918e4e55a16da17939eb63e433dc11b677267c35568aa63fc84 \ + --hash=sha256:94309f498bcc07e5a7d16089ab984d42ad96af1d94b5a4eb966a266d9fcabf68 \ + --hash=sha256:94f95cf5d532d0e717eed4fc1810e8e6eded04621342ec54c89a7c2f14b581bf \ + --hash=sha256:9566fe4ababbb2610c39190791e5b829869351d14369603702e890ef3ad2d06e \ + --hash=sha256:9dca934f24c732750389ce49d638069c3892ad065df86cb465b3fa3012b70c9e \ + --hash=sha256:a9f136fbafe7ccf4ac7e8e0c28b31066e810be52d6e344ef954a3a70234e1702 \ + --hash=sha256:ab399ef5e3cd2a721b1038a0f3021001f19c5ab279f145e1146bb0b9f1b2b12c \ + --hash=sha256:b0c689c02947d636bc7fab3e30cc3a3445cca99c834dfb77cd4a6cabfc1c5597 \ + --hash=sha256:b2342d87af32790f934a79c3112641e7b27d63c261b8b4395350dad43eff1dc7 \ + --hash=sha256:b58f37edab4a3881bc6c9bca52670610e0c9ca14e2ea3cf9debf185b870457fb \ + --hash=sha256:bd8cb8026e5f5b50498a3c4f196f57f9db344dad829ffae16b82e4fdbaea2813 \ + --hash=sha256:be63c88b32e6c0f1429f1398ca5c09bc64b0d80950c8bb7807d7d7fb36fb84c7 \ + --hash=sha256:c3f293fdc675ccba4db5a561048cca627b5e7bd1c8a6973ffedabe7d116e22e2 \ + --hash=sha256:c41bc64626db62e72afec66b0c8a0da76491510015417c127bfc53b2fe6d7f7f \ + --hash=sha256:ce3a90455492bf8bfa38e56fbbe1dbd4f872a3d8eeaf7337dc3b1c8aa28c271b \ + --hash=sha256:ce7599575eeb25c0f4dc1be59cada6219f3b56176f799627f44088b21381a28a \ + --hash=sha256:dce09d6116df20a96acfdbf85e4866258c3758180e8c49845d6ba8248b6d0bbb \ + --hash=sha256:de8cb00d1483a412a06394b8303feec5dcb3b55f81d83aa216dbb6a0b86a94f5 \ + --hash=sha256:df2c8f3141f7cbd112a6ebbd760290b5849cda01884554f7c67acc14e7b1758a \ + --hash=sha256:e87cbc002b6f440482b3519e36e1313eb5443e9e9e73d6a52d43bd2004fcfd8e \ + --hash=sha256:e888474dee2f59ff68130f8a397792d8cb8e17e6b3434339657ba4ee90845a8c \ + --hash=sha256:f12857d24d98441af6a1d5c87442d624411db486f7ba12550b07788f74b67b04 \ + --hash=sha256:f2d4e43ee362adfc05994ed479334d5a451ab7bc3f3fee1b796b8ca66895acb4 \ + --hash=sha256:f3d6379493e18ad4d39537a82371c5281e153e963cecb13f953ebac155756525 \ + --hash=sha256:f8dff3d9777e5d2703a962ee5c286c239bf0ba173877cc68dc02c17d042e29de \ + --hash=sha256:f9ab915a267fc47c7e88c387a3a28325b58c898e23d4995f765728f4e3dedb97 \ + --hash=sha256:fbe6e89c7ffb48518384068321621b2a69cab509f58e40e4399fdd378fa6d074 \ + --hash=sha256:fd5f135b1bd58ab088930b3c613455796dfa0393626a6972663ccdda5b4ac6ce \ + --hash=sha256:ff870aebe9a93a85283837801d35cd5f8814fe2ad01e606861a7fb47c762a2b7 # via # -r src/backend/requirements.in # opentelemetry-exporter-otlp-proto-grpc -gunicorn==23.0.0 \ - --hash=sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d \ - --hash=sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec +gunicorn==25.1.0 \ + --hash=sha256:1426611d959fa77e7de89f8c0f32eed6aa03ee735f98c01efba3e281b1c47616 \ + --hash=sha256:d0b1236ccf27f72cfe14bce7caadf467186f19e865094ca84221424e839b8b8b # via -r src/backend/requirements.in -icalendar==6.3.2 \ - --hash=sha256:d400e9c9bb8c025e5a3c77c236941bb690494be52528a0b43cc7e8b7c9505064 \ - --hash=sha256:e0c10ecbfcebe958d33af7d491f6e6b7580d11d475f2eeb29532d0424f9110a1 +icalendar==7.0.3 \ + --hash=sha256:8c9fea6d3a89671bba8b6938d8565b4d0ec465c6a2796ef0f92790dcb9e627cd \ + --hash=sha256:95027ece087ab87184d765f03761f25875821f74cdd18d3b57e9c868216d8fde # via django-ical idna==3.11 \ --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902 - # via requests -importlib-metadata==8.7.0 \ - --hash=sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000 \ - --hash=sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd + # via + # django-anymail + # requests +importlib-metadata==8.7.1 \ + --hash=sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb \ + --hash=sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151 # via opentelemetry-api inflection==0.5.1 \ --hash=sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417 \ @@ -870,15 +872,15 @@ jinja2==3.1.6 \ --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 # via -r src/backend/requirements.in -jmespath==1.0.1 \ - --hash=sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 \ - --hash=sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe +jmespath==1.1.0 \ + --hash=sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d \ + --hash=sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64 # via # boto3 # botocore -jsonschema==4.25.1 \ - --hash=sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63 \ - --hash=sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85 +jsonschema==4.26.0 \ + --hash=sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326 \ + --hash=sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce # via drf-spectacular jsonschema-specifications==2025.9.1 \ --hash=sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe \ @@ -1032,9 +1034,9 @@ lxml==6.0.2 \ # via # python3-saml # xmlsec -markdown==3.10 \ - --hash=sha256:37062d4f2aa4b2b6b32aefb80faa300f82cc790cb949a35b8caede34f2b68c0e \ - --hash=sha256:b5b99d6951e2e4948d939255596523444c0e677c669700b1d17aa4a8a464cb7c +markdown==3.10.2 \ + --hash=sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950 \ + --hash=sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36 # via django-markdownify markupsafe==3.0.3 \ --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ @@ -1137,9 +1139,9 @@ openpyxl==3.1.5 \ --hash=sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2 \ --hash=sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050 # via tablib -opentelemetry-api==1.38.0 \ - --hash=sha256:2891b0197f47124454ab9f0cf58f3be33faca394457ac3e09daba13ff50aa582 \ - --hash=sha256:f4c193b5e8acb0912b06ac5b16321908dd0843d75049c091487322284a3eea12 +opentelemetry-api==1.40.0 \ + --hash=sha256:159be641c0b04d11e9ecd576906462773eb97ae1b657730f0ecf64d32071569f \ + --hash=sha256:82dd69331ae74b06f6a874704be0cfaa49a1650e1537d4a813b86ecef7d0ecf9 # via # -r src/backend/requirements.in # opentelemetry-exporter-otlp-proto-grpc @@ -1156,27 +1158,27 @@ opentelemetry-api==1.38.0 \ # opentelemetry-instrumentation-wsgi # opentelemetry-sdk # opentelemetry-semantic-conventions -opentelemetry-exporter-otlp==1.38.0 \ - --hash=sha256:2f55acdd475e4136117eff20fbf1b9488b1b0b665ab64407516e1ac06f9c3f9d \ - --hash=sha256:bc6562cef229fac8887ed7109fc5abc52315f39d9c03fd487bb8b4ef8fbbc231 +opentelemetry-exporter-otlp==1.40.0 \ + --hash=sha256:48c87e539ec9afb30dc443775a1334cc5487de2f72a770a4c00b1610bf6c697d \ + --hash=sha256:7caa0870b95e2fcb59d64e16e2b639ecffb07771b6cd0000b5d12e5e4fef765a # via -r src/backend/requirements.in -opentelemetry-exporter-otlp-proto-common==1.38.0 \ - --hash=sha256:03cb76ab213300fe4f4c62b7d8f17d97fcfd21b89f0b5ce38ea156327ddda74a \ - --hash=sha256:e333278afab4695aa8114eeb7bf4e44e65c6607d54968271a249c180b2cb605c +opentelemetry-exporter-otlp-proto-common==1.40.0 \ + --hash=sha256:1cbee86a4064790b362a86601ee7934f368b81cd4cc2f2e163902a6e7818a0fa \ + --hash=sha256:7081ff453835a82417bf38dccf122c827c3cbc94f2079b03bba02a3165f25149 # via # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -opentelemetry-exporter-otlp-proto-grpc==1.38.0 \ - --hash=sha256:2473935e9eac71f401de6101d37d6f3f0f1831db92b953c7dcc912536158ebd6 \ - --hash=sha256:7c49fd9b4bd0dbe9ba13d91f764c2d20b0025649a6e4ac35792fb8d84d764bc7 +opentelemetry-exporter-otlp-proto-grpc==1.40.0 \ + --hash=sha256:2aa0ca53483fe0cf6405087a7491472b70335bc5c7944378a0a8e72e86995c52 \ + --hash=sha256:bd4015183e40b635b3dab8da528b27161ba83bf4ef545776b196f0fb4ec47740 # via opentelemetry-exporter-otlp -opentelemetry-exporter-otlp-proto-http==1.38.0 \ - --hash=sha256:84b937305edfc563f08ec69b9cb2298be8188371217e867c1854d77198d0825b \ - --hash=sha256:f16bd44baf15cbe07633c5112ffc68229d0edbeac7b37610be0b2def4e21e90b +opentelemetry-exporter-otlp-proto-http==1.40.0 \ + --hash=sha256:a8d1dab28f504c5d96577d6509f80a8150e44e8f45f82cdbe0e34c99ab040069 \ + --hash=sha256:db48f5e0f33217588bbc00274a31517ba830da576e59503507c839b38fa0869c # via opentelemetry-exporter-otlp -opentelemetry-instrumentation==0.59b0 \ - --hash=sha256:44082cc8fe56b0186e87ee8f7c17c327c4c2ce93bdbe86496e600985d74368ee \ - --hash=sha256:6010f0faaacdaf7c4dff8aac84e226d23437b331dcda7e70367f6d73a7db1adc +opentelemetry-instrumentation==0.61b0 \ + --hash=sha256:92a93a280e69788e8f88391247cc530fd81f16f2b011979d4d6398f805cfbc63 \ + --hash=sha256:cb21b48db738c9de196eba6b805b4ff9de3b7f187e4bbf9a466fa170514f1fc7 # via # opentelemetry-instrumentation-dbapi # opentelemetry-instrumentation-django @@ -1187,64 +1189,64 @@ opentelemetry-instrumentation==0.59b0 \ # opentelemetry-instrumentation-sqlite3 # opentelemetry-instrumentation-system-metrics # opentelemetry-instrumentation-wsgi -opentelemetry-instrumentation-dbapi==0.59b0 \ - --hash=sha256:672d59caa06754b42d4e722644d9fcd00a1f9f862e9ea5cef6d4da454515ac67 \ - --hash=sha256:c50112ae1cdb7f55bddcf57eca96aaa0f2dd78732be2b00953183439a4740493 +opentelemetry-instrumentation-dbapi==0.61b0 \ + --hash=sha256:02fa800682c1de87dcad0e59f2092b3b6fb8b8ea0636518f989e1166b418dcb9 \ + --hash=sha256:8f762c39c8edd20c6aef3282550a2cfbfec76c3f431bf5c36327dcf9ece2e5a0 # via # opentelemetry-instrumentation-psycopg # opentelemetry-instrumentation-pymysql # opentelemetry-instrumentation-sqlite3 -opentelemetry-instrumentation-django==0.59b0 \ - --hash=sha256:469c2d973619355645ec696bbc4afab836ce22cbc83236a0382c3090588f7772 \ - --hash=sha256:a0a9eb74afc3870e72eaaa776054fbfd4d83ae306d0c5995f14414bcef2d830e +opentelemetry-instrumentation-django==0.61b0 \ + --hash=sha256:26c1b0b325a9783d4a2f4df660ba05cf929c3eda2ae9b07916b649bb44e1c5b6 \ + --hash=sha256:9885154dc128578de0e6b5ce49e965c786f8ab071175bec005dcd454510be951 # via -r src/backend/requirements.in -opentelemetry-instrumentation-psycopg==0.59b0 \ - --hash=sha256:3a3dfec0b57f37f16643bc50231a696e6831af556b3196e445b5c11bd29eec0c \ - --hash=sha256:6d0295463a66c5aed6e076c7d801946e60eb020f0d4bb06e17b6b800c73dfbd6 +opentelemetry-instrumentation-psycopg==0.61b0 \ + --hash=sha256:74e9fed3802945f7ae335cffc30fd18cf58c34a4d0619315f799fa21eb5c74ff \ + --hash=sha256:a3e242cad56c0ad4f4f872017c73ce7e6c7012081dda6bd0d776c127fedc358a # via -r src/backend/requirements.in -opentelemetry-instrumentation-pymysql==0.59b0 \ - --hash=sha256:29b25c40410d8bb198dd36827bbb2c72bb2283c32b0eca05e12112282182d082 \ - --hash=sha256:9a9b26909b4b06f4384ad43a35d175e39a1034e664fc2dac1ef3c98217dc103f +opentelemetry-instrumentation-pymysql==0.61b0 \ + --hash=sha256:00aca55c3fd767ebe484affa2f0c2f47edd4095038b509c6aca1a4cfed78af15 \ + --hash=sha256:60ba66a806e4664308bd86fe45f329a6f3bb520c3e9759f68f379b7c9466047f # via -r src/backend/requirements.in -opentelemetry-instrumentation-redis==0.59b0 \ - --hash=sha256:8f7494dede5a6bfe5d8f20da67b371a502883398081856378380efef27da0bdf \ - --hash=sha256:d7f1c7c55ab57e10e0155c4c65d028a7e436aec7ccc7ccbf1d77e8cd12b55abd +opentelemetry-instrumentation-redis==0.61b0 \ + --hash=sha256:8d4e850bbb5f8eeafa44c0eac3a007990c7125de187bc9c3659e29ff7e091172 \ + --hash=sha256:ae0fbb56be9a641e621d55b02a7d62977a2c77c5ee760addd79b9b266e46e523 # via -r src/backend/requirements.in -opentelemetry-instrumentation-requests==0.59b0 \ - --hash=sha256:9af2ffe3317f03074d7f865919139e89170b6763a0251b68c25e8e64e04b3400 \ - --hash=sha256:d43121532877e31a46c48649279cec2504ee1e0ceb3c87b80fe5ccd7eafc14c1 +opentelemetry-instrumentation-requests==0.61b0 \ + --hash=sha256:15f879ce8fb206bd7e6fdc61663ea63481040a845218c0cf42902ce70bd7e9d9 \ + --hash=sha256:cce19b379949fe637eb73ba39b02c57d2d0805447ca6d86534aa33fcb141f683 # via -r src/backend/requirements.in -opentelemetry-instrumentation-sqlite3==0.59b0 \ - --hash=sha256:7b9989d805336a1e78a907b3863376cf4ff1dc96dd8a9e0d385f6bb3686c27ac \ - --hash=sha256:ec13867102687426b835f6c499a287ee2f4195abfba85d372e011a795661914c +opentelemetry-instrumentation-sqlite3==0.61b0 \ + --hash=sha256:202a18e7f9d231bfa44771fdb068bff16f24a6fa5e424a0df4d9232b1a818693 \ + --hash=sha256:96d4f0fa35ba7ee9aa683aa17726cb358c8029cc7b3cf55668ccc77254c29ca5 # via -r src/backend/requirements.in -opentelemetry-instrumentation-system-metrics==0.59b0 \ - --hash=sha256:176d3722113383732fdb4a2c83a999218c2b8c1f2a25e242532fab6d2ad5123a \ - --hash=sha256:48150444e054e64699248b4fa3c8d771921f289b29caf4bbf9163a07c943aecc +opentelemetry-instrumentation-system-metrics==0.61b0 \ + --hash=sha256:3eb55f9a058797cf915946cbb7445e00b31316ac3e55050475792edf3367c321 \ + --hash=sha256:7d4fe3e0ce14e0e6eb18f5826100d6cc1af662e5a8ebc74e9b91fe23f192f3e8 # via -r src/backend/requirements.in -opentelemetry-instrumentation-wsgi==0.59b0 \ - --hash=sha256:f271076e56c22da1d0d3404519ba4a1891b39ee3d470ca7ece7332d57cbaa6b9 \ - --hash=sha256:ff0c3df043bd3653ad6a543cb2a1e666fbd4d63efffa04fa9d9090cef462e798 +opentelemetry-instrumentation-wsgi==0.61b0 \ + --hash=sha256:380f2ae61714e5303275a80b2e14c58571573cd1fddf496d8c39fb9551c5e532 \ + --hash=sha256:bd33b0824166f24134a3400648805e8d2e6a7951f070241294e8b8866611d7fa # via # -r src/backend/requirements.in # opentelemetry-instrumentation-django -opentelemetry-proto==1.38.0 \ - --hash=sha256:88b161e89d9d372ce723da289b7da74c3a8354a8e5359992be813942969ed468 \ - --hash=sha256:b6ebe54d3217c42e45462e2a1ae28c3e2bf2ec5a5645236a490f55f45f1a0a18 +opentelemetry-proto==1.40.0 \ + --hash=sha256:03f639ca129ba513f5819810f5b1f42bcb371391405d99c168fe6937c62febcd \ + --hash=sha256:266c4385d88923a23d63e353e9761af0f47a6ed0d486979777fe4de59dc9b25f # via # opentelemetry-exporter-otlp-proto-common # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -opentelemetry-sdk==1.38.0 \ - --hash=sha256:1c66af6564ecc1553d72d811a01df063ff097cdc82ce188da9951f93b8d10f6b \ - --hash=sha256:93df5d4d871ed09cb4272305be4d996236eedb232253e3ab864c8620f051cebe +opentelemetry-sdk==1.40.0 \ + --hash=sha256:18e9f5ec20d859d268c7cb3c5198c8d105d073714db3de50b593b8c1345a48f2 \ + --hash=sha256:787d2154a71f4b3d81f20524a8ce061b7db667d24e46753f32a7bc48f1c1f3f1 # via # -r src/backend/requirements.in # opentelemetry-exporter-otlp-proto-grpc # opentelemetry-exporter-otlp-proto-http -opentelemetry-semantic-conventions==0.59b0 \ - --hash=sha256:35d3b8833ef97d614136e253c1da9342b4c3c083bbaf29ce31d572a1c3825eed \ - --hash=sha256:7a6db3f30d70202d5bf9fa4b69bc866ca6a30437287de6c510fb594878aed6b0 +opentelemetry-semantic-conventions==0.61b0 \ + --hash=sha256:072f65473c5d7c6dc0355b27d6c9d1a679d63b6d4b4b16a9773062cb7e31192a \ + --hash=sha256:fa530a96be229795f8cef353739b618148b0fe2b4b3f005e60e262926c4d38e2 # via # opentelemetry-instrumentation # opentelemetry-instrumentation-dbapi @@ -1253,16 +1255,16 @@ opentelemetry-semantic-conventions==0.59b0 \ # opentelemetry-instrumentation-requests # opentelemetry-instrumentation-wsgi # opentelemetry-sdk -opentelemetry-util-http==0.59b0 \ - --hash=sha256:6d036a07563bce87bf521839c0671b507a02a0d39d7ea61b88efa14c6e25355d \ - --hash=sha256:ae66ee91be31938d832f3b4bc4eb8a911f6eddd38969c4a871b1230db2a0a560 +opentelemetry-util-http==0.61b0 \ + --hash=sha256:1039cb891334ad2731affdf034d8fb8b48c239af9b6dd295e5fabd07f1c95572 \ + --hash=sha256:8e715e848233e9527ea47e275659ea60a57a75edf5206a3b937e236a6da5fc33 # via # opentelemetry-instrumentation-django # opentelemetry-instrumentation-requests # opentelemetry-instrumentation-wsgi -packaging==25.0 \ - --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \ - --hash=sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f +packaging==26.0 \ + --hash=sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4 \ + --hash=sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 # via # gunicorn # opentelemetry-instrumentation @@ -1274,98 +1276,98 @@ pdf2image==1.17.0 \ --hash=sha256:eaa959bc116b420dd7ec415fcae49b98100dda3dd18cd2fdfa86d09f112f6d57 \ --hash=sha256:ecdd58d7afb810dffe21ef2b1bbc057ef434dabbac6c33778a38a3f7744a27e2 # via -r src/backend/requirements.in -pillow==12.0.0 \ - --hash=sha256:0869154a2d0546545cde61d1789a6524319fc1897d9ee31218eae7a60ccc5643 \ - --hash=sha256:09f2d0abef9e4e2f349305a4f8cc784a8a6c2f58a8c4892eea13b10a943bd26e \ - --hash=sha256:0b817e7035ea7f6b942c13aa03bb554fc44fea70838ea21f8eb31c638326584e \ - --hash=sha256:0fd00cac9c03256c8b2ff58f162ebcd2587ad3e1f2e397eab718c47e24d231cc \ - --hash=sha256:110486b79f2d112cf6add83b28b627e369219388f64ef2f960fef9ebaf54c642 \ - --hash=sha256:1979f4566bb96c1e50a62d9831e2ea2d1211761e5662afc545fa766f996632f6 \ - --hash=sha256:1ac11e8ea4f611c3c0147424eae514028b5e9077dd99ab91e1bd7bc33ff145e1 \ - --hash=sha256:1b1b133e6e16105f524a8dec491e0586d072948ce15c9b914e41cdadd209052b \ - --hash=sha256:1ee80a59f6ce048ae13cda1abf7fbd2a34ab9ee7d401c46be3ca685d1999a399 \ - --hash=sha256:21f241bdd5080a15bc86d3466a9f6074a9c2c2b314100dd896ac81ee6db2f1ba \ - --hash=sha256:266cd5f2b63ff316d5a1bba46268e603c9caf5606d44f38c2873c380950576ad \ - --hash=sha256:26d9f7d2b604cd23aba3e9faf795787456ac25634d82cd060556998e39c6fa47 \ - --hash=sha256:27f95b12453d165099c84f8a8bfdfd46b9e4bda9e0e4b65f0635430027f55739 \ - --hash=sha256:2c54c1a783d6d60595d3514f0efe9b37c8808746a66920315bfd34a938d7994b \ - --hash=sha256:2fa5f0b6716fc88f11380b88b31fe591a06c6315e955c096c35715788b339e3f \ - --hash=sha256:32ed80ea8a90ee3e6fa08c21e2e091bba6eda8eccc83dbc34c95169507a91f10 \ - --hash=sha256:3830c769decf88f1289680a59d4f4c46c72573446352e2befec9a8512104fa52 \ - --hash=sha256:38df9b4bfd3db902c9c2bd369bcacaf9d935b2fff73709429d95cc41554f7b3d \ - --hash=sha256:3adfb466bbc544b926d50fe8f4a4e6abd8c6bffd28a26177594e6e9b2b76572b \ - --hash=sha256:3e42edad50b6909089750e65c91aa09aaf1e0a71310d383f11321b27c224ed8a \ - --hash=sha256:4078242472387600b2ce8d93ade8899c12bf33fa89e55ec89fe126e9d6d5d9e9 \ - --hash=sha256:455247ac8a4cfb7b9bc45b7e432d10421aea9fc2e74d285ba4072688a74c2e9d \ - --hash=sha256:4cc6b3b2efff105c6a1656cfe59da4fdde2cda9af1c5e0b58529b24525d0a098 \ - --hash=sha256:4cf7fed4b4580601c4345ceb5d4cbf5a980d030fd5ad07c4d2ec589f95f09905 \ - --hash=sha256:5193fde9a5f23c331ea26d0cf171fbf67e3f247585f50c08b3e205c7aeb4589b \ - --hash=sha256:5269cc1caeedb67e6f7269a42014f381f45e2e7cd42d834ede3c703a1d915fe3 \ - --hash=sha256:53561a4ddc36facb432fae7a9d8afbfaf94795414f5cdc5fc52f28c1dca90371 \ - --hash=sha256:55f818bd74fe2f11d4d7cbc65880a843c4075e0ac7226bc1a23261dbea531953 \ - --hash=sha256:58eea5ebe51504057dd95c5b77d21700b77615ab0243d8152793dc00eb4faf01 \ - --hash=sha256:5d5c411a8eaa2299322b647cd932586b1427367fd3184ffbb8f7a219ea2041ca \ - --hash=sha256:6846bd2d116ff42cba6b646edf5bf61d37e5cbd256425fa089fee4ff5c07a99e \ - --hash=sha256:6ace95230bfb7cd79ef66caa064bbe2f2a1e63d93471c3a2e1f1348d9f22d6b7 \ - --hash=sha256:6e51b71417049ad6ab14c49608b4a24d8fb3fe605e5dfabfe523b58064dc3d27 \ - --hash=sha256:71db6b4c1653045dacc1585c1b0d184004f0d7e694c7b34ac165ca70c0838082 \ - --hash=sha256:7438839e9e053ef79f7112c881cef684013855016f928b168b81ed5835f3e75e \ - --hash=sha256:759de84a33be3b178a64c8ba28ad5c135900359e85fb662bc6e403ad4407791d \ - --hash=sha256:792a2c0be4dcc18af9d4a2dfd8a11a17d5e25274a1062b0ec1c2d79c76f3e7f8 \ - --hash=sha256:7d87ef5795da03d742bf49439f9ca4d027cde49c82c5371ba52464aee266699a \ - --hash=sha256:7dfb439562f234f7d57b1ac6bc8fe7f838a4bd49c79230e0f6a1da93e82f1fad \ - --hash=sha256:7fa22993bac7b77b78cae22bad1e2a987ddf0d9015c63358032f84a53f23cdc3 \ - --hash=sha256:805ebf596939e48dbb2e4922a1d3852cfc25c38160751ce02da93058b48d252a \ - --hash=sha256:82240051c6ca513c616f7f9da06e871f61bfd7805f566275841af15015b8f98d \ - --hash=sha256:87d4f8125c9988bfbed67af47dd7a953e2fc7b0cc1e7800ec6d2080d490bb353 \ - --hash=sha256:8d8ca2b210ada074d57fcee40c30446c9562e542fc46aedc19baf758a93532ee \ - --hash=sha256:8dc232e39d409036af549c86f24aed8273a40ffa459981146829a324e0848b4b \ - --hash=sha256:90387104ee8400a7b4598253b4c406f8958f59fcf983a6cea2b50d59f7d63d0b \ - --hash=sha256:905b0365b210c73afb0ebe9101a32572152dfd1c144c7e28968a331b9217b94a \ - --hash=sha256:99353a06902c2e43b43e8ff74ee65a7d90307d82370604746738a1e0661ccca7 \ - --hash=sha256:99a7f72fb6249302aa62245680754862a44179b545ded638cf1fef59befb57ef \ - --hash=sha256:9f0b04c6b8584c2c193babcccc908b38ed29524b29dd464bc8801bf10d746a3a \ - --hash=sha256:9fe611163f6303d1619bbcb653540a4d60f9e55e622d60a3108be0d5b441017a \ - --hash=sha256:a3475b96f5908b3b16c47533daaa87380c491357d197564e0ba34ae75c0f3257 \ - --hash=sha256:a6597ff2b61d121172f5844b53f21467f7082f5fb385a9a29c01414463f93b07 \ - --hash=sha256:a7921c5a6d31b3d756ec980f2f47c0cfdbce0fc48c22a39347a895f41f4a6ea4 \ - --hash=sha256:aa5129de4e174daccbc59d0a3b6d20eaf24417d59851c07ebb37aeb02947987c \ - --hash=sha256:aeaefa96c768fc66818730b952a862235d68825c178f1b3ffd4efd7ad2edcb7c \ - --hash=sha256:afbefa430092f71a9593a99ab6a4e7538bc9eabbf7bf94f91510d3503943edc4 \ - --hash=sha256:aff9e4d82d082ff9513bdd6acd4f5bd359f5b2c870907d2b0a9c5e10d40c88fe \ - --hash=sha256:b22bd8c974942477156be55a768f7aa37c46904c175be4e158b6a86e3a6b7ca8 \ - --hash=sha256:b290fd8aa38422444d4b50d579de197557f182ef1068b75f5aa8558638b8d0a5 \ - --hash=sha256:b2e4b27a6e15b04832fe9bf292b94b5ca156016bbc1ea9c2c20098a0320d6cf6 \ - --hash=sha256:b583dc9070312190192631373c6c8ed277254aa6e6084b74bdd0a6d3b221608e \ - --hash=sha256:b87843e225e74576437fd5b6a4c2205d422754f84a06942cfaf1dc32243e45a8 \ - --hash=sha256:bc91a56697869546d1b8f0a3ff35224557ae7f881050e99f615e0119bf934b4e \ - --hash=sha256:bd87e140e45399c818fac4247880b9ce719e4783d767e030a883a970be632275 \ - --hash=sha256:bde737cff1a975b70652b62d626f7785e0480918dece11e8fef3c0cf057351c3 \ - --hash=sha256:bdee52571a343d721fb2eb3b090a82d959ff37fc631e3f70422e0c2e029f3e76 \ - --hash=sha256:bee2a6db3a7242ea309aa7ee8e2780726fed67ff4e5b40169f2c940e7eb09227 \ - --hash=sha256:beeae3f27f62308f1ddbcfb0690bf44b10732f2ef43758f169d5e9303165d3f9 \ - --hash=sha256:c50f36a62a22d350c96e49ad02d0da41dbd17ddc2e29750dbdba4323f85eb4a5 \ - --hash=sha256:c607c90ba67533e1b2355b821fef6764d1dd2cbe26b8c1005ae84f7aea25ff79 \ - --hash=sha256:c7b2a63fd6d5246349f3d3f37b14430d73ee7e8173154461785e43036ffa96ca \ - --hash=sha256:c828a1ae702fc712978bda0320ba1b9893d99be0badf2647f693cc01cf0f04fa \ - --hash=sha256:c85de1136429c524e55cfa4e033b4a7940ac5c8ee4d9401cc2d1bf48154bbc7b \ - --hash=sha256:c98fa880d695de164b4135a52fd2e9cd7b7c90a9d8ac5e9e443a24a95ef9248e \ - --hash=sha256:cae81479f77420d217def5f54b5b9d279804d17e982e0f2fa19b1d1e14ab5197 \ - --hash=sha256:d034140032870024e6b9892c692fe2968493790dd57208b2c37e3fb35f6df3ab \ - --hash=sha256:d120c38a42c234dc9a8c5de7ceaaf899cf33561956acb4941653f8bdc657aa79 \ - --hash=sha256:d4827615da15cd59784ce39d3388275ec093ae3ee8d7f0c089b76fa87af756c2 \ - --hash=sha256:d49e2314c373f4c2b39446fb1a45ed333c850e09d0c59ac79b72eb3b95397363 \ - --hash=sha256:d52610d51e265a51518692045e372a4c363056130d922a7351429ac9f27e70b0 \ - --hash=sha256:d64317d2587c70324b79861babb9c09f71fbb780bad212018874b2c013d8600e \ - --hash=sha256:d77153e14b709fd8b8af6f66a3afbb9ed6e9fc5ccf0b6b7e1ced7b036a228782 \ - --hash=sha256:d7e091d464ac59d2c7ad8e7e08105eaf9dafbc3883fd7265ffccc2baad6ac925 \ - --hash=sha256:dd333073e0cacdc3089525c7df7d39b211bcdf31fc2824e49d01c6b6187b07d0 \ - --hash=sha256:e5d8efac84c9afcb40914ab49ba063d94f5dbdf5066db4482c66a992f47a3a3b \ - --hash=sha256:f135c702ac42262573fe9714dfe99c944b4ba307af5eb507abef1667e2cbbced \ - --hash=sha256:f13711b1a5ba512d647a0e4ba79280d3a9a045aaf7e0cc6fbe96b91d4cdf6b0c \ - --hash=sha256:f4f1231b7dec408e8670264ce63e9c71409d9583dd21d32c163e25213ee2a344 \ - --hash=sha256:fa3ed2a29a9e9d2d488b4da81dcb54720ac3104a20bf0bd273f1e4648aff5af9 \ - --hash=sha256:fb3096c30df99fd01c7bf8e544f392103d0795b9f98ba71a8054bcbf56b255f1 +pillow==12.1.1 \ + --hash=sha256:02f84dfad02693676692746df05b89cf25597560db2857363a208e393429f5e9 \ + --hash=sha256:0330d233c1a0ead844fc097a7d16c0abff4c12e856c0b325f231820fee1f39da \ + --hash=sha256:03edcc34d688572014ff223c125a3f77fb08091e4607e7745002fc214070b35f \ + --hash=sha256:097690ba1f2efdeb165a20469d59d8bb03c55fb6621eb2041a060ae8ea3e9642 \ + --hash=sha256:178aa072084bd88ec759052feca8e56cbb14a60b39322b99a049e58090479713 \ + --hash=sha256:18e5bddd742a44b7e6b1e773ab5db102bd7a94c32555ba656e76d319d19c3850 \ + --hash=sha256:1a9b0ee305220b392e1124a764ee4265bd063e54a751a6b62eff69992f457fa9 \ + --hash=sha256:1f1625b72740fdda5d77b4def688eb8fd6490975d06b909fd19f13f391e077e0 \ + --hash=sha256:1f1be78ce9466a7ee64bfda57bdba0f7cc499d9794d518b854816c41bf0aa4e9 \ + --hash=sha256:1f90cff8aa76835cba5769f0b3121a22bd4eb9e6884cfe338216e557a9a548b8 \ + --hash=sha256:21329ec8c96c6e979cd0dfd29406c40c1d52521a90544463057d2aaa937d66a6 \ + --hash=sha256:2815a87ab27848db0321fb78c7f0b2c8649dee134b7f2b80c6a45c6831d75ccd \ + --hash=sha256:2c1fc0f2ca5f96a3c8407e41cca26a16e46b21060fe6d5b099d2cb01412222f5 \ + --hash=sha256:2e0c664be47252947d870ac0d327fea7e63985a08794758aa8af5b6cb6ec0c9c \ + --hash=sha256:339ffdcb7cbeaa08221cd401d517d4b1fe7a9ed5d400e4a8039719238620ca35 \ + --hash=sha256:344cf1e3dab3be4b1fa08e449323d98a2a3f819ad20f4b22e77a0ede31f0faa1 \ + --hash=sha256:36341d06738a9f66c8287cf8b876d24b18db9bd8740fa0672c74e259ad408cff \ + --hash=sha256:365b10bb9417dd4498c0e3b128018c4a624dc11c7b97d8cc54effe3b096f4c38 \ + --hash=sha256:3a5cbdcddad0af3da87cb16b60d23648bc3b51967eb07223e9fed77a82b457c4 \ + --hash=sha256:417423db963cb4be8bac3fc1204fe61610f6abeed1580a7a2cbb2fbda20f12af \ + --hash=sha256:42fc1f4677106188ad9a55562bbade416f8b55456f522430fadab3cef7cd4e60 \ + --hash=sha256:44ce27545b6efcf0fdbdceb31c9a5bdea9333e664cda58a7e674bb74608b3986 \ + --hash=sha256:472a8d7ded663e6162dafdf20015c486a7009483ca671cece7a9279b512fcb13 \ + --hash=sha256:47b94983da0c642de92ced1702c5b6c292a84bd3a8e1d1702ff923f183594717 \ + --hash=sha256:495c302af3aad1ca67420ddd5c7bd480c8867ad173528767d906428057a11f0e \ + --hash=sha256:4ceb838d4bd9dab43e06c363cab2eebf63846d6a4aeaea283bbdfd8f1a8ed58b \ + --hash=sha256:50480dcd74fa63b8e78235957d302d98d98d82ccbfac4c7e12108ba9ecbdba15 \ + --hash=sha256:518a48c2aab7ce596d3bf79d0e275661b846e86e4d0e7dec34712c30fe07f02a \ + --hash=sha256:559b38da23606e68681337ad74622c4dbba02254fc9cb4488a305dd5975c7eeb \ + --hash=sha256:578510d88c6229d735855e1f278aa305270438d36a05031dfaae5067cc8eb04d \ + --hash=sha256:597bd9c8419bc7c6af5604e55847789b69123bbe25d65cc6ad3012b4f3c98d8b \ + --hash=sha256:5a8eb7ed8d4198bccbd07058416eeec51686b498e784eda166395a23eb99138e \ + --hash=sha256:5c0dd1636633e7e6a0afe7bf6a51a14992b7f8e60de5789018ebbdfae55b040a \ + --hash=sha256:5cb1785d97b0c3d1d1a16bc1d710c4a0049daefc4935f3a8f31f827f4d3d2e7f \ + --hash=sha256:5d1f9575a12bed9e9eedd9a4972834b08c97a352bd17955ccdebfeca5913fa0a \ + --hash=sha256:5d8c41325b382c07799a3682c1c258469ea2ff97103c53717b7893862d0c98ce \ + --hash=sha256:5dae5f21afb91322f2ff791895ddd8889e5e947ff59f71b46041c8ce6db790bc \ + --hash=sha256:600fd103672b925fe62ed08e0d874ea34d692474df6f4bf7ebe148b30f89f39f \ + --hash=sha256:6408a7b064595afcab0a49393a413732a35788f2a5092fdc6266952ed67de586 \ + --hash=sha256:652a2c9ccfb556235b2b501a3a7cf3742148cd22e04b5625c5fe057ea3e3191f \ + --hash=sha256:665e1b916b043cef294bc54d47bf02d87e13f769bc4bc5fa225a24b3a6c5aca9 \ + --hash=sha256:691ab2ac363b8217f7d31b3497108fb1f50faab2f75dfb03284ec2f217e87bf8 \ + --hash=sha256:6c52f062424c523d6c4db85518774cc3d50f5539dd6eed32b8f6229b26f24d40 \ + --hash=sha256:6c6db3b84c87d48d0088943bf33440e0c42370b99b1c2a7989216f7b42eede60 \ + --hash=sha256:7311c0a0dcadb89b36b7025dfd8326ecfa36964e29913074d47382706e516a7c \ + --hash=sha256:7aac39bcf8d4770d089588a2e1dd111cbaa42df5a94be3114222057d68336bd0 \ + --hash=sha256:7b03048319bfc6170e93bd60728a1af51d3dd7704935feb228c4d4faab35d334 \ + --hash=sha256:7e7976bf1910a8116b523b9f9f58bf410f3e8aa330cd9a2bb2953f9266ab49af \ + --hash=sha256:8089c852a56c2966cf18835db62d9b34fef7ba74c726ad943928d494fa7f4735 \ + --hash=sha256:86172b0831b82ce4f7877f280055892b31179e1576aa00d0df3bb1bbf8c3e524 \ + --hash=sha256:89b54027a766529136a06cfebeecb3a04900397a3590fd252160b888479517bf \ + --hash=sha256:89c7e895002bbe49cdc5426150377cbbc04767d7547ed145473f496dfa40408b \ + --hash=sha256:8b7e5304e34942bf62e15184219a7b5ad4ff7f3bb5cca4d984f37df1a0e1aee2 \ + --hash=sha256:8fd420ef0c52c88b5a035a0886f367748c72147b2b8f384c9d12656678dfdfa9 \ + --hash=sha256:98edb152429ab62a1818039744d8fbb3ccab98a7c29fc3d5fcef158f3f1f68b7 \ + --hash=sha256:99c1506ea77c11531d75e3a412832a13a71c7ebc8192ab9e4b2e355555920e3e \ + --hash=sha256:9ad8fa5937ab05218e2b6a4cff30295ad35afd2f83ac592e68c0d871bb0fdbc4 \ + --hash=sha256:9f51079765661884a486727f0729d29054242f74b46186026582b4e4769918e4 \ + --hash=sha256:a003d7422449f6d1e3a34e3dd4110c22148336918ddbfc6a32581cd54b2e0b2b \ + --hash=sha256:a0b1cd6232e2b618adcc54d9882e4e662a089d5768cd188f7c245b4c8c44a397 \ + --hash=sha256:a285e3eb7a5a45a2ff504e31f4a8d1b12ef62e84e5411c6804a42197c1cf586c \ + --hash=sha256:a37691702ed687799de29a518d63d4682d9016932db66d4e90c345831b02fb4e \ + --hash=sha256:a550ae29b95c6dc13cf69e2c9dc5747f814c54eeb2e32d683e5e93af56caa029 \ + --hash=sha256:ab174cd7d29a62dd139c44bf74b698039328f45cb03b4596c43473a46656b2f3 \ + --hash=sha256:ab323b787d6e18b3d91a72fc99b1a2c28651e4358749842b8f8dfacd28ef2052 \ + --hash=sha256:adebb5bee0f0af4909c30db0d890c773d1a92ffe83da908e2e9e720f8edf3984 \ + --hash=sha256:aee2810642b2898bb187ced9b349e95d2a7272930796e022efaf12e99dccd293 \ + --hash=sha256:af9a332e572978f0218686636610555ae3defd1633597be015ed50289a03c523 \ + --hash=sha256:b574c51cf7d5d62e9be37ba446224b59a2da26dc4c1bb2ecbe936a4fb1a7cb7f \ + --hash=sha256:b66e95d05ba806247aaa1561f080abc7975daf715c30780ff92a20e4ec546e1b \ + --hash=sha256:b81b5e3511211631b3f672a595e3221252c90af017e399056d0faabb9538aa80 \ + --hash=sha256:b957b71c6b2387610f556a7eb0828afbe40b4a98036fc0d2acfa5a44a0c2036f \ + --hash=sha256:bb66b7cc26f50977108790e2456b7921e773f23db5630261102233eb355a3b79 \ + --hash=sha256:c6008de247150668a705a6338156efb92334113421ceecf7438a12c9a12dab23 \ + --hash=sha256:c7697918b5be27424e9ce568193efd13d925c4481dd364e43f5dff72d33e10f8 \ + --hash=sha256:cb9bb857b2d057c6dfc72ac5f3b44836924ba15721882ef103cecb40d002d80e \ + --hash=sha256:cc7d296b5ea4d29e6570dabeaed58d31c3fea35a633a69679fb03d7664f43fb3 \ + --hash=sha256:d242e8ac078781f1de88bf823d70c1a9b3c7950a44cdf4b7c012e22ccbcd8e4e \ + --hash=sha256:d2912fd8114fc5545aa3a4b5576512f64c55a03f3ebcca4c10194d593d43ea36 \ + --hash=sha256:d470ab1178551dd17fdba0fef463359c41aaa613cdcd7ff8373f54be629f9f8f \ + --hash=sha256:d4ce8e329c93845720cd2014659ca67eac35f6433fd3050393d85f3ecef0dad5 \ + --hash=sha256:d6e4571eedf43af33d0fc233a382a76e849badbccdf1ac438841308652a08e1f \ + --hash=sha256:e65498daf4b583091ccbb2556c7000abf0f3349fcd57ef7adc9a84a394ed29f6 \ + --hash=sha256:e879bb6cd5c73848ef3b2b48b8af9ff08c5b71ecda8048b7dd22d8a33f60be32 \ + --hash=sha256:e9e8064fb1cc019296958595f6db671fba95209e3ceb0c4734c9baf97de04b20 \ + --hash=sha256:f7ed2c6543bad5a7d5530eb9e78c53132f93dfa44a28492db88b41cdab885202 \ + --hash=sha256:f95c00d5d6700b2b890479664a06e754974848afaae5e21beb4d83c106923fd0 \ + --hash=sha256:f975aa7ef9684ce7e2c18a3aa8f8e2106ce1e46b94ab713d156b2898811651d3 \ + --hash=sha256:fbfa2a7c10cc2623f412753cddf391c7f971c52ca40a3f65dc5039b2939e8563 \ + --hash=sha256:fc354a04072b765eccf2204f588a7a532c9511e8b9c7f900e1b64e3e33487090 \ + --hash=sha256:fc44ef1f3de4f45b50ccf9136999d71abb99dca7706bc75d222ed350b9fd2289 # via # -r src/backend/requirements.in # django-stdimage @@ -1377,107 +1379,107 @@ pint==0.25.2 \ --hash=sha256:85a45d1da8fe9c9f7477fed8aef59ad2b939af3d6611507e1a9cbdacdcd3450a \ --hash=sha256:ca35ab1d8eeeb6f7d9942b3cb5f34ca42b61cdd5fb3eae79531553dcca04dda7 # via -r src/backend/requirements.in -pip-licenses==5.5.0 \ - --hash=sha256:2473e7afd02a0c21460758f70fd2bb3b3c080c5150713dd33baa9493dc1563a5 \ - --hash=sha256:ae1869436d13ee487088d29e71fc5821950062ad25ec28b6a1a443e0add6d8e8 +pip-licenses==5.5.1 \ + --hash=sha256:7df370e6e5024a3f7449abf8e4321ef868ba9a795698ad24ab6851f3e7fc65a7 \ + --hash=sha256:ed5e229a93760e529cfa7edaec6630b5a2cd3874c1bddb8019e5f18a723fdead # via -r src/backend/requirements.in -platformdirs==4.5.0 \ - --hash=sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312 \ - --hash=sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3 +platformdirs==4.9.4 \ + --hash=sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934 \ + --hash=sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868 # via pint ppf-datamatrix==0.2 \ --hash=sha256:819be65eae444b760e178d5761853f78f8e5fca14fec2809b5e3369978fa9244 \ --hash=sha256:8f034d9c90e408f60f8b10a273baab81014c9a81c983dc1ebdc31d4ca5ac5582 # via -r src/backend/requirements.in -prettytable==3.16.0 \ - --hash=sha256:3c64b31719d961bf69c9a7e03d0c1e477320906a98da63952bc6698d6164ff57 \ - --hash=sha256:b5eccfabb82222f5aa46b798ff02a8452cf530a352c31bddfa29be41242863aa +prettytable==3.17.0 \ + --hash=sha256:59f2590776527f3c9e8cf9fe7b66dd215837cca96a9c39567414cbc632e8ddb0 \ + --hash=sha256:aad69b294ddbe3e1f95ef8886a060ed1666a0b83018bbf56295f6f226c43d287 # via pip-licenses -protobuf==6.33.0 \ - --hash=sha256:140303d5c8d2037730c548f8c7b93b20bb1dc301be280c378b82b8894589c954 \ - --hash=sha256:25c9e1963c6734448ea2d308cfa610e692b801304ba0908d7bfa564ac5132995 \ - --hash=sha256:35be49fd3f4fefa4e6e2aacc35e8b837d6703c37a2168a55ac21e9b1bc7559ef \ - --hash=sha256:905b07a65f1a4b72412314082c7dbfae91a9e8b68a0cc1577515f8df58ecf455 \ - --hash=sha256:9a031d10f703f03768f2743a1c403af050b6ae1f3480e9c140f39c45f81b13ee \ - --hash=sha256:c963e86c3655af3a917962c9619e1a6b9670540351d7af9439d06064e3317cc9 \ - --hash=sha256:cd33a8e38ea3e39df66e1bbc462b076d6e5ba3a4ebbde58219d777223a7873d3 \ - --hash=sha256:d6101ded078042a8f17959eccd9236fb7a9ca20d3b0098bbcb91533a5680d035 \ - --hash=sha256:e0697ece353e6239b90ee43a9231318302ad8353c70e6e45499fa52396debf90 \ - --hash=sha256:e0a1715e4f27355afd9570f3ea369735afc853a6c3951a6afe1f80d8569ad298 +protobuf==6.33.5 \ + --hash=sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c \ + --hash=sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02 \ + --hash=sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c \ + --hash=sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd \ + --hash=sha256:8f04fa32763dcdb4973d537d6b54e615cc61108c7cb38fe59310c3192d29510a \ + --hash=sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190 \ + --hash=sha256:a3157e62729aafb8df6da2c03aa5c0937c7266c626ce11a278b6eb7963c4e37c \ + --hash=sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5 \ + --hash=sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0 \ + --hash=sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b # via # googleapis-common-protos # opentelemetry-proto -psutil==7.1.3 \ - --hash=sha256:0005da714eee687b4b8decd3d6cc7c6db36215c9e74e5ad2264b90c3df7d92dc \ - --hash=sha256:1068c303be3a72f8e18e412c5b2a8f6d31750fb152f9cb106b54090296c9d251 \ - --hash=sha256:18349c5c24b06ac5612c0428ec2a0331c26443d259e2a0144a9b24b4395b58fa \ - --hash=sha256:19644c85dcb987e35eeeaefdc3915d059dac7bd1167cdcdbf27e0ce2df0c08c0 \ - --hash=sha256:2bdbcd0e58ca14996a42adf3621a6244f1bb2e2e528886959c72cf1e326677ab \ - --hash=sha256:31d77fcedb7529f27bb3a0472bea9334349f9a04160e8e6e5020f22c59893264 \ - --hash=sha256:3792983e23b69843aea49c8f5b8f115572c5ab64c153bada5270086a2123c7e7 \ - --hash=sha256:3bb428f9f05c1225a558f53e30ccbad9930b11c3fc206836242de1091d3e7dd3 \ - --hash=sha256:56d974e02ca2c8eb4812c3f76c30e28836fffc311d55d979f1465c1feeb2b68b \ - --hash=sha256:6c86281738d77335af7aec228328e944b30930899ea760ecf33a4dba66be5e74 \ - --hash=sha256:8f33a3702e167783a9213db10ad29650ebf383946e91bc77f28a5eb083496bc9 \ - --hash=sha256:95ef04cf2e5ba0ab9eaafc4a11eaae91b44f4ef5541acd2ee91d9108d00d59a7 \ - --hash=sha256:ad81425efc5e75da3f39b3e636293360ad8d0b49bed7df824c79764fb4ba9b8b \ - --hash=sha256:b403da1df4d6d43973dc004d19cee3b848e998ae3154cc8097d139b77156c353 \ - --hash=sha256:bc31fa00f1fbc3c3802141eede66f3a2d51d89716a194bf2cd6fc68310a19880 \ - --hash=sha256:bd0d69cee829226a761e92f28140bec9a5ee9d5b4fb4b0cc589068dbfff559b1 \ - --hash=sha256:c525ffa774fe4496282fb0b1187725793de3e7c6b29e41562733cae9ada151ee \ - --hash=sha256:f39c2c19fe824b47484b96f9692932248a54c43799a84282cfe58d05a6449efd \ - --hash=sha256:fac9cd332c67f4422504297889da5ab7e05fd11e3c4392140f7370f4208ded1f +psutil==7.2.2 \ + --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ + --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ + --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ + --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ + --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ + --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ + --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ + --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ + --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ + --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ + --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ + --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ + --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ + --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ + --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ + --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ + --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ + --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ + --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ + --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ + --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 # via opentelemetry-instrumentation-system-metrics py-moneyed==3.0 \ --hash=sha256:4906f0f02cf2b91edba2e156f2d4e9a78f224059ab8c8fa2ff26230c75d894e8 \ --hash=sha256:9583a14f99c05b46196193d8185206e9b73c8439fc8a5eee9cfc7e733676d9bb # via django-money -pycparser==2.23 \ - --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \ - --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934 +pycparser==3.0 \ + --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ + --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 # via cffi -pydyf==0.11.0 \ - --hash=sha256:0aaf9e2ebbe786ec7a78ec3fbffa4cdcecde53fd6f563221d53c6bc1328848a3 \ - --hash=sha256:394dddf619cca9d0c55715e3c55ea121a9bf9cbc780cdc1201a2427917b86b64 +pydyf==0.12.1 \ + --hash=sha256:ea25b4e1fe7911195cb57067560daaa266639184e8335365cc3ee5214e7eaadc \ + --hash=sha256:fbd7e759541ac725c29c506612003de393249b94310ea78ae44cb1d04b220095 # via weasyprint -pyjwt[crypto]==2.10.1 \ - --hash=sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953 \ - --hash=sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb +pyjwt[crypto]==2.12.1 \ + --hash=sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c \ + --hash=sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b # via # django-allauth # djangorestframework-simplejwt -pynacl==1.6.0 \ - --hash=sha256:04f20784083014e265ad58c1b2dd562c3e35864b5394a14ab54f5d150ee9e53e \ - --hash=sha256:10d755cf2a455d8c0f8c767a43d68f24d163b8fe93ccfaabfa7bafd26be58d73 \ - --hash=sha256:140373378e34a1f6977e573033d1dd1de88d2a5d90ec6958c9485b2fd9f3eb90 \ - --hash=sha256:16c60daceee88d04f8d41d0a4004a7ed8d9a5126b997efd2933e08e93a3bd850 \ - --hash=sha256:16dd347cdc8ae0b0f6187a2608c0af1c8b7ecbbe6b4a06bff8253c192f696990 \ - --hash=sha256:25720bad35dfac34a2bcdd61d9e08d6bfc6041bebc7751d9c9f2446cf1e77d64 \ - --hash=sha256:2d6cd56ce4998cb66a6c112fda7b1fdce5266c9f05044fa72972613bef376d15 \ - --hash=sha256:347dcddce0b4d83ed3f32fd00379c83c425abee5a9d2cd0a2c84871334eaff64 \ - --hash=sha256:4853c154dc16ea12f8f3ee4b7e763331876316cc3a9f06aeedf39bcdca8f9995 \ - --hash=sha256:49c336dd80ea54780bcff6a03ee1a476be1612423010472e60af83452aa0f442 \ - --hash=sha256:4a25cfede801f01e54179b8ff9514bd7b5944da560b7040939732d1804d25419 \ - --hash=sha256:51fed9fe1bec9e7ff9af31cd0abba179d0e984a2960c77e8e5292c7e9b7f7b5d \ - --hash=sha256:536703b8f90e911294831a7fbcd0c062b837f3ccaa923d92a6254e11178aaf42 \ - --hash=sha256:5789f016e08e5606803161ba24de01b5a345d24590a80323379fc4408832d290 \ - --hash=sha256:6b08eab48c9669d515a344fb0ef27e2cbde847721e34bba94a343baa0f33f1f4 \ - --hash=sha256:6b393bc5e5a0eb86bb85b533deb2d2c815666665f840a09e0aa3362bb6088736 \ - --hash=sha256:84709cea8f888e618c21ed9a0efdb1a59cc63141c403db8bf56c469b71ad56f2 \ - --hash=sha256:8bfaa0a28a1ab718bad6239979a5a57a8d1506d0caf2fba17e524dbb409441cf \ - --hash=sha256:bbcc4452a1eb10cd5217318c822fde4be279c9de8567f78bad24c773c21254f8 \ - --hash=sha256:cb36deafe6e2bce3b286e5d1f3e1c246e0ccdb8808ddb4550bb2792f2df298f2 \ - --hash=sha256:cf831615cc16ba324240de79d925eacae8265b7691412ac6b24221db157f6bd1 \ - --hash=sha256:dcdeb41c22ff3c66eef5e63049abf7639e0db4edee57ba70531fc1b6b133185d \ - --hash=sha256:dea103a1afcbc333bc0e992e64233d360d393d1e63d0bc88554f572365664348 \ - --hash=sha256:ef214b90556bb46a485b7da8258e59204c244b1b5b576fb71848819b468c44a7 \ - --hash=sha256:f3482abf0f9815e7246d461fab597aa179b7524628a4bc36f86a7dc418d2608d \ - --hash=sha256:f46386c24a65383a9081d68e9c2de909b1834ec74ff3013271f1bca9c2d233eb \ - --hash=sha256:f4b3824920e206b4f52abd7de621ea7a44fd3cb5c8daceb7c3612345dfc54f2e +pynacl==1.6.2 \ + --hash=sha256:018494d6d696ae03c7e656e5e74cdfd8ea1326962cc401bcf018f1ed8436811c \ + --hash=sha256:04316d1fc625d860b6c162fff704eb8426b1a8bcd3abacea11142cbd99a6b574 \ + --hash=sha256:22de65bb9010a725b0dac248f353bb072969c94fa8d6b1f34b87d7953cf7bbe4 \ + --hash=sha256:26bfcd00dcf2cf160f122186af731ae30ab120c18e8375684ec2670dccd28130 \ + --hash=sha256:2fef529ef3ee487ad8113d287a593fa26f48ee3620d92ecc6f1d09ea38e0709b \ + --hash=sha256:320ef68a41c87547c91a8b58903c9caa641ab01e8512ce291085b5fe2fcb7590 \ + --hash=sha256:3bffb6d0f6becacb6526f8f42adfb5efb26337056ee0831fb9a7044d1a964444 \ + --hash=sha256:44081faff368d6c5553ccf55322ef2819abb40e25afaec7e740f159f74813634 \ + --hash=sha256:46065496ab748469cdd999246d17e301b2c24ae2fdf739132e580a0e94c94a87 \ + --hash=sha256:5811c72b473b2f38f7e2a3dc4f8642e3a3e9b5e7317266e4ced1fba85cae41aa \ + --hash=sha256:622d7b07cc5c02c666795792931b50c91f3ce3c2649762efb1ef0d5684c81594 \ + --hash=sha256:62985f233210dee6548c223301b6c25440852e13d59a8b81490203c3227c5ba0 \ + --hash=sha256:68be3a09455743ff9505491220b64440ced8973fe930f270c8e07ccfa25b1f9e \ + --hash=sha256:834a43af110f743a754448463e8fd61259cd4ab5bbedcf70f9dabad1d28a394c \ + --hash=sha256:8845c0631c0be43abdd865511c41eab235e0be69c81dc66a50911594198679b0 \ + --hash=sha256:8a66d6fb6ae7661c58995f9c6435bda2b1e68b54b598a6a10247bfcdadac996c \ + --hash=sha256:8b097553b380236d51ed11356c953bf8ce36a29a3e596e934ecabe76c985a577 \ + --hash=sha256:a84bf1c20339d06dc0c85d9aea9637a24f718f375d861b2668b2f9f96fa51145 \ + --hash=sha256:a9f9932d8d2811ce1a8ffa79dcbdf3970e7355b5c8eb0c1a881a57e7f7d96e88 \ + --hash=sha256:bc4a36b28dd72fb4845e5d8f9760610588a96d5a51f01d84d8c6ff9849968c14 \ + --hash=sha256:c8a231e36ec2cab018c4ad4358c386e36eede0319a0c41fed24f840b1dac59f6 \ + --hash=sha256:c949ea47e4206af7c8f604b8278093b674f7c79ed0d4719cc836902bf4517465 \ + --hash=sha256:d071c6a9a4c94d79eb665db4ce5cedc537faf74f2355e4d502591d850d3913c0 \ + --hash=sha256:d29bfe37e20e015a7d8b23cfc8bd6aa7909c92a1b8f41ee416bbb3e79ef182b2 \ + --hash=sha256:fe9847ca47d287af41e82be1dd5e23023d3c31a951da134121ab02e42ac218c9 # via paramiko -pypdf==6.4.0 \ - --hash=sha256:4769d471f8ddc3341193ecc5d6560fa44cf8cd0abfabf21af4e195cc0c224072 \ - --hash=sha256:55ab9837ed97fd7fcc5c131d52fcc2223bc5c6b8a1488bbf7c0e27f1f0023a79 +pypdf==6.9.1 \ + --hash=sha256:ae052407d33d34de0c86c5c729be6d51010bf36e03035a8f23ab449bca52377d \ + --hash=sha256:f35a6a022348fae47e092a908339a8f3dc993510c026bb39a96718fc7185e89f # via -r src/backend/requirements.in pyphen==0.17.2 \ --hash=sha256:3a07fb017cb2341e1d9ff31b8634efb1ae4dc4b130468c7c39dd3d32e7c3affd \ @@ -1494,13 +1496,13 @@ python-dateutil==2.9.0.post0 \ # botocore # django-recurrence # icalendar -python-dotenv==1.2.1 \ - --hash=sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6 \ - --hash=sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61 +python-dotenv==1.2.2 \ + --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ + --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 # via -r src/backend/requirements.in -python-fsutil==0.15.0 \ - --hash=sha256:8ae31def522916e35caf67723b8526fe6e5fcc1e160ea2dc23c845567708ca6e \ - --hash=sha256:b51d8ab7ee218314480ea251fff7fef513be4fbccfe72a5af4ff2954f8a4a2c4 +python-fsutil==0.16.0 \ + --hash=sha256:a60e16bad77e3f00c3dca95433209c823bc45e0ae4158e52969002f3c7957a18 \ + --hash=sha256:dc957a3541215baa935f66f6f15ceb9a8b7f803919c3d99fa57c818fc545f288 # via django-maintenance-mode python-ipware==3.0.0 \ --hash=sha256:9117b1c4dddcb5d5ca49e6a9617de2fc66aec2ef35394563ac4eecabdf58c062 \ @@ -1684,9 +1686,9 @@ rapidfuzz==3.14.3 \ --hash=sha256:fa7c8f26f009f8c673fbfb443792f0cf8cf50c4e18121ff1e285b5e08a94fbdb \ --hash=sha256:fce3152f94afcfd12f3dd8cf51e48fa606e3cb56719bccebe3b401f43d0714f9 # via -r src/backend/requirements.in -redis==7.0.1 \ - --hash=sha256:4977af3c7d67f8f0eb8b6fec0dafc9605db9343142f634041fb0235f67c0588a \ - --hash=sha256:c949df947dca995dc68fdf5a7863950bf6df24f8d6022394585acc98e81624f1 +redis==7.3.0 \ + --hash=sha256:4d1b768aafcf41b01022410b3cc4f15a07d9b3d6fe0c66fc967da2c88e551034 \ + --hash=sha256:9d4fcb002a12a5e3c3fbe005d59c48a2cc231f87fbb2f6b70c2d89bb64fec364 # via django-redis referencing==0.37.0 \ --hash=sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231 \ @@ -1702,141 +1704,139 @@ requests==2.32.5 \ # django-anymail # django-oauth-toolkit # opentelemetry-exporter-otlp-proto-http -rpds-py==0.28.0 \ - --hash=sha256:03065002fd2e287725d95fbc69688e0c6daf6c6314ba38bdbaa3895418e09296 \ - --hash=sha256:04c1b207ab8b581108801528d59ad80aa83bb170b35b0ddffb29c20e411acdc1 \ - --hash=sha256:05cf1e74900e8da73fa08cc76c74a03345e5a3e37691d07cfe2092d7d8e27b04 \ - --hash=sha256:0a403460c9dd91a7f23fc3188de6d8977f1d9603a351d5db6cf20aaea95b538d \ - --hash=sha256:0cb7203c7bc69d7c1585ebb33a2e6074492d2fc21ad28a7b9d40457ac2a51ab7 \ - --hash=sha256:0d3259ea9ad8743a75a43eb7819324cdab393263c91be86e2d1901ee65c314e0 \ - --hash=sha256:1571ae4292649100d743b26d5f9c63503bb1fedf538a8f29a98dce2d5ba6b4e6 \ - --hash=sha256:1a4c6b05c685c0c03f80dabaeb73e74218c49deea965ca63f76a752807397207 \ - --hash=sha256:1e8ee6413cfc677ce8898d9cde18cc3a60fc2ba756b0dec5b71eb6eb21c49fa1 \ - --hash=sha256:1f0cfd1c69e2d14f8c892b893997fa9a60d890a0c8a603e88dca4955f26d1edd \ - --hash=sha256:23690b5827e643150cf7b49569679ec13fe9a610a15949ed48b85eb7f98f34ec \ - --hash=sha256:2374e16cc9131022e7d9a8f8d65d261d9ba55048c78f3b6e017971a4f5e6353c \ - --hash=sha256:24743a7b372e9a76171f6b69c01aedf927e8ac3e16c474d9fe20d552a8cb45c7 \ - --hash=sha256:25dbade8fbf30bcc551cb352376c0ad64b067e4fc56f90e22ba70c3ce205988c \ - --hash=sha256:28ea02215f262b6d078daec0b45344c89e161eab9526b0d898221d96fdda5f27 \ - --hash=sha256:2e42456917b6687215b3e606ab46aa6bca040c77af7df9a08a6dcfe8a4d10ca5 \ - --hash=sha256:2e8456b6ee5527112ff2354dd9087b030e3429e43a74f480d4a5ca79d269fd85 \ - --hash=sha256:3114f4db69ac5a1f32e7e4d1cbbe7c8f9cf8217f78e6e002cedf2d54c2a548ed \ - --hash=sha256:31eb671150b9c62409a888850aaa8e6533635704fe2b78335f9aaf7ff81eec4d \ - --hash=sha256:389c29045ee8bbb1627ea190b4976a310a295559eaf9f1464a1a6f2bf84dde78 \ - --hash=sha256:3aa4dc0fdab4a7029ac63959a3ccf4ed605fee048ba67ce89ca3168da34a1342 \ - --hash=sha256:3c03002f54cc855860bfdc3442928ffdca9081e73b5b382ed0b9e8efe6e5e205 \ - --hash=sha256:46959ef2e64f9e4a41fc89aa20dbca2b85531f9a72c21099a3360f35d10b0d5a \ - --hash=sha256:48b55c1f64482f7d8bd39942f376bfdf2f6aec637ee8c805b5041e14eeb771db \ - --hash=sha256:4b0cb8a906b1a0196b863d460c0222fb8ad0f34041568da5620f9799b83ccf0b \ - --hash=sha256:4c6c4db5d73d179746951486df97fd25e92396be07fc29ee8ff9a8f5afbdfb27 \ - --hash=sha256:4e27d3a5709cc2b3e013bf93679a849213c79ae0573f9b894b284b55e729e120 \ - --hash=sha256:4fe0438ac4a29a520ea94c8c7f1754cdd8feb1bc490dfda1bfd990072363d527 \ - --hash=sha256:5338742f6ba7a51012ea470bd4dc600a8c713c0c72adaa0977a1b1f4327d6592 \ - --hash=sha256:5a7306c19b19005ad98468fcefeb7100b19c79fc23a5f24a12e06d91181193fa \ - --hash=sha256:5ae8ee156d6b586e4292491e885d41483136ab994e719a13458055bec14cf370 \ - --hash=sha256:5b43c6a3726efd50f18d8120ec0551241c38785b68952d240c45ea553912ac41 \ - --hash=sha256:5cfa9af45e7c1140af7321fa0bef25b386ee9faa8928c80dc3a5360971a29e8c \ - --hash=sha256:5d0145edba8abd3db0ab22b5300c99dc152f5c9021fab861be0f0544dc3cbc5f \ - --hash=sha256:5d3fd16b6dc89c73a4da0b4ac8b12a7ecc75b2864b95c9e5afed8003cb50a728 \ - --hash=sha256:5ee514e0f0523db5d3fb171f397c54875dbbd69760a414dccf9d4d7ad628b5bd \ - --hash=sha256:5f3fa06d27fdcee47f07a39e02862da0100cb4982508f5ead53ec533cd5fe55e \ - --hash=sha256:66e6fa8e075b58946e76a78e69e1a124a21d9a48a5b4766d15ba5b06869d1fa1 \ - --hash=sha256:6796079e5d24fdaba6d49bda28e2c47347e89834678f2bc2c1b4fc1489c0fb01 \ - --hash=sha256:6897bebb118c44b38c9cb62a178e09f1593c949391b9a1a6fe777ccab5934ee7 \ - --hash=sha256:6aa1bfce3f83baf00d9c5fcdbba93a3ab79958b4c7d7d1f55e7fe68c20e63912 \ - --hash=sha256:6b4f28583a4f247ff60cd7bdda83db8c3f5b05a7a82ff20dd4b078571747708f \ - --hash=sha256:6e32dd207e2c4f8475257a3540ab8a93eff997abfa0a3fdb287cae0d6cd874b8 \ - --hash=sha256:6f0c9266c26580e7243ad0d72fc3e01d6b33866cfab5084a6da7576bcf1c4f72 \ - --hash=sha256:735f8495a13159ce6a0d533f01e8674cec0c57038c920495f87dcb20b3ddb48a \ - --hash=sha256:76500820c2af232435cbe215e3324c75b950a027134e044423f59f5b9a1ba515 \ - --hash=sha256:7a4e59c90d9c27c561eb3160323634a9ff50b04e4f7820600a2beb0ac90db578 \ - --hash=sha256:7a52a5169c664dfb495882adc75c304ae1d50df552fbd68e100fdc719dee4ff9 \ - --hash=sha256:7a69df082db13c7070f7b8b1f155fa9e687f1d6aefb7b0e3f7231653b79a067b \ - --hash=sha256:7b0f9dceb221792b3ee6acb5438eb1f02b0cb2c247796a72b016dcc92c6de829 \ - --hash=sha256:7b14b0c680286958817c22d76fcbca4800ddacef6f678f3a7c79a1fe7067fe37 \ - --hash=sha256:7b6013db815417eeb56b2d9d7324e64fcd4fa289caeee6e7a78b2e11fc9b438a \ - --hash=sha256:7b7d9d83c942855e4fdcfa75d4f96f6b9e272d42fffcb72cd4bb2577db2e2907 \ - --hash=sha256:8014045a15b4d2b3476f0a287fcc93d4f823472d7d1308d47884ecac9e612be3 \ - --hash=sha256:8455933b4bcd6e83fde3fefc987a023389c4b13f9a58c8d23e4b3f6d13f78c84 \ - --hash=sha256:85beb8b3f45e4e32f6802fb6cd6b17f615ef6c6a52f265371fb916fae02814aa \ - --hash=sha256:8a358a32dd3ae50e933347889b6af9a1bdf207ba5d1a3f34e1a38cd3540e6733 \ - --hash=sha256:8aa23b6f0fc59b85b4c7d89ba2965af274346f738e8d9fc2455763602e62fd5f \ - --hash=sha256:8d252db6b1a78d0a3928b6190156042d54c93660ce4d98290d7b16b5296fb7cc \ - --hash=sha256:8f60c7ea34e78c199acd0d3cda37a99be2c861dd2b8cf67399784f70c9f8e57d \ - --hash=sha256:961ca621ff10d198bbe6ba4957decca61aa2a0c56695384c1d6b79bf61436df5 \ - --hash=sha256:9a5690671cd672a45aa8616d7374fdf334a1b9c04a0cac3c854b1136e92374fe \ - --hash=sha256:9a7548b345f66f6695943b4ef6afe33ccd3f1b638bd9afd0f730dd255c249c9e \ - --hash=sha256:9f1d92ecea4fa12f978a367c32a5375a1982834649cdb96539dcdc12e609ab1a \ - --hash=sha256:a2036d09b363aa36695d1cc1a97b36865597f4478470b0697b5ee9403f4fe399 \ - --hash=sha256:a3b695a8fa799dd2cfdb4804b37096c5f6dba1ac7f48a7fbf6d0485bcd060316 \ - --hash=sha256:a410542d61fc54710f750d3764380b53bf09e8c4edbf2f9141a82aa774a04f7c \ - --hash=sha256:a6fe887c2c5c59413353b7c0caff25d0e566623501ccfff88957fa438a69377d \ - --hash=sha256:a805e9b3973f7e27f7cab63a6b4f61d90f2e5557cff73b6e97cd5b8540276d3d \ - --hash=sha256:abd4df20485a0983e2ca334a216249b6186d6e3c1627e106651943dbdb791aea \ - --hash=sha256:ac9f83e7b326a3f9ec3ef84cda98fb0a74c7159f33e692032233046e7fd15da2 \ - --hash=sha256:acbe5e8b1026c0c580d0321c8aae4b0a1e1676861d48d6e8c6586625055b606a \ - --hash=sha256:ad50614a02c8c2962feebe6012b52f9802deec4263946cddea37aaf28dd25a66 \ - --hash=sha256:ada7754a10faacd4f26067e62de52d6af93b6d9542f0df73c57b9771eb3ba9c4 \ - --hash=sha256:adc8aa88486857d2b35d75f0640b949759f79dc105f50aa2c27816b2e0dd749f \ - --hash=sha256:b1b553dd06e875249fd43efd727785efb57a53180e0fde321468222eabbeaafa \ - --hash=sha256:b1cde22f2c30ebb049a9e74c5374994157b9b70a16147d332f89c99c5960737a \ - --hash=sha256:b3072b16904d0b5572a15eb9d31c1954e0d3227a585fc1351aa9878729099d6c \ - --hash=sha256:b670c30fd87a6aec281c3c9896d3bae4b205fd75d79d06dc87c2503717e46092 \ - --hash=sha256:b8e1e9be4fa6305a16be628959188e4fd5cd6f1b0e724d63c6d8b2a8adf74ea6 \ - --hash=sha256:b9699fa7990368b22032baf2b2dce1f634388e4ffc03dfefaaac79f4695edc95 \ - --hash=sha256:b9b06fe1a75e05e0713f06ea0c89ecb6452210fd60e2f1b6ddc1067b990e08d9 \ - --hash=sha256:bbdc5640900a7dbf9dd707fe6388972f5bbd883633eb68b76591044cfe346f7e \ - --hash=sha256:bcf1d210dfee61a6c86551d67ee1031899c0fdbae88b2d44a569995d43797712 \ - --hash=sha256:bd3bbba5def70b16cd1c1d7255666aad3b290fbf8d0fe7f9f91abafb73611a91 \ - --hash=sha256:beb880a9ca0a117415f241f66d56025c02037f7c4efc6fe59b5b8454f1eaa50d \ - --hash=sha256:c2a34fd26588949e1e7977cfcbb17a9a42c948c100cab890c6d8d823f0586457 \ - --hash=sha256:c9a40040aa388b037eb39416710fbcce9443498d2eaab0b9b45ae988b53f5c67 \ - --hash=sha256:cf128350d384b777da0e68796afdcebc2e9f63f0e9f242217754e647f6d32491 \ - --hash=sha256:cf681ac76a60b667106141e11a92a3330890257e6f559ca995fbb5265160b56e \ - --hash=sha256:d15431e334fba488b081d47f30f091e5d03c18527c325386091f31718952fe08 \ - --hash=sha256:d2412be8d00a1b895f8ad827cc2116455196e20ed994bb704bf138fe91a42724 \ - --hash=sha256:d61b355c3275acb825f8777d6c4505f42b5007e357af500939d4a35b19177259 \ - --hash=sha256:d678e91b610c29c4b3d52a2c148b641df2b4676ffe47c59f6388d58b99cdc424 \ - --hash=sha256:d7366b6553cdc805abcc512b849a519167db8f5e5c3472010cd1228b224265cb \ - --hash=sha256:dcdcb890b3ada98a03f9f2bb108489cdc7580176cb73b4f2d789e9a1dac1d472 \ - --hash=sha256:dd8d86b5d29d1b74100982424ba53e56033dc47720a6de9ba0259cf81d7cecaa \ - --hash=sha256:e0a0311caedc8069d68fc2bf4c9019b58a2d5ce3cd7cb656c845f1615b577e1e \ - --hash=sha256:e1460ebde1bcf6d496d80b191d854adedcc619f84ff17dc1c6d550f58c9efbba \ - --hash=sha256:e3eb248f2feba84c692579257a043a7699e28a77d86c77b032c1d9fbb3f0219c \ - --hash=sha256:e5bbc701eff140ba0e872691d573b3d5d30059ea26e5785acba9132d10c8c31d \ - --hash=sha256:e5d9b86aa501fed9862a443c5c3116f6ead8bc9296185f369277c42542bd646b \ - --hash=sha256:e5deca01b271492553fdb6c7fd974659dce736a15bae5dad7ab8b93555bceb28 \ - --hash=sha256:e80848a71c78aa328fefaba9c244d588a342c8e03bda518447b624ea64d1ff56 \ - --hash=sha256:e819e0e37a44a78e1383bf1970076e2ccc4dc8c2bbaa2f9bd1dc987e9afff628 \ - --hash=sha256:e9e184408a0297086f880556b6168fa927d677716f83d3472ea333b42171ee3b \ - --hash=sha256:edd267266a9b0448f33dc465a97cfc5d467594b600fe28e7fa2f36450e03053a \ - --hash=sha256:efd489fec7c311dae25e94fe7eeda4b3d06be71c68f2cf2e8ef990ffcd2cd7e8 \ - --hash=sha256:f0b2044fdddeea5b05df832e50d2a06fe61023acb44d76978e1b060206a8a476 \ - --hash=sha256:f274f56a926ba2dc02976ca5b11c32855cbd5925534e57cfe1fda64e04d1add2 \ - --hash=sha256:f296ea3054e11fc58ad42e850e8b75c62d9a93a9f981ad04b2e5ae7d2186ff9c \ - --hash=sha256:f4794c6c3fbe8f9ac87699b131a1f26e7b4abcf6d828da46a3a52648c7930eba \ - --hash=sha256:f586db2e209d54fe177e58e0bc4946bea5fb0102f150b1b2f13de03e1f0976f8 \ - --hash=sha256:f5e7101145427087e493b9c9b959da68d357c28c562792300dd21a095118ed16 \ - --hash=sha256:f9174471d6920cbc5e82a7822de8dfd4dcea86eb828b04fc8c6519a77b0ee51e +rpds-py==0.30.0 \ + --hash=sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f \ + --hash=sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136 \ + --hash=sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3 \ + --hash=sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7 \ + --hash=sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65 \ + --hash=sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4 \ + --hash=sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169 \ + --hash=sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf \ + --hash=sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4 \ + --hash=sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2 \ + --hash=sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c \ + --hash=sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4 \ + --hash=sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3 \ + --hash=sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6 \ + --hash=sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7 \ + --hash=sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89 \ + --hash=sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85 \ + --hash=sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6 \ + --hash=sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa \ + --hash=sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb \ + --hash=sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6 \ + --hash=sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87 \ + --hash=sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856 \ + --hash=sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4 \ + --hash=sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f \ + --hash=sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53 \ + --hash=sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229 \ + --hash=sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad \ + --hash=sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23 \ + --hash=sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db \ + --hash=sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038 \ + --hash=sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27 \ + --hash=sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00 \ + --hash=sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18 \ + --hash=sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083 \ + --hash=sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c \ + --hash=sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738 \ + --hash=sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898 \ + --hash=sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e \ + --hash=sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7 \ + --hash=sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08 \ + --hash=sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6 \ + --hash=sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551 \ + --hash=sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e \ + --hash=sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288 \ + --hash=sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df \ + --hash=sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0 \ + --hash=sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2 \ + --hash=sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05 \ + --hash=sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0 \ + --hash=sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464 \ + --hash=sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5 \ + --hash=sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404 \ + --hash=sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7 \ + --hash=sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139 \ + --hash=sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394 \ + --hash=sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb \ + --hash=sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15 \ + --hash=sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff \ + --hash=sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed \ + --hash=sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6 \ + --hash=sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e \ + --hash=sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95 \ + --hash=sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d \ + --hash=sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950 \ + --hash=sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3 \ + --hash=sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5 \ + --hash=sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97 \ + --hash=sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e \ + --hash=sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e \ + --hash=sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b \ + --hash=sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd \ + --hash=sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad \ + --hash=sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8 \ + --hash=sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425 \ + --hash=sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221 \ + --hash=sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d \ + --hash=sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825 \ + --hash=sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51 \ + --hash=sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e \ + --hash=sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f \ + --hash=sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8 \ + --hash=sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f \ + --hash=sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d \ + --hash=sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07 \ + --hash=sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877 \ + --hash=sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31 \ + --hash=sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58 \ + --hash=sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94 \ + --hash=sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28 \ + --hash=sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000 \ + --hash=sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1 \ + --hash=sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1 \ + --hash=sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7 \ + --hash=sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7 \ + --hash=sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40 \ + --hash=sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d \ + --hash=sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0 \ + --hash=sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84 \ + --hash=sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f \ + --hash=sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a \ + --hash=sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7 \ + --hash=sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419 \ + --hash=sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8 \ + --hash=sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a \ + --hash=sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9 \ + --hash=sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be \ + --hash=sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed \ + --hash=sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a \ + --hash=sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d \ + --hash=sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324 \ + --hash=sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f \ + --hash=sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2 \ + --hash=sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f \ + --hash=sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5 # via # jsonschema # referencing -s3transfer==0.14.0 \ - --hash=sha256:ea3b790c7077558ed1f02a3072fb3cb992bbbd253392f4b6e9e8976941c7d456 \ - --hash=sha256:eff12264e7c8b4985074ccce27a3b38a485bb7f7422cc8046fee9be4983e4125 +s3transfer==0.16.0 \ + --hash=sha256:18e25d66fed509e3868dc1572b3f427ff947dd2c56f844a5bf09481ad3f3b2fe \ + --hash=sha256:8e990f13268025792229cd52fa10cb7163744bf56e719e0b9cb925ab79abf920 # via boto3 -sentry-sdk==2.47.0 \ - --hash=sha256:8218891d5e41b4ea8d61d2aed62ed10c80e39d9f2959d6f939efbf056857e050 \ - --hash=sha256:d72f8c61025b7d1d9e52510d03a6247b280094a327dd900d987717a4fce93412 +sentry-sdk==2.54.0 \ + --hash=sha256:2620c2575128d009b11b20f7feb81e4e4e8ae08ec1d36cbc845705060b45cc1b \ + --hash=sha256:fd74e0e281dcda63afff095d23ebcd6e97006102cdc8e78a29f19ecdf796a0de # via # -r src/backend/requirements.in # django-q-sentry -setuptools==80.9.0 \ - --hash=sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 \ - --hash=sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c - # via - # -r src/backend/requirements.in - # django-money +setuptools==82.0.0 \ + --hash=sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb \ + --hash=sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0 + # via -r src/backend/requirements.in sgmllib3k==1.0.0 \ --hash=sha256:7868fb1c8bfa764c1ac563d3cf369c381d1325d36124933a726f29fcdaa812e9 # via feedparser @@ -1844,9 +1844,9 @@ six==1.17.0 \ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 # via python-dateutil -sqlparse==0.5.3 \ - --hash=sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272 \ - --hash=sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca +sqlparse==0.5.5 \ + --hash=sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba \ + --hash=sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e # via # django # django-sql-utils @@ -1865,9 +1865,9 @@ tinycss2==1.4.0 \ # bleach # cssselect2 # weasyprint -tinyhtml5==2.0.0 \ - --hash=sha256:086f998833da24c300c414d9fe81d9b368fd04cb9d2596a008421cbc705fcfcc \ - --hash=sha256:13683277c5b176d070f82d099d977194b7a1e26815b016114f581a74bbfbf47e +tinyhtml5==2.1.0 \ + --hash=sha256:60a50ec3d938a37e491efa01af895853060943dcebb5627de5b10d188b338a67 \ + --hash=sha256:6e11cfff38515834268daf89d5f85bbde0b6dd02e8d9e212d1385c2289b89f0a # via weasyprint typing-extensions==4.15.0 \ --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ @@ -1877,6 +1877,7 @@ typing-extensions==4.15.0 \ # flexcache # flexparser # grpcio + # icalendar # jwcrypto # opentelemetry-api # opentelemetry-exporter-otlp-proto-grpc @@ -1886,26 +1887,26 @@ typing-extensions==4.15.0 \ # pint # py-moneyed # referencing -tzdata==2025.2 \ - --hash=sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 \ - --hash=sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9 +tzdata==2025.3 \ + --hash=sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1 \ + --hash=sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7 # via icalendar uritemplate==4.2.0 \ --hash=sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e \ --hash=sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 # via drf-spectacular -urllib3==2.6.0 \ - --hash=sha256:c90f7a39f716c572c4e3e58509581ebd83f9b59cced005b7db7ad2d22b0db99f \ - --hash=sha256:cb9bcef5a4b345d5da5d145dc3e30834f58e8018828cbc724d30b4cb7d4d49f1 +urllib3==2.6.3 \ + --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \ + --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 # via # botocore # django-anymail # dulwich # requests # sentry-sdk -wcwidth==0.2.14 \ - --hash=sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605 \ - --hash=sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1 +wcwidth==0.6.0 \ + --hash=sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad \ + --hash=sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159 # via # blessed # prettytable @@ -1921,9 +1922,9 @@ webencodings==0.5.1 \ # cssselect2 # tinycss2 # tinyhtml5 -whitenoise==6.11.0 \ - --hash=sha256:0f5bfce6061ae6611cd9396a8231e088722e4fc67bc13a111be74c738d99375f \ - --hash=sha256:b2aeb45950597236f53b5342b3121c5de69c8da0109362aee506ce88e022d258 +whitenoise==6.12.0 \ + --hash=sha256:f723ebb76a112e98816ff80fcea0a6c9b8ecde835f8ddda25df7a30a3c2db6ad \ + --hash=sha256:fc5e8c572e33ebf24795b47b6a7da8da3c00cff2349f5b04c02f28d0cc5a3cc2 # via -r src/backend/requirements.in wrapt==1.17.3 \ --hash=sha256:02b551d101f31694fc785e58e0720ef7d9a10c4e62c1c9358ce6f63f23e30a56 \ @@ -2021,114 +2022,59 @@ xlwt==1.3.0 \ # via tablib xmlsec==1.3.17 \ --hash=sha256:00d43d4f68ac6b11f6e1e69bcb389495f54da77bf1168b4de08f4a7785e47bbb \ - --hash=sha256:00d43d4f68ac6b11f6e1e69bcb389495f54da77bf1168b4de08f4a7785e47bbb \ - --hash=sha256:040f28a7aacfdb467df46d423e4af05569e9376bc8c7f6416b0761e16a0e3d0b \ --hash=sha256:040f28a7aacfdb467df46d423e4af05569e9376bc8c7f6416b0761e16a0e3d0b \ --hash=sha256:1a0b9a1dcda547e0340eefa6f4a04b87dbd9e40cd514487f347934f94fd559ab \ - --hash=sha256:1a0b9a1dcda547e0340eefa6f4a04b87dbd9e40cd514487f347934f94fd559ab \ - --hash=sha256:26cc3d81437b51839946d2e93d09371dfd73ed2831dc7e37eff0fb52fc33747c \ --hash=sha256:26cc3d81437b51839946d2e93d09371dfd73ed2831dc7e37eff0fb52fc33747c \ --hash=sha256:2aa5081e1e05dcb6029660ddad795c7daebb3c5771001f60850ab24a16a9cf5e \ - --hash=sha256:2aa5081e1e05dcb6029660ddad795c7daebb3c5771001f60850ab24a16a9cf5e \ - --hash=sha256:320bf7162e2c442638233da9826af1476049999da1b474b5fe07c60952610131 \ --hash=sha256:320bf7162e2c442638233da9826af1476049999da1b474b5fe07c60952610131 \ --hash=sha256:393eb5cc6b8d6e67c04fd64979ec30d766b3d226550b208803cd410d4b416d91 \ - --hash=sha256:393eb5cc6b8d6e67c04fd64979ec30d766b3d226550b208803cd410d4b416d91 \ - --hash=sha256:3a53c14d4bc40b0f0fcc6d7908b88f3cbbcf36e25c392f796d88aee7dee5beea \ --hash=sha256:3a53c14d4bc40b0f0fcc6d7908b88f3cbbcf36e25c392f796d88aee7dee5beea \ --hash=sha256:3a6ced8c7744e896cb5a9fd0156d204df3143a62bae11be91cab8e9743d40eec \ - --hash=sha256:3a6ced8c7744e896cb5a9fd0156d204df3143a62bae11be91cab8e9743d40eec \ - --hash=sha256:3d1fc1fbe2e8585a3f468cf4154d0ec36cd95a15e68429ad8cc8ccd7c04e84ae \ --hash=sha256:3d1fc1fbe2e8585a3f468cf4154d0ec36cd95a15e68429ad8cc8ccd7c04e84ae \ --hash=sha256:40fcb197bdb76301c82b10096c67cc44a6e887317b5b914dbbd166339d36fce4 \ - --hash=sha256:40fcb197bdb76301c82b10096c67cc44a6e887317b5b914dbbd166339d36fce4 \ - --hash=sha256:46fc9c80e8898ad212b6ad389469bb82d1ab89b90555db42e3e73235b143739d \ --hash=sha256:46fc9c80e8898ad212b6ad389469bb82d1ab89b90555db42e3e73235b143739d \ --hash=sha256:4f2bf6bbf04f8a912483d268b4c2727d400d1806d054624da13bee4b9f6fa28a \ - --hash=sha256:4f2bf6bbf04f8a912483d268b4c2727d400d1806d054624da13bee4b9f6fa28a \ - --hash=sha256:5319d0bdaf9e597a0ba8dfb3840c4ae57e51f462e7620953f32b07df6267f2ba \ --hash=sha256:5319d0bdaf9e597a0ba8dfb3840c4ae57e51f462e7620953f32b07df6267f2ba \ --hash=sha256:5346616e1fe1015f7800698c15225c7902f45db199e217af2039a21989aff7e9 \ - --hash=sha256:5346616e1fe1015f7800698c15225c7902f45db199e217af2039a21989aff7e9 \ - --hash=sha256:5616ad5016794b0dd41d03eef5b721e31bb306353226b25fc88fedb7d4f7c37e \ --hash=sha256:5616ad5016794b0dd41d03eef5b721e31bb306353226b25fc88fedb7d4f7c37e \ --hash=sha256:593264c192d1836162d75478c8b1cb5874f3b69dcc5bdfac642a0933abefa93a \ - --hash=sha256:593264c192d1836162d75478c8b1cb5874f3b69dcc5bdfac642a0933abefa93a \ - --hash=sha256:5c3008b32a15d24b6c9da39bf6ede8dc3122570a640a73795d763aea55a2193e \ --hash=sha256:5c3008b32a15d24b6c9da39bf6ede8dc3122570a640a73795d763aea55a2193e \ --hash=sha256:5c6d4b2ece9d109591d08128a1656b458e24d9eba6c02c32e93573e14eee2447 \ - --hash=sha256:5c6d4b2ece9d109591d08128a1656b458e24d9eba6c02c32e93573e14eee2447 \ - --hash=sha256:5d0e69291f90b28e9442d8e0e69d3e06cede8a3c44e856413fd284de81ce2888 \ --hash=sha256:5d0e69291f90b28e9442d8e0e69d3e06cede8a3c44e856413fd284de81ce2888 \ --hash=sha256:64c1184d51c8a67e3d1eb3ac477e307a07e2b40fd03cd0c8084b147ea0f342db \ - --hash=sha256:64c1184d51c8a67e3d1eb3ac477e307a07e2b40fd03cd0c8084b147ea0f342db \ - --hash=sha256:66fe5aaccf68fb85fe0b64277e3f594d6b01ddefb98ef1ceb0a666652d6ec580 \ --hash=sha256:66fe5aaccf68fb85fe0b64277e3f594d6b01ddefb98ef1ceb0a666652d6ec580 \ --hash=sha256:672e41dc7962da4ce84b67aa1c3a008338e3b88332f5484b9911b91cee0997ed \ - --hash=sha256:672e41dc7962da4ce84b67aa1c3a008338e3b88332f5484b9911b91cee0997ed \ - --hash=sha256:67717fe5151df68987a1387cba11ba28ce19b3bb9a2d10d650277cd910e510e7 \ --hash=sha256:67717fe5151df68987a1387cba11ba28ce19b3bb9a2d10d650277cd910e510e7 \ --hash=sha256:6cbf8a556c74451a7455d506ce3edc81c7cd0f60895ef7792c77dc97434a8e82 \ - --hash=sha256:6cbf8a556c74451a7455d506ce3edc81c7cd0f60895ef7792c77dc97434a8e82 \ - --hash=sha256:6d1e9ff3398e87e3abb2ab8f1576c0761e5c5c18b086b41f2b39a3eb6b2f7e11 \ --hash=sha256:6d1e9ff3398e87e3abb2ab8f1576c0761e5c5c18b086b41f2b39a3eb6b2f7e11 \ --hash=sha256:728058a1623a620811a3cdf2dd4894b5d9413ede20c8ddddf98fdea5eafe9529 \ - --hash=sha256:728058a1623a620811a3cdf2dd4894b5d9413ede20c8ddddf98fdea5eafe9529 \ - --hash=sha256:72fc6d336dd68d62822c6536ff4b2453fda94ea652eddb4a958ac97b16ac7001 \ --hash=sha256:72fc6d336dd68d62822c6536ff4b2453fda94ea652eddb4a958ac97b16ac7001 \ --hash=sha256:79b471fdd1d3a92b80907828eaa809f6e34023583488b1b8dc3f951529e7a2f8 \ - --hash=sha256:79b471fdd1d3a92b80907828eaa809f6e34023583488b1b8dc3f951529e7a2f8 \ - --hash=sha256:7a9f7f7c9ded817f8476b5d6762a831034a8c54783f6175a928f61d57bec78cb \ --hash=sha256:7a9f7f7c9ded817f8476b5d6762a831034a8c54783f6175a928f61d57bec78cb \ --hash=sha256:80fff2251d0e73714435b5860ce200990dffe85466dd91d08d75c4d64ee9967d \ - --hash=sha256:80fff2251d0e73714435b5860ce200990dffe85466dd91d08d75c4d64ee9967d \ - --hash=sha256:9877303e8c72d7aa2467d1af12e56d67b8fb50d324eda5848e0ec5ee2176aac5 \ --hash=sha256:9877303e8c72d7aa2467d1af12e56d67b8fb50d324eda5848e0ec5ee2176aac5 \ --hash=sha256:99b5b4b6fe232f2234bcec2bdd533b7ab7030b3ce6cfb8bd7153bf02441c8520 \ - --hash=sha256:99b5b4b6fe232f2234bcec2bdd533b7ab7030b3ce6cfb8bd7153bf02441c8520 \ - --hash=sha256:9bb6faa4ae0268204cfa6b0c0de1c9121eb606eea8c66c7d7ce62e89a17f9efa \ --hash=sha256:9bb6faa4ae0268204cfa6b0c0de1c9121eb606eea8c66c7d7ce62e89a17f9efa \ --hash=sha256:a1ef656421d01851618d0fe5518e57469159c14a48e05125f7bd3225631952f9 \ - --hash=sha256:a1ef656421d01851618d0fe5518e57469159c14a48e05125f7bd3225631952f9 \ - --hash=sha256:a3961102a6ba8250670814bd1086139fb918e03bf146ef85dc8b6084a9b027d1 \ --hash=sha256:a3961102a6ba8250670814bd1086139fb918e03bf146ef85dc8b6084a9b027d1 \ --hash=sha256:a603584ceee175036e1bccdbe65d551c0fff67343fd506bfa6cec52bc64d9a75 \ - --hash=sha256:a603584ceee175036e1bccdbe65d551c0fff67343fd506bfa6cec52bc64d9a75 \ - --hash=sha256:abd585642d1fb169dd014e1037dcebe21d12a06e71b6d8f0e37650a81d57d1f1 \ --hash=sha256:abd585642d1fb169dd014e1037dcebe21d12a06e71b6d8f0e37650a81d57d1f1 \ --hash=sha256:ac68a6ac9c0e74f6f3e476f5ac2271b1df7b349a4021b6b2cdfe32cc8fa4beec \ - --hash=sha256:ac68a6ac9c0e74f6f3e476f5ac2271b1df7b349a4021b6b2cdfe32cc8fa4beec \ - --hash=sha256:ac92a5d0104640e0ff6fd9ef82441005e08fef460fccd790240d3e39abd69ad3 \ --hash=sha256:ac92a5d0104640e0ff6fd9ef82441005e08fef460fccd790240d3e39abd69ad3 \ --hash=sha256:ae88c3aaab5704adfdbce913b3a18db1eb96c49c970657cc01c0d1c420ffdec3 \ - --hash=sha256:ae88c3aaab5704adfdbce913b3a18db1eb96c49c970657cc01c0d1c420ffdec3 \ - --hash=sha256:b3f306f5aef47336b8299d8dbee31fa0b2eba4579f9f41396070f7a97d0dcd49 \ --hash=sha256:b3f306f5aef47336b8299d8dbee31fa0b2eba4579f9f41396070f7a97d0dcd49 \ --hash=sha256:b4be73fbde421d6188300e02ad92d2d5435c708a35ede8124ebdf6b00330d7cb \ - --hash=sha256:b4be73fbde421d6188300e02ad92d2d5435c708a35ede8124ebdf6b00330d7cb \ - --hash=sha256:bc8d0a75a43a45349b37186ecce5ae028325ede47cbc217802ff3ef4db3f3cb9 \ --hash=sha256:bc8d0a75a43a45349b37186ecce5ae028325ede47cbc217802ff3ef4db3f3cb9 \ --hash=sha256:c4533780d91f547b841f2522a419da9f2cee2f906dbd4aa58083bc944526a45c \ - --hash=sha256:c4533780d91f547b841f2522a419da9f2cee2f906dbd4aa58083bc944526a45c \ - --hash=sha256:d360d4adfb53d3adeca398c225cb7e2a73a2246414455937082a1fa19bd8572b \ --hash=sha256:d360d4adfb53d3adeca398c225cb7e2a73a2246414455937082a1fa19bd8572b \ --hash=sha256:d4a7ee007c6b55f7621330aee8330ef2dafa4225fce554064571ca826beafe7e \ - --hash=sha256:d4a7ee007c6b55f7621330aee8330ef2dafa4225fce554064571ca826beafe7e \ - --hash=sha256:d586bb09f146235f82de624ff05fbca76f8aadc627eb9a072df1899317a1a9eb \ --hash=sha256:d586bb09f146235f82de624ff05fbca76f8aadc627eb9a072df1899317a1a9eb \ --hash=sha256:d862f023f56a49c06576be41dfaf213c9ac77e7a344e7f204278c365bb36d00e \ - --hash=sha256:d862f023f56a49c06576be41dfaf213c9ac77e7a344e7f204278c365bb36d00e \ - --hash=sha256:df4a8d7fef3ffe90e572400d47392ea480120e339c292f802830ed09d449e622 \ --hash=sha256:df4a8d7fef3ffe90e572400d47392ea480120e339c292f802830ed09d449e622 \ --hash=sha256:e2bf1d07c4f97afeb957f626b8c3ebb8cef300efa0cb95599e936c69a66a1b17 \ - --hash=sha256:e2bf1d07c4f97afeb957f626b8c3ebb8cef300efa0cb95599e936c69a66a1b17 \ - --hash=sha256:ea2d65749c4c6a35a3ba138debda2f910713a9f4f06b4647510c184c284d7c62 \ --hash=sha256:ea2d65749c4c6a35a3ba138debda2f910713a9f4f06b4647510c184c284d7c62 \ --hash=sha256:ed63cbd87dd69ebcf3a9f82d87b67818c9a7d656325dd4fb34d6c4dfbaa84017 \ - --hash=sha256:ed63cbd87dd69ebcf3a9f82d87b67818c9a7d656325dd4fb34d6c4dfbaa84017 \ --hash=sha256:eee89c268a35f8a08a8e9abef6f466b97577e94f5cac8bf32c25e97cd5020097 \ - --hash=sha256:eee89c268a35f8a08a8e9abef6f466b97577e94f5cac8bf32c25e97cd5020097 \ - --hash=sha256:f3fac9ae679f66585925cc00c5f6839ae36c1d03157619571dee18acc05b9c01 \ --hash=sha256:f3fac9ae679f66585925cc00c5f6839ae36c1d03157619571dee18acc05b9c01 # via # -r src/backend/requirements.in @@ -2137,17 +2083,17 @@ zipp==3.23.0 \ --hash=sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e \ --hash=sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166 # via importlib-metadata -zopfli==0.4.0 \ - --hash=sha256:03181d48e719fcb6cf8340189c61e8f9883d8bbbdf76bf5212a74457f7d083c1 \ - --hash=sha256:18b5f1570f64d4988482e4466f10ef5f2a30f687c19ad62a64560f2152dc89eb \ - --hash=sha256:25e4863b8dc30e5d5309f87c106b0b7d3da4ed0e340b8a52b36d4471e797589f \ - --hash=sha256:7d66337be6d5613dec55213e9ac28f378c41e2cc04fbad4a10748e4df774ca85 \ - --hash=sha256:9097e8e1dfdb7f5aea5464e469946857e80502b6d29ba1b232450916bd4a74d1 \ - --hash=sha256:a8ee992b2549e090cd3f0178bf606dd41a29e0613a04cdf5054224662c72dce6 \ - --hash=sha256:b72a010d205d00b2855acc2302772067362f9ab5a012e3550662aec60d28e6b3 \ - --hash=sha256:b8bdb41fbfdc4738b7bdc09ed7c1e951579fae192391a5e694d59bb186cdbec7 \ - --hash=sha256:c3ba02a9a6ca90481d2b2f68bab038b310d63a1e3b5ae305e95a6599787ed941 \ - --hash=sha256:d1b98ad47c434ef213444a03ef2f826eeec100144d64f6a57504b9893d3931ce \ - --hash=sha256:f67d04280065e24cb9a4174cb6b3d1f763687f8cb2963aa135ad8f57c6995f5a \ - --hash=sha256:f94e4dd7d76b4fe9f5d9229372be20d7f786164eea5152d1af1c34298c3d5975 +zopfli==0.4.1 \ + --hash=sha256:02086247dd12fda929f9bfe8b3962b6bcdbfc8c82e99255aebcf367867cf0760 \ + --hash=sha256:07a5cdc5d1aaa6c288c5d9f5a5383042ba743641abf8e2fd898dcad622d8a38e \ + --hash=sha256:27823dc1161a4031d1c25925fd45d9868ec0cbc7692341830a7dcfa25063662c \ + --hash=sha256:2f992ac7d83cbddd889e1813ace576cbc91a05d5d7a0a21b366e2e5f492e7707 \ + --hash=sha256:4238d4d746d1095e29c9125490985e0c12ffd3654f54a24af551e2391e936d54 \ + --hash=sha256:5a4c22b6161f47f5bd34637dbaee6735abd287cd64e0d1ce28ef1871bf625f4b \ + --hash=sha256:84a31ba9edc921b1d3a4449929394a993888f32d70de3a3617800c428a947b9b \ + --hash=sha256:a899eca405662a23ae75054affa3517a060362eae1185d3d791c86a50153c4dd \ + --hash=sha256:a93c2ecafff372de6c0aa2212eff18a75f6c71a100372fee7b4b129cc0b6f9a7 \ + --hash=sha256:cb136a74d14a4ecfae29cb0fdecece58a6c115abc9a74c12bc6ac62e80f229d7 \ + --hash=sha256:d7bcee1b189d64ec33d1e05cfa1b6a1268c29329c382f6ca1bd6245b04925c57 \ + --hash=sha256:fdfb7ce9f5de37a5b2f75dd2642fd7717956ef2a72e0387302a36d382440db07 # via fonttools diff --git a/src/frontend/CHANGELOG.md b/src/frontend/CHANGELOG.md index deec3c3251..c3c4341132 100644 --- a/src/frontend/CHANGELOG.md +++ b/src/frontend/CHANGELOG.md @@ -2,6 +2,20 @@ This file contains historical changelog information for the InvenTree UI components library. +### 0.9.0 - March 2026 + +Exposes the `useMonitorBackgroundTask` hook, which allows plugins to monitor the status of a background task and display notifications when the task is complete. This is useful for plugins that offload long-running tasks to the background and want to provide feedback to the user when the task is complete. + +Renames the `monitorDataOutput` hook to `useMonitorDataOutput` to better reflect the fact that this is a React hook, and to provide a more consistent naming convention for hooks in the library. + +### 0.8.2 - March 2026 + +Bug fixes for the `monitorDataOutput` hook - https://github.com/inventree/InvenTree/pull/11458 + +### 0.8.0 - March 2026 + +Exposes the `monitorDataOutput` hook, which allows plugins to monitor the output of a long-running task and display notifications when the task is complete. This is useful for plugins that need to perform long-running tasks and want to provide feedback to the user when the task is complete. + ### 0.7.0 - October 2025 Exposes stock adjustment forms to plugins, allowing plugins to adjust stock adjustments using the common InvenTree UI form components. diff --git a/src/frontend/lib/enums/ApiEndpoints.tsx b/src/frontend/lib/enums/ApiEndpoints.tsx index c46d50af71..e7adf3f0b8 100644 --- a/src/frontend/lib/enums/ApiEndpoints.tsx +++ b/src/frontend/lib/enums/ApiEndpoints.tsx @@ -20,6 +20,7 @@ export enum ApiEndpoints { user_simple_login = 'email/generate/', // User auth endpoints + auth_base = '/auth/', user_reset = 'auth/v1/auth/password/request', user_reset_set = 'auth/v1/auth/password/reset', auth_pwd_change = 'auth/v1/account/password/change', @@ -119,6 +120,7 @@ export enum ApiEndpoints { part_pricing_internal = 'part/internal-price/', part_pricing_sale = 'part/sale-price/', part_stocktake_list = 'part/stocktake/', + part_stocktake_generate = 'part/stocktake/generate/', category_list = 'part/category/', category_tree = 'part/category/tree/', category_parameter_list = 'part/category/parameters/', @@ -242,5 +244,8 @@ export enum ApiEndpoints { email_test = 'admin/email/test/', config_list = 'admin/config/', parameter_list = 'parameter/', - parameter_template_list = 'parameter/template/' + parameter_template_list = 'parameter/template/', + + // Internal system things + system_internal_trace_end = 'system-internal/observability/end' } diff --git a/src/frontend/lib/functions/Conversion.tsx b/src/frontend/lib/functions/Conversion.tsx index dcc6409104..915f9b153b 100644 --- a/src/frontend/lib/functions/Conversion.tsx +++ b/src/frontend/lib/functions/Conversion.tsx @@ -29,6 +29,11 @@ export function isTrue(value: any): boolean { * Allows for retrieval of nested items in an object. */ export function resolveItem(obj: any, path: string): any { + // Return the top-level object if no path is provided + if (path == null || path === '') { + return obj; + } + const properties = path.split('.'); return properties.reduce((prev, curr) => prev?.[curr], obj); } diff --git a/src/frontend/lib/hooks/MonitorBackgroundTask.tsx b/src/frontend/lib/hooks/MonitorBackgroundTask.tsx new file mode 100644 index 0000000000..db130b6be4 --- /dev/null +++ b/src/frontend/lib/hooks/MonitorBackgroundTask.tsx @@ -0,0 +1,118 @@ +import { useDocumentVisibility } from '@mantine/hooks'; +import { notifications, showNotification } from '@mantine/notifications'; +import { + IconCircleCheck, + IconCircleX, + IconExclamationCircle +} from '@tabler/icons-react'; +import { type QueryClient, useQuery } from '@tanstack/react-query'; +import type { AxiosInstance } from 'axios'; +import { useEffect, useState } from 'react'; +import { ApiEndpoints } from '../enums/ApiEndpoints'; +import { apiUrl } from '../functions/Api'; + +export type MonitorBackgroundTaskProps = { + api: AxiosInstance; + queryClient?: QueryClient; + title?: string; + message: string; + errorMessage?: string; + successMessage?: string; + failureMessage?: string; + taskId?: string; + onSuccess?: () => void; + onFailure?: () => void; + onComplete?: () => void; + onError?: (error: Error) => void; +}; + +/** + * Hook for monitoring a background task running on the server + */ +export default function useMonitorBackgroundTask( + props: MonitorBackgroundTaskProps +) { + const visibility = useDocumentVisibility(); + + const [tracking, setTracking] = useState(false); + + useEffect(() => { + if (!!props.taskId) { + setTracking(true); + showNotification({ + id: `background-task-${props.taskId}`, + title: props.title, + message: props.message, + loading: true, + autoClose: false, + withCloseButton: false + }); + } else { + setTracking(false); + } + }, [props.taskId]); + + useQuery( + { + enabled: !!props.taskId && tracking && visibility === 'visible', + refetchInterval: 500, + queryKey: ['background-task', props.taskId], + queryFn: () => + props.api + .get(apiUrl(ApiEndpoints.task_overview, props.taskId)) + .then((response) => { + const data = response?.data ?? {}; + + if (data.complete) { + setTracking(false); + props.onComplete?.(); + + notifications.update({ + id: `background-task-${props.taskId}`, + title: props.title, + loading: false, + color: data.success ? 'green' : 'red', + message: response.data?.success + ? (props.successMessage ?? props.message) + : (props.failureMessage ?? props.message), + icon: response.data?.success ? ( + + ) : ( + + ), + autoClose: 1000, + withCloseButton: true + }); + + if (data.success) { + props.onSuccess?.(); + } else { + props.onFailure?.(); + } + } + + return response; + }) + .catch((error) => { + console.error( + `Error fetching background task status for task ${props.taskId}:`, + error + ); + setTracking(false); + props.onError?.(error); + + notifications.update({ + id: `background-task-${props.taskId}`, + title: props.title, + loading: false, + color: 'red', + message: props.errorMessage ?? props.message, + icon: , + autoClose: 5000, + withCloseButton: true + }); + }) + }, + props.queryClient + ); +} diff --git a/src/frontend/lib/hooks/MonitorDataOutput.tsx b/src/frontend/lib/hooks/MonitorDataOutput.tsx new file mode 100644 index 0000000000..dd66758416 --- /dev/null +++ b/src/frontend/lib/hooks/MonitorDataOutput.tsx @@ -0,0 +1,124 @@ +import { t } from '@lingui/core/macro'; +import { useDocumentVisibility } from '@mantine/hooks'; +import { notifications, showNotification } from '@mantine/notifications'; +import { IconCircleCheck, IconExclamationCircle } from '@tabler/icons-react'; +import { type QueryClient, useQuery } from '@tanstack/react-query'; +import type { AxiosInstance } from 'axios'; +import { useEffect, useState } from 'react'; +import { ProgressBar } from '../components/ProgressBar'; +import { ApiEndpoints } from '../enums/ApiEndpoints'; +import { apiUrl } from '../functions/Api'; + +export type MonitorDataOutputProps = { + api: AxiosInstance; + queryClient?: QueryClient; + title: string; + hostname?: string; + id?: number; +}; + +/** + * Hook for monitoring a data output process running on the server + */ +export default function useMonitorDataOutput(props: MonitorDataOutputProps) { + const visibility = useDocumentVisibility(); + + const [loading, setLoading] = useState(false); + + useEffect(() => { + if (!!props.id) { + setLoading(true); + showNotification({ + id: `data-output-${props.id}`, + title: props.title, + loading: true, + autoClose: false, + withCloseButton: false, + message: + }); + } else setLoading(false); + }, [props.id, props.title]); + + useQuery( + { + enabled: !!props.id && loading && visibility === 'visible', + refetchInterval: 500, + queryKey: ['data-output', props.id, props.title], + queryFn: () => + props.api + .get(apiUrl(ApiEndpoints.data_output, props.id)) + .then((response) => { + const data = response?.data ?? {}; + + if (!!data.errors || !!data.error) { + setLoading(false); + + const error: string = + data?.error ?? data?.errors?.error ?? t`Process failed`; + + notifications.update({ + id: `data-output-${props.id}`, + loading: false, + icon: , + autoClose: 2500, + title: props.title, + message: error, + color: 'red' + }); + } else if (data.complete) { + setLoading(false); + notifications.update({ + id: `data-output-${props.id}`, + loading: false, + autoClose: 2500, + title: props.title, + message: t`Process completed successfully`, + color: 'green', + icon: + }); + + if (data.output) { + const url = data.output; + const base = props.hostname ?? window.location.origin; + + const downloadUrl = new URL(url, base); + + window.open(downloadUrl.toString(), '_blank'); + } + } else { + notifications.update({ + id: `data-output-${props.id}`, + loading: true, + autoClose: false, + withCloseButton: false, + message: ( + 0} + animated + /> + ) + }); + } + + return data; + }) + .catch((error: Error) => { + console.error('Error in useMonitorDataOutput:', error); + setLoading(false); + notifications.update({ + id: `data-output-${props.id}`, + loading: false, + autoClose: 2500, + title: props.title, + message: error.message || t`Process failed`, + color: 'red' + }); + return {}; + }) + }, + props.queryClient + ); +} diff --git a/src/frontend/lib/index.ts b/src/frontend/lib/index.ts index 17e7e20f36..f9812e6df7 100644 --- a/src/frontend/lib/index.ts +++ b/src/frontend/lib/index.ts @@ -71,3 +71,13 @@ export { RowCancelAction, RowActions } from './components/RowActions'; + +// Shared hooks +export { + default as useMonitorDataOutput, + type MonitorDataOutputProps +} from './hooks/MonitorDataOutput'; +export { + default as useMonitorBackgroundTask, + type MonitorBackgroundTaskProps +} from './hooks/MonitorBackgroundTask'; diff --git a/src/frontend/lib/types/Auth.tsx b/src/frontend/lib/types/Auth.tsx index 959b64e5fe..50990f7ddc 100644 --- a/src/frontend/lib/types/Auth.tsx +++ b/src/frontend/lib/types/Auth.tsx @@ -25,7 +25,8 @@ export enum FlowEnum { MfaAuthenticate = 'mfa_authenticate', Reauthenticate = 'reauthenticate', MfaReauthenticate = 'mfa_reauthenticate', - MfaTrust = 'mfa_trust' + MfaTrust = 'mfa_trust', + MfaRegister = 'mfa_register' } export interface Flow { diff --git a/src/frontend/lib/types/Filters.tsx b/src/frontend/lib/types/Filters.tsx index 1ef44a3a84..53d5a563ca 100644 --- a/src/frontend/lib/types/Filters.tsx +++ b/src/frontend/lib/types/Filters.tsx @@ -39,7 +39,7 @@ export type TableFilterType = 'boolean' | 'choice' | 'date' | 'text' | 'api'; */ export type TableFilter = { name: string; - label: string; + label?: string; description?: string; type?: TableFilterType; choices?: TableFilterChoice[]; diff --git a/src/frontend/lib/types/Forms.tsx b/src/frontend/lib/types/Forms.tsx index f37a291921..1bc3dc62f3 100644 --- a/src/frontend/lib/types/Forms.tsx +++ b/src/frontend/lib/types/Forms.tsx @@ -111,6 +111,8 @@ export type ApiFormFieldType = { read_only?: boolean; placeholder?: string; placeholderAutofill?: boolean; + placeholderWarningCompare?: string | number; + placeholderWarning?: string; description?: string; preFieldContent?: JSX.Element; postFieldContent?: JSX.Element; diff --git a/src/frontend/lib/types/Icons.tsx b/src/frontend/lib/types/Icons.tsx index c06cb197c5..ea03bfba0c 100644 --- a/src/frontend/lib/types/Icons.tsx +++ b/src/frontend/lib/types/Icons.tsx @@ -1,8 +1,6 @@ -import type { Icon, IconProps } from '@tabler/icons-react'; +import type { IconCircle } from '@tabler/icons-react'; -export type TablerIconType = React.ForwardRefExoticComponent< - Omit & React.RefAttributes ->; +export type TablerIconType = typeof IconCircle; export type InvenTreeIconType = { [key: string]: TablerIconType; diff --git a/src/frontend/lib/types/Settings.tsx b/src/frontend/lib/types/Settings.tsx index 08b89a9f5f..46e1b10abe 100644 --- a/src/frontend/lib/types/Settings.tsx +++ b/src/frontend/lib/types/Settings.tsx @@ -34,6 +34,8 @@ export interface Setting { method?: string; required?: boolean; read_only?: boolean; + confirm?: boolean; + confirm_text?: string; } export interface SettingChoice { diff --git a/src/frontend/lib/types/Tables.tsx b/src/frontend/lib/types/Tables.tsx index ba0675e285..99f02ce06d 100644 --- a/src/frontend/lib/types/Tables.tsx +++ b/src/frontend/lib/types/Tables.tsx @@ -99,6 +99,8 @@ export type TableState = { * @param cellsStyle - The style of the cells in the column * @param extra - Extra data to pass to the render function * @param noContext - Disable context menu for this column + * @param copyable - Enable copy button on hover (uses accessor to get value, or custom function) + * @param copyAccessor - Custom accessor path for copy value (defaults to column accessor) */ export type TableColumnProps = { accessor?: string; @@ -123,6 +125,8 @@ export type TableColumnProps = { extra?: any; noContext?: boolean; style?: MantineStyleProp; + copyable?: boolean | ((record: T) => string); + copyAccessor?: string; }; /** diff --git a/src/frontend/package.json b/src/frontend/package.json index 1e6d57d0b3..229a2d350c 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -1,7 +1,7 @@ { "name": "@inventreedb/ui", "description": "UI components for the InvenTree project", - "version": "0.7.0", + "version": "0.9.0", "private": false, "type": "module", "license": "MIT", @@ -40,14 +40,15 @@ "compile": "lingui compile --typescript" }, "dependencies": { - "@codemirror/autocomplete": "6.18.7", - "@codemirror/lang-liquid": "6.3.0", - "@codemirror/language": "6.11.3", - "@codemirror/lint": "6.8.5", - "@codemirror/search": "6.5.11", - "@codemirror/state": "6.5.2", - "@codemirror/theme-one-dark": "6.1.3", - "@codemirror/view": "6.38.2", + "@codecov/vite-plugin": "^1.9.1", + "@codemirror/autocomplete": "^6.20.1", + "@codemirror/lang-liquid": "^6.3.2", + "@codemirror/language": "^6.12.2", + "@codemirror/lint": "^6.9.5", + "@codemirror/search": "^6.6.0", + "@codemirror/state": "^6.5.4", + "@codemirror/theme-one-dark": "^6.1.3", + "@codemirror/view": "6.39.16", "@emotion/react": "^11.13.3", "@fortawesome/fontawesome-svg-core": "^7.0.0", "@fortawesome/free-regular-svg-icons": "^7.0.0", @@ -58,8 +59,8 @@ "@fullcalendar/interaction": "^6.1.15", "@fullcalendar/react": "^6.1.15", "@github/webauthn-json": "^2.1.1", - "@lingui/core": "^5.3.1", - "@lingui/react": "^5.3.1", + "@lingui/core": "^5.9.2", + "@lingui/react": "^5.9.2", "@mantine/carousel": "^8.2.7", "@mantine/charts": "^8.2.7", "@mantine/core": "^8.2.7", @@ -72,14 +73,14 @@ "@mantine/spotlight": "^8.2.7", "@mantine/vanilla-extract": "^8.2.7", "@messageformat/date-skeleton": "^1.1.0", - "@sentry/react": "^10.7.0", + "@sentry/react": "^10.43.0", "@tabler/icons-react": "^3.17.0", "@tanstack/react-query": "^5.56.2", - "@uiw/codemirror-theme-vscode": "4.25.1", - "@uiw/react-codemirror": "4.25.1", + "@uiw/codemirror-theme-vscode": "4.25.7", + "@uiw/react-codemirror": "^4.25.7", "@uiw/react-split": "^5.9.3", - "@vanilla-extract/css": "^1.17.1", - "axios": "^1.8.4", + "@vanilla-extract/css": "^1.18.0", + "axios": "^1.13.6", "clsx": "^2.1.1", "codemirror": "6.0.2", "dayjs": "^1.11.13", @@ -91,11 +92,11 @@ "mantine-contextmenu": "^8.2.0", "mantine-datatable": "^8.2.0", "qrcode": "^1.5.4", - "react": "^19.1.2", - "react-dom": "^19.1.2", + "react": "^19.2.4", + "react-dom": "^19.2.4", "react-grid-layout": "1.4.4", "react-hook-form": "^7.62.0", - "react-is": "^19.1.2", + "react-is": "^19.2.4", "react-router-dom": "^6.26.2", "react-select": "^5.9.0", "react-simplemde-editor": "^5.2.0", @@ -105,35 +106,37 @@ "zustand": "^5.0.8" }, "devDependencies": { - "@babel/core": "^7.26.10", - "@babel/preset-react": "^7.26.3", - "@babel/preset-typescript": "^7.27.0", - "@babel/runtime": "^7.27.0", - "@codecov/vite-plugin": "^1.9.0", - "@lingui/babel-plugin-lingui-macro": "^5.3.1", - "@lingui/cli": "^5.3.1", - "@lingui/macro": "^5.3.1", - "@playwright/test": "1.56.0", - "@types/node": "^24.3.0", + "@babel/core": "^7.29.0", + "@babel/preset-react": "^7.28.5", + "@babel/preset-typescript": "^7.28.5", + "@babel/runtime": "^7.28.6", + "@lingui/babel-plugin-lingui-macro": "^5.9.2", + "@lingui/cli": "^5.9.2", + "@lingui/macro": "^5.9.2", + "@playwright/test": "^1.58.2", + "@types/node": "^25.5.0", "@types/qrcode": "^1.5.5", - "@types/react": "^19.1.10", - "@types/react-dom": "^19.1.7", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", "@types/react-grid-layout": "^1.3.5", "@types/react-router-dom": "^5.3.3", "@types/react-window": "^1.8.8", - "@vanilla-extract/vite-plugin": "^5.1.1", - "@vitejs/plugin-react": "^5.0.2", + "@vanilla-extract/vite-plugin": "^5.1.4", + "@vitejs/plugin-react": "^5.2.0", "babel-plugin-macros": "^3.1.0", - "nyc": "^17.1.0", + "nyc": "^18.0.0", "otpauth": "^9.4.1", "path": "^0.12.7", - "rollup": "^4.0.0", - "rollup-plugin-license": "^3.5.3", - "typescript": "^5.8.2", + "rollup": "^4.59.0", + "rollup-plugin-license": "^3.7.0", + "typescript": "^5.9.3", "vite": "7.1.11", "vite-plugin-babel-macros": "^1.0.6", - "vite-plugin-dts": "^4.5.3", + "vite-plugin-dts": "^4.5.4", "vite-plugin-externals": "^0.6.2", - "vite-plugin-istanbul": "^6.0.2" + "vite-plugin-istanbul": "^8.0.0" + }, + "resolutions": { + "undici": "^6.24.0" } } diff --git a/src/frontend/playwright.config.ts b/src/frontend/playwright.config.ts index 182c669ba4..6cc8bf43f4 100644 --- a/src/frontend/playwright.config.ts +++ b/src/frontend/playwright.config.ts @@ -48,13 +48,22 @@ export default defineConfig({ name: 'chromium', use: { ...devices['Desktop Chrome'] - } + }, + testIgnore: /customization/ // Ignore all tests in the "customization" folder for this project }, { name: 'firefox', use: { ...devices['Desktop Firefox'] - } + }, + testIgnore: /customization/ // Ignore all tests in the "customization" folder for this project + }, + { + name: 'customization', + use: { + ...devices['Desktop Firefox'] + }, + testIgnore: /pui_.*\.spec\.ts/ // Ignore all "pui_*.spec.ts" tests for this project } ], @@ -87,6 +96,15 @@ export default defineConfig({ stdout: 'pipe', stderr: 'pipe', timeout: 120 * 1000 + }, + { + command: 'invoke worker', + env: { + INVENTREE_DEBUG: 'True', + INVENTREE_LOG_LEVEL: 'INFO', + INVENTREE_PLUGINS_ENABLED: 'True', + INVENTREE_PLUGINS_MANDATORY: 'samplelocate' + } } ], globalSetup: './playwright/global-setup.ts', diff --git a/src/frontend/playwright/global-setup.ts b/src/frontend/playwright/global-setup.ts index 6386959cbf..4930c98b23 100644 --- a/src/frontend/playwright/global-setup.ts +++ b/src/frontend/playwright/global-setup.ts @@ -2,7 +2,13 @@ import { type FullConfig, chromium, request } from '@playwright/test'; import fs from 'node:fs'; import path from 'node:path'; -import { apiUrl } from '../tests/defaults'; +import { + adminuser, + allaccessuser, + apiUrl, + readeruser, + stevenuser +} from '../tests/defaults'; import { doCachedLogin } from '../tests/login'; async function globalSetup(config: FullConfig) { @@ -45,26 +51,22 @@ async function globalSetup(config: FullConfig) { // Perform login for each user (each in a separate browser instance) await doCachedLogin(await chromium.launch(), { - username: 'admin', - password: 'inventree', + user: adminuser, baseUrl: baseUrl }); await doCachedLogin(await chromium.launch(), { - username: 'allaccess', - password: 'nolimits', + user: allaccessuser, baseUrl: baseUrl }); await doCachedLogin(await chromium.launch(), { - username: 'reader', - password: 'readonly', + user: readeruser, baseUrl: baseUrl }); await doCachedLogin(await chromium.launch(), { - username: 'steven', - password: 'wizardstaff', + user: stevenuser, baseUrl: baseUrl }); } diff --git a/src/frontend/src/App.tsx b/src/frontend/src/App.tsx index cbaae4965a..e0d205ca08 100644 --- a/src/frontend/src/App.tsx +++ b/src/frontend/src/App.tsx @@ -1,6 +1,8 @@ import { QueryClient } from '@tanstack/react-query'; import axios from 'axios'; +import { ApiEndpoints, apiUrl } from '@lib/index'; +import { frontendID, serviceName } from './defaults/defaults'; import { useLocalState } from './states/LocalState'; // Global API instance @@ -33,3 +35,27 @@ export const queryClient = new QueryClient({ } } }); +export function setTraceId() { + // check if we are in a secure context (https) - if not use of crypto is not allowed + if (!window.isSecureContext) { + return ''; + } + + const runID = crypto.randomUUID().replace(/-/g, ''); + const traceid = `00-${runID}-${frontendID}-01`; + api.defaults.headers['traceparent'] = traceid; + + return runID; +} +export function removeTraceId(traceid: string) { + delete api.defaults.headers['traceparent']; + + api + .post(apiUrl(ApiEndpoints.system_internal_trace_end), { + traceid: traceid, + service: serviceName + }) + .catch((error) => { + console.error('Error removing trace ID:', error); + }); +} diff --git a/src/frontend/src/components/Boundary.tsx b/src/frontend/src/components/Boundary.tsx index 119b8fc9eb..b96ec01108 100644 --- a/src/frontend/src/components/Boundary.tsx +++ b/src/frontend/src/components/Boundary.tsx @@ -4,7 +4,9 @@ import { ErrorBoundary, type FallbackRender } from '@sentry/react'; import { IconExclamationCircle } from '@tabler/icons-react'; import { type ReactNode, useCallback } from 'react'; -function DefaultFallback({ title }: Readonly<{ title: string }>): ReactNode { +export function DefaultFallback({ + title +}: Readonly<{ title: string }>): ReactNode { return ( { console.error(`ERR: Error rendering component: ${label}`); + console.error(error); }, [] ); diff --git a/src/frontend/src/components/buttons/CopyButton.tsx b/src/frontend/src/components/buttons/CopyButton.tsx index b9e283daa9..a43b4b3099 100644 --- a/src/frontend/src/components/buttons/CopyButton.tsx +++ b/src/frontend/src/components/buttons/CopyButton.tsx @@ -1,6 +1,7 @@ import { t } from '@lingui/core/macro'; import { ActionIcon, + type ActionIconVariant, Button, type DefaultMantineColor, type FloatingPosition, @@ -22,7 +23,8 @@ export function CopyButton({ tooltipPosition, content, size, - color = 'gray' + color = 'gray', + variant = 'transparent' }: Readonly<{ value: any; label?: string; @@ -32,9 +34,15 @@ export function CopyButton({ content?: JSX.Element; size?: MantineSize; color?: DefaultMantineColor; + variant?: ActionIconVariant; }>) { const ButtonComponent = label ? Button : ActionIcon; + // Disable the copy button if we are not in a secure context, as the Clipboard API is not available + if (!window.isSecureContext) { + return null; + } + return ( {({ copied, copy }) => ( @@ -46,8 +54,12 @@ export function CopyButton({ { + e.stopPropagation(); + e.preventDefault(); + copy(); + }} + variant={copied ? 'transparent' : (variant ?? 'transparent')} size={size ?? 'sm'} > {copied ? ( diff --git a/src/frontend/src/components/calendar/Calendar.tsx b/src/frontend/src/components/calendar/Calendar.tsx index 6fb789a6ae..50f416a175 100644 --- a/src/frontend/src/components/calendar/Calendar.tsx +++ b/src/frontend/src/components/calendar/Calendar.tsx @@ -29,6 +29,10 @@ import { } from '@tabler/icons-react'; import { useCallback, useEffect, useMemo, useState } from 'react'; import { useShallow } from 'zustand/react/shallow'; +import { + defaultLocale, + getPriorityLocale +} from '../../contexts/LanguageContext'; import type { CalendarState } from '../../hooks/UseCalendar'; import { useLocalState } from '../../states/LocalState'; import { FilterSelectDrawer } from '../../tables/FilterSelectDrawer'; @@ -60,7 +64,19 @@ export default function Calendar({ const [locale] = useLocalState(useShallow((s) => [s.language])); // Ensure underscore is replaced with dash - const calendarLocale = useMemo(() => locale.replace('_', '-'), [locale]); + const calendarLocale = useMemo(() => { + let _locale: string | null = locale; + + if (!_locale) { + _locale = getPriorityLocale(); + } + + _locale = _locale || defaultLocale; + + _locale = _locale.replace('_', '-'); + + return _locale; + }, [locale]); const selectMonth = useCallback( (date: DateValue) => { @@ -175,7 +191,7 @@ export default function Calendar({ variant='transparent' aria-label='calendar-export-data' > - + diff --git a/src/frontend/src/components/dashboard/DashboardWidgetLibrary.tsx b/src/frontend/src/components/dashboard/DashboardWidgetLibrary.tsx index 7c5268faac..7b2352a18f 100644 --- a/src/frontend/src/components/dashboard/DashboardWidgetLibrary.tsx +++ b/src/frontend/src/components/dashboard/DashboardWidgetLibrary.tsx @@ -9,12 +9,13 @@ import GetStartedWidget from './widgets/GetStartedWidget'; import LanguageSelectDashboardWidget from './widgets/LanguageSelectWidget'; import NewsWidget from './widgets/NewsWidget'; import QueryCountDashboardWidget from './widgets/QueryCountDashboardWidget'; +import StocktakeDashboardWidget from './widgets/StocktakeDashboardWidget'; /** * * @returns A list of built-in dashboard widgets which display the number of results for a particular query */ -export function BuiltinQueryCountWidgets(): DashboardWidgetProps[] { +function BuiltinQueryCountWidgets(): DashboardWidgetProps[] { const user = useUserState.getState(); const globalSettings = useGlobalSettingsState.getState(); @@ -186,7 +187,7 @@ export function BuiltinQueryCountWidgets(): DashboardWidgetProps[] { }); } -export function BuiltinGettingStartedWidgets(): DashboardWidgetProps[] { +function BuiltinGettingStartedWidgets(): DashboardWidgetProps[] { return [ { label: 'gstart', @@ -207,10 +208,14 @@ export function BuiltinGettingStartedWidgets(): DashboardWidgetProps[] { ]; } -export function BuiltinSettingsWidgets(): DashboardWidgetProps[] { +function BuiltinSettingsWidgets(): DashboardWidgetProps[] { return [ColorToggleDashboardWidget(), LanguageSelectDashboardWidget()]; } +function BuiltinActionWidgets(): DashboardWidgetProps[] { + return [StocktakeDashboardWidget()]; +} + /** * * @returns A list of built-in dashboard widgets @@ -219,6 +224,7 @@ export default function DashboardWidgetLibrary(): DashboardWidgetProps[] { return [ ...BuiltinQueryCountWidgets(), ...BuiltinGettingStartedWidgets(), - ...BuiltinSettingsWidgets() + ...BuiltinSettingsWidgets(), + ...BuiltinActionWidgets() ]; } diff --git a/src/frontend/src/components/dashboard/widgets/StocktakeDashboardWidget.tsx b/src/frontend/src/components/dashboard/widgets/StocktakeDashboardWidget.tsx new file mode 100644 index 0000000000..03e94af071 --- /dev/null +++ b/src/frontend/src/components/dashboard/widgets/StocktakeDashboardWidget.tsx @@ -0,0 +1,71 @@ +import { ApiEndpoints, UserRoles, apiUrl } from '@lib/index'; +import { t } from '@lingui/core/macro'; +import { Button, Stack } from '@mantine/core'; +import { IconClipboardList } from '@tabler/icons-react'; +import { useState } from 'react'; +import useDataOutput from '../../../hooks/UseDataOutput'; +import { useCreateApiFormModal } from '../../../hooks/UseForm'; +import { useUserState } from '../../../states/UserState'; +import type { DashboardWidgetProps } from '../DashboardWidget'; + +function StocktakeWidget() { + const [outputId, setOutputId] = useState(undefined); + + useDataOutput({ + title: t`Generating Stocktake Report`, + id: outputId + }); + + const stocktakeForm = useCreateApiFormModal({ + title: t`Generate Stocktake Report`, + url: apiUrl(ApiEndpoints.part_stocktake_generate), + fields: { + part: { + filters: { + active: true + } + }, + category: {}, + location: {}, + generate_entry: { + value: false + }, + generate_report: { + value: true + } + }, + submitText: t`Generate`, + successMessage: null, + onFormSuccess: (response) => { + if (response.output?.pk) { + setOutputId(response.output.pk); + } + } + }); + + return ( + <> + {stocktakeForm.modal} + + } + onClick={() => stocktakeForm.open()} + >{t`Generate Stocktake Report`} + + + ); +} + +export default function StocktakeDashboardWidget(): DashboardWidgetProps { + const user = useUserState(); + + return { + label: 'stk', + title: t`Stocktake`, + description: t`Generate a new stocktake report`, + minHeight: 1, + minWidth: 2, + render: () => , + enabled: user.hasAddRole(UserRoles.part) + }; +} diff --git a/src/frontend/src/components/details/Details.tsx b/src/frontend/src/components/details/Details.tsx index b04ce1d492..2e61e7377a 100644 --- a/src/frontend/src/components/details/Details.tsx +++ b/src/frontend/src/components/details/Details.tsx @@ -54,10 +54,16 @@ export type DetailsField = { type BadgeType = 'owner' | 'user' | 'group'; type ValueFormatterReturn = string | number | null | React.ReactNode; -type StringDetailField = { - type: 'string' | 'text' | 'date'; - unit?: boolean; -}; +type StringDetailField = + | { + type: 'string' | 'text'; + unit?: boolean; + } + | { + type: 'date'; + unit?: boolean; + showTime?: boolean; + }; type NumberDetailField = { type: 'number'; @@ -109,7 +115,7 @@ function HoverNameBadge(data: any, type: BadgeType) { return [ `${data.label}: ${data.name}`, data.name, - getDetailUrl(data.owner_model, data.pk, true), + getDetailUrl(data.owner_model, data.owner_id, true), undefined, undefined ]; @@ -260,7 +266,13 @@ function NameBadge({ } function DateValue(props: Readonly) { - return {formatDate(props.field_value?.toString())}; + return ( + + {formatDate(props.field_value?.toString(), { + showTime: props.field_data?.showTime + })} + + ); } // Return a formatted "number" value, with optional unit diff --git a/src/frontend/src/components/details/DetailsImage.tsx b/src/frontend/src/components/details/DetailsImage.tsx index 3efdc9386b..98336aab4c 100644 --- a/src/frontend/src/components/details/DetailsImage.tsx +++ b/src/frontend/src/components/details/DetailsImage.tsx @@ -82,8 +82,14 @@ const removeModal = (apiPath: string, setImage: (image: string) => void) => ), labels: { confirm: t`Remove`, cancel: t`Cancel` }, onConfirm: async () => { - await api.patch(apiPath, { image: null }); - setImage(backup_image); + api.patch(apiPath, { image: null }).then(() => { + setImage(backup_image); + showNotification({ + title: t`Image removed`, + message: t`The image has been removed successfully`, + color: 'green' + }); + }); } }); diff --git a/src/frontend/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx b/src/frontend/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx index 796c191268..c0799f0403 100644 --- a/src/frontend/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx +++ b/src/frontend/src/components/editors/TemplateEditor/PdfPreview/PdfPreview.tsx @@ -112,9 +112,9 @@ export const PdfPreviewComponent: PreviewAreaComponent = forwardRef( style={{ display: 'flex', justifyContent: 'center', - alignItems: 'center', height: '100%', - width: '100%' + width: '100%', + paddingTop: '50px' }} > Preview not available, click "Reload Preview". diff --git a/src/frontend/src/components/forms/DateTimeField.tsx b/src/frontend/src/components/forms/DateTimeField.tsx new file mode 100644 index 0000000000..7c888f72af --- /dev/null +++ b/src/frontend/src/components/forms/DateTimeField.tsx @@ -0,0 +1,75 @@ +import type { ApiFormFieldType } from '@lib/types/Forms'; +import { t } from '@lingui/core/macro'; +import { DateTimePicker } from '@mantine/dates'; +import dayjs from 'dayjs'; +import customParseFormat from 'dayjs/plugin/customParseFormat'; +import { useCallback, useId, useMemo } from 'react'; +import type { FieldValues, UseControllerReturn } from 'react-hook-form'; + +dayjs.extend(customParseFormat); + +export default function DateTimeField({ + controller, + definition +}: Readonly<{ + controller: UseControllerReturn; + definition: ApiFormFieldType; +}>) { + const fieldId = useId(); + + const { + field, + fieldState: { error } + } = controller; + + const valueFormat = 'YYYY-MM-DD HH:mm:ss'; + + const onChange = useCallback( + (value: any) => { + // Convert the returned date object to a string + if (value) { + value = value.toString(); + value = dayjs(value).format(valueFormat); + } + + field.onChange(value); + definition.onValueChange?.(value); + }, + [field.onChange, definition, valueFormat] + ); + + const dateTimeValue: Date | null = useMemo(() => { + let dv: Date | null = null; + + if (field.value) { + dv = dayjs(field.value).toDate(); + } + + // Ensure that the date is valid + if (dv instanceof Date && !Number.isNaN(dv.getTime())) { + return dv; + } else { + return null; + } + }, [field.value]); + + return ( + + ); +} diff --git a/src/frontend/src/components/forms/fields/ApiFormField.tsx b/src/frontend/src/components/forms/fields/ApiFormField.tsx index cc6f12e710..793ab1f217 100644 --- a/src/frontend/src/components/forms/fields/ApiFormField.tsx +++ b/src/frontend/src/components/forms/fields/ApiFormField.tsx @@ -6,6 +6,7 @@ import { type Control, type FieldValues, useController } from 'react-hook-form'; import type { ApiFormFieldSet, ApiFormFieldType } from '@lib/types/Forms'; import { IconFileUpload } from '@tabler/icons-react'; +import DateTimeField from '../DateTimeField'; import { BooleanField } from './BooleanField'; import { ChoiceField } from './ChoiceField'; import DateField from './DateField'; @@ -84,6 +85,7 @@ export function ApiFormField({ onValueChange: undefined, adjustFilters: undefined, adjustValue: undefined, + allow_null: undefined, read_only: undefined, children: undefined, exclude: undefined @@ -161,10 +163,13 @@ export function ApiFormField({ /> ); case 'date': - case 'datetime': return ( ); + case 'datetime': + return ( + + ); case 'integer': case 'decimal': case 'float': @@ -175,6 +180,10 @@ export function ApiFormField({ fieldName={fieldName} definition={reducedDefinition} placeholderAutofill={fieldDefinition.placeholderAutofill ?? false} + placeholderWarningCompare={ + fieldDefinition.placeholderWarningCompare ?? undefined + } + placeholderWarning={fieldDefinition.placeholderWarning ?? undefined} onChange={(value: any) => { onChange(value); }} @@ -233,6 +242,11 @@ export function ApiFormField({ /> ); default: + // This should never happen - it represents a critical UI issue which should be caught in CI + console.error( + `Invalid field type for field '${fieldName}': '${fieldDefinition.field_type}'` + ); + return ( Invalid field type for field '{fieldName}': ' diff --git a/src/frontend/src/components/forms/fields/AutoFillRightSection.tsx b/src/frontend/src/components/forms/fields/AutoFillRightSection.tsx index c3c5a5661e..4365d97392 100644 --- a/src/frontend/src/components/forms/fields/AutoFillRightSection.tsx +++ b/src/frontend/src/components/forms/fields/AutoFillRightSection.tsx @@ -1,6 +1,6 @@ import { t } from '@lingui/core/macro'; import { Tooltip } from '@mantine/core'; -import { IconCopyCheck, IconX } from '@tabler/icons-react'; +import { IconCopyCheck, IconExclamationMark, IconX } from '@tabler/icons-react'; /** * Custom "RightSection" component for form fields, @@ -55,3 +55,21 @@ export default function AutoFillRightSection({ ); } } + +export function AutoFillWarning({ + fieldName, + message +}: { + fieldName: string; + message: string; +}) { + return ( + + + + ); +} diff --git a/src/frontend/src/components/forms/fields/DateField.tsx b/src/frontend/src/components/forms/fields/DateField.tsx index 56e5eb0a45..c1fc187d8a 100644 --- a/src/frontend/src/components/forms/fields/DateField.tsx +++ b/src/frontend/src/components/forms/fields/DateField.tsx @@ -22,12 +22,7 @@ export default function DateField({ fieldState: { error } } = controller; - const valueFormat = useMemo(() => { - // Determine the format based on the field type - return definition.field_type == 'date' - ? 'YYYY-MM-DD' - : 'YYYY-MM-DD HH:mm:ss'; - }, [definition.field_type]); + const valueFormat = 'YYYY-MM-DD'; const onChange = useCallback( (value: any) => { @@ -35,6 +30,8 @@ export default function DateField({ if (value) { value = value.toString(); value = dayjs(value).format(valueFormat); + + // Strip the time portion from the date input value = value.toString().split('T')[0]; } diff --git a/src/frontend/src/components/forms/fields/NumberField.tsx b/src/frontend/src/components/forms/fields/NumberField.tsx index 63bfbb2868..0369d0935a 100644 --- a/src/frontend/src/components/forms/fields/NumberField.tsx +++ b/src/frontend/src/components/forms/fields/NumberField.tsx @@ -1,7 +1,7 @@ import { NumberInput } from '@mantine/core'; import { useId, useMemo } from 'react'; import type { FieldValues, UseControllerReturn } from 'react-hook-form'; -import AutoFillRightSection from './AutoFillRightSection'; +import AutoFillRightSection, { AutoFillWarning } from './AutoFillRightSection'; /** * Custom implementation of the mantine component, @@ -12,12 +12,16 @@ export default function NumberField({ fieldName, definition, placeholderAutofill, + placeholderWarningCompare, + placeholderWarning, onChange }: Readonly<{ controller: UseControllerReturn; definition: any; fieldName: string; placeholderAutofill?: boolean; + placeholderWarningCompare?: number | string; + placeholderWarning?: string; onChange: (value: any) => void; }>) { const fieldId = useId(); @@ -56,6 +60,43 @@ export default function NumberField({ return val; }, [definition.field_type, value]); + const rightSection = useMemo(() => { + if ( + definition.placeholder && + placeholderAutofill && + numericalValue == null + ) { + return ( + + ); + } else if (placeholderWarning && numericalValue != null) { + if ( + placeholderWarningCompare != null && + numericalValue === placeholderWarningCompare + ) { + return undefined; + } + return ( + + ); + } + return undefined; + }, [ + definition, + placeholderAutofill, + placeholderWarning, + placeholderWarningCompare, + numericalValue, + field.name, + field.value, + onChange + ]); + return ( - ) - } + rightSection={rightSection} /> ); } diff --git a/src/frontend/src/components/forms/fields/RelatedModelField.tsx b/src/frontend/src/components/forms/fields/RelatedModelField.tsx index 85398bac35..9155bf3c4c 100644 --- a/src/frontend/src/components/forms/fields/RelatedModelField.tsx +++ b/src/frontend/src/components/forms/fields/RelatedModelField.tsx @@ -380,6 +380,7 @@ export function RelatedModelField({ onValueChange: undefined, adjustFilters: undefined, exclude: undefined, + allow_null: undefined, read_only: undefined }; }, [definition]); diff --git a/src/frontend/src/components/importer/ImportDataSelector.tsx b/src/frontend/src/components/importer/ImportDataSelector.tsx index db4556ab86..d91a94f776 100644 --- a/src/frontend/src/components/importer/ImportDataSelector.tsx +++ b/src/frontend/src/components/importer/ImportDataSelector.tsx @@ -244,7 +244,11 @@ export default function ImporterDataSelector({ url: ApiEndpoints.import_session_row_list, pk: selectedRow.pk, title: t`Delete Row`, - onFormSuccess: () => table.refreshTable() + onFormSuccess: () => { + table.clearSelectedRecords(); + table.refreshTable(); + session.refreshSession(); + } }); const rowErrors = useCallback((row: any) => { @@ -431,6 +435,8 @@ export default function ImporterDataSelector({ enableSelection: true, enableBulkDelete: true, afterBulkDelete: () => { + table.clearSelectedRecords(); + table.refreshTable(); session.refreshSession(); } }} diff --git a/src/frontend/src/components/importer/ImporterColumnSelector.tsx b/src/frontend/src/components/importer/ImporterColumnSelector.tsx index 4036b4f3b5..8031495cac 100644 --- a/src/frontend/src/components/importer/ImporterColumnSelector.tsx +++ b/src/frontend/src/components/importer/ImporterColumnSelector.tsx @@ -84,16 +84,28 @@ function ImporterDefaultField({ }) { const api = useApi(); - const [rawValue, setRawValue] = useState(''); + const [rawValue, setRawValue] = useState(undefined); + + // Initialize raw value with provided default + useEffect(() => { + setRawValue(session.fieldDefaults[fieldName]); + }, [fieldName, session.fieldDefaults]); const fieldType: string = useMemo(() => { return session.availableFields[fieldName]?.type; }, [fieldName, session.availableFields]); - const [value] = useDebouncedValue(rawValue, fieldType == 'string' ? 500 : 10); - const onChange = useCallback( (value: any) => { + if (value === undefined) { + value = session.fieldDefaults[fieldName]; + } + + // No change - do nothing + if (value === session.fieldDefaults[fieldName]) { + return; + } + // Update the default value for the field const defaults = { ...session.fieldDefaults, @@ -114,6 +126,21 @@ function ImporterDefaultField({ [fieldName, session, session.fieldDefaults] ); + const getDebounceTime = (type: string) => { + switch (type) { + case 'string': + return 500; + case 'number': + case 'float': + case 'integer': + return 200; + default: + return 50; + } + }; + + const [value] = useDebouncedValue(rawValue, getDebounceTime(fieldType)); + // Update the default value after the debounced value changes useEffect(() => { onChange(value); diff --git a/src/frontend/src/components/importer/ImporterDrawer.tsx b/src/frontend/src/components/importer/ImporterDrawer.tsx index 2ed836627c..eb5a4343af 100644 --- a/src/frontend/src/components/importer/ImporterDrawer.tsx +++ b/src/frontend/src/components/importer/ImporterDrawer.tsx @@ -42,7 +42,7 @@ function ImportDrawerStepper({ > - + @@ -133,7 +133,7 @@ export default function ImporterDrawer({ ); - }, [session.sessionData]); + }, [currentStep, session.sessionData]); return ( ( @@ -19,6 +21,21 @@ export const InvenTreeLogoHomeButton = forwardRef( } ); -export const InvenTreeLogo = () => { +/* + * Render the InvenTree logo + * - Uses the custom logo if one is defined on the server + * - Otherwise, uses the default logo + */ +export function InvenTreeLogo(): ReactNode { + const [server] = useServerApiState( + useShallow((state) => [state.server, state.fetchServerApiState]) + ); + + if (server.server && server.customize?.logo) { + return ( + {t`InvenTree + ); + } + return {t`InvenTree; -}; +} diff --git a/src/frontend/src/components/items/LanguageSelect.tsx b/src/frontend/src/components/items/LanguageSelect.tsx index 6ef3cdfc0a..3650603670 100644 --- a/src/frontend/src/components/items/LanguageSelect.tsx +++ b/src/frontend/src/components/items/LanguageSelect.tsx @@ -1,8 +1,12 @@ import { Select } from '@mantine/core'; import { useEffect, useState } from 'react'; +import { t } from '@lingui/core/macro'; import { useShallow } from 'zustand/react/shallow'; -import { getSupportedLanguages } from '../../contexts/LanguageContext'; +import { + activateLocale, + getSupportedLanguages +} from '../../contexts/LanguageContext'; import { useLocalState } from '../../states/LocalState'; export function LanguageSelect({ width = 80 }: Readonly<{ width?: number }>) { @@ -28,13 +32,21 @@ export function LanguageSelect({ width = 80 }: Readonly<{ width?: number }>) { })); setLangOptions(newLangOptions); setValue(locale); + activateLocale(locale); // Ensure the locale is activated on component load }, [locale]); return (